mirror of
https://github.com/chainreactors/spray.git
synced 2025-09-15 11:40:13 +00:00
优化basecompare逻辑, 加入index baseline的对比
This commit is contained in:
parent
32bf598c28
commit
7d67e81cb0
@ -89,7 +89,7 @@ func NewPool(ctx context.Context, config *pkg.Config) (*Pool, error) {
|
|||||||
bl = &pkg.Baseline{Url: pool.BaseURL + unit.path, IsValid: false, Err: reqerr.Error(), Reason: ErrRequestFailed.Error()}
|
bl = &pkg.Baseline{Url: pool.BaseURL + unit.path, IsValid: false, Err: reqerr.Error(), Reason: ErrRequestFailed.Error()}
|
||||||
pool.failedBaselines = append(pool.failedBaselines, bl)
|
pool.failedBaselines = append(pool.failedBaselines, bl)
|
||||||
} else {
|
} else {
|
||||||
if err = pool.PreCompare(resp); unit.source == CheckSource || unit.source == InitSource || err == nil {
|
if err = pool.PreCompare(resp); unit.source != WordSource || err == nil {
|
||||||
// 通过预对比跳过一些无用数据, 减少性能消耗
|
// 通过预对比跳过一些无用数据, 减少性能消耗
|
||||||
bl = pkg.NewBaseline(req.URI(), req.Host(), resp)
|
bl = pkg.NewBaseline(req.URI(), req.Host(), resp)
|
||||||
pool.addFuzzyBaseline(bl)
|
pool.addFuzzyBaseline(bl)
|
||||||
@ -99,11 +99,15 @@ func NewPool(ctx context.Context, config *pkg.Config) (*Pool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch unit.source {
|
switch unit.source {
|
||||||
case InitSource:
|
case InitRandomSource:
|
||||||
pool.base = bl
|
pool.base = bl
|
||||||
pool.addFuzzyBaseline(bl)
|
pool.addFuzzyBaseline(bl)
|
||||||
pool.initwg.Done()
|
pool.initwg.Done()
|
||||||
return
|
return
|
||||||
|
case InitIndexSource:
|
||||||
|
pool.index = bl
|
||||||
|
pool.initwg.Done()
|
||||||
|
return
|
||||||
case CheckSource:
|
case CheckSource:
|
||||||
if bl.Err != "" {
|
if bl.Err != "" {
|
||||||
logs.Log.Warnf("[check.error] maybe ip had banned by waf, break (%d/%d), error: %s", pool.failedCount, pool.BreakThreshold, bl.Err)
|
logs.Log.Warnf("[check.error] maybe ip had banned by waf, break (%d/%d), error: %s", pool.failedCount, pool.BreakThreshold, bl.Err)
|
||||||
@ -167,6 +171,7 @@ type Pool struct {
|
|||||||
failedCount int
|
failedCount int
|
||||||
failedBaselines []*pkg.Baseline
|
failedBaselines []*pkg.Baseline
|
||||||
base *pkg.Baseline
|
base *pkg.Baseline
|
||||||
|
index *pkg.Baseline
|
||||||
baselines map[int]*pkg.Baseline
|
baselines map[int]*pkg.Baseline
|
||||||
analyzeDone bool
|
analyzeDone bool
|
||||||
genReq func(s string) (*ihttp.Request, error)
|
genReq func(s string) (*ihttp.Request, error)
|
||||||
@ -178,8 +183,9 @@ type Pool struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *Pool) Init() error {
|
func (p *Pool) Init() error {
|
||||||
p.initwg.Add(1)
|
p.initwg.Add(2)
|
||||||
p.pool.Invoke(newUnit(pkg.RandPath(), InitSource))
|
p.pool.Invoke(newUnit(pkg.RandPath(), InitRandomSource))
|
||||||
|
p.pool.Invoke(newUnit("/", InitIndexSource))
|
||||||
p.initwg.Wait()
|
p.initwg.Wait()
|
||||||
// todo 分析baseline
|
// todo 分析baseline
|
||||||
// 检测基本访问能力
|
// 检测基本访问能力
|
||||||
@ -188,8 +194,16 @@ func (p *Pool) Init() error {
|
|||||||
return fmt.Errorf(p.base.String())
|
return fmt.Errorf(p.base.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if p.index.Err != "" {
|
||||||
|
return fmt.Errorf(p.index.String())
|
||||||
|
}
|
||||||
|
|
||||||
p.base.Collect()
|
p.base.Collect()
|
||||||
logs.Log.Important("[baseline.init] " + p.base.String())
|
p.index.Collect()
|
||||||
|
|
||||||
|
logs.Log.Important("[baseline.random] " + p.base.String())
|
||||||
|
logs.Log.Important("[baseline.index] " + p.base.String())
|
||||||
|
|
||||||
if p.base.RedirectURL != "" {
|
if p.base.RedirectURL != "" {
|
||||||
CheckRedirect = func(redirectURL string) bool {
|
CheckRedirect = func(redirectURL string) bool {
|
||||||
if redirectURL == p.base.RedirectURL {
|
if redirectURL == p.base.RedirectURL {
|
||||||
@ -270,10 +284,17 @@ func (p *Pool) BaseCompare(bl *pkg.Baseline) {
|
|||||||
}
|
}
|
||||||
var status = -1
|
var status = -1
|
||||||
base, ok := p.baselines[bl.Status] // 挑选对应状态码的baseline进行compare
|
base, ok := p.baselines[bl.Status] // 挑选对应状态码的baseline进行compare
|
||||||
if !ok && p.base.Status == bl.Status {
|
if !ok {
|
||||||
// 当other的状态码与base相同时, 会使用base
|
if p.base.Status == bl.Status {
|
||||||
ok = true
|
// 当other的状态码与base相同时, 会使用base
|
||||||
base = p.base
|
ok = true
|
||||||
|
base = p.base
|
||||||
|
} else if p.index.Status == bl.Status {
|
||||||
|
// 当other的状态码与index相同时, 会使用index
|
||||||
|
ok = true
|
||||||
|
base = p.index
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ok {
|
if ok {
|
||||||
|
@ -31,7 +31,8 @@ type sourceType int
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
CheckSource sourceType = iota + 1
|
CheckSource sourceType = iota + 1
|
||||||
InitSource
|
InitRandomSource
|
||||||
|
InitIndexSource
|
||||||
WordSource
|
WordSource
|
||||||
WafSource
|
WafSource
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user