跳到主要内容

judge

judge 库用于比较两次 HTTP 响应的相似度,量化差异程度,常用于布尔盲注、差异判定、WAF 拦截识别等"基于响应变化"的检测逻辑。

典型使用场景:

  • 相似度比较:judge.CompareHTTPResponse 比较两个响应对象,judge.CompareRaw 比较两段原始响应字节,返回相似度分值。
  • 判别器:judge.NewDiscriminator(origin) 以基准响应创建判别器,用于持续判定后续响应是否"显著不同"。

与相邻库的关系:judge 是检测判定工具,常与 fuzz/poc(发包)配合,把"响应差异"转化为漏洞是否触发的判断依据。

共 3 个函数

函数索引

函数参数返回值说明
judge.CompareHTTPResponsersp1 *http.Response, rsp2 *http.Responsefloat64比较两个 http.Response 对象的相似度,返回 0 到 1 之间的相似度分值
judge.CompareRawrsp1 []byte, rsp2 []bytefloat64比较两个原始 HTTP 响应报文的相似度,返回 0 到 1 之间的相似度分值
judge.NewDiscriminatororigin []byte*Discriminator基于一个原始响应样本创建一个判别器,用于判断其它响应是否与样本相似

函数详情

CompareHTTPResponse

CompareHTTPResponse(rsp1 *http.Response, rsp2 *http.Response) float64

比较两个 http.Response 对象的相似度,返回 0 到 1 之间的相似度分值

参数

参数名类型说明
rsp1*http.Response第一个 http.Response 对象
rsp2*http.Response第二个 http.Response 对象

返回值

序号类型说明
r1float64相似度分值,1 表示完全相同,0 表示完全不同

示例

// 比较两个 http.Response 对象的相似度(需先获得 Response 对象,作示意)
score = judge.CompareHTTPResponse(rsp1, rsp2)
println(score)

CompareRaw

CompareRaw(rsp1 []byte, rsp2 []byte) float64

比较两个原始 HTTP 响应报文的相似度,返回 0 到 1 之间的相似度分值

参数

参数名类型说明
rsp1[]byte第一个原始 HTTP 响应报文
rsp2[]byte第二个原始 HTTP 响应报文

返回值

序号类型说明
r1float64相似度分值,1 表示完全相同,0 表示完全不同

示例

// VARS: 比较两个完全相同的响应
score = judge.CompareRaw("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\nhello", "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\nhello")
// STDOUT: 打印相似度
println(score) // OUT: 1
// assert: 完全相同的响应相似度为 1
assert score == 1, "identical responses should score 1"

NewDiscriminator

NewDiscriminator(origin []byte) *Discriminator

基于一个原始响应样本创建一个判别器,用于判断其它响应是否与样本相似

参数

参数名类型说明
origin[]byte作为正样本的原始 HTTP 响应报文

返回值

序号类型说明
r1*Discriminator判别器对象,可调用 IsNegative 等方法进行相似度判别

示例

// VARS: 基于样本创建判别器
d = judge.NewDiscriminator("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\nhello")
// assert: 与负样本(空)相比不相似,IsNegative 返回 false
assert d.IsNegative("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\nhello") == false, "discriminator should be constructed and callable"