Skip to main content

POC字段

EZ PoC字段名说明

序号字段名类型Yaml对应名称是否必选说明
1namestringnamePOC名称,限定由三种字符构成:小写字母、数字、-。
例如:poc-yaml-vbulletin-rce-cve-2020-17496
2Typeinttype定义检测POC的扫描类型,参数级或目录级,取值范围:
PERFILETYPE = 5
PERFOLDERTYPE = 1
PERSCHEMETYPE = 2
PERHOST = 3
PERDNS = 4
3Protocolstringprotocol协议,取值范围:HTTP、TCP、UDP,默认为HTTP
4LevelIntlevelPOC对应漏洞的风险等级,
0:低危(指纹提示、轻微的信息泄露、登录页面等,通常不开发该风险等级的指纹)
1:中危(可间接获取权限或信息的漏洞,如SQL注入、管理员密码或密码hash泄露、后台默认口令、ssrf等)
2 :高危(有一定条件的getshell,例如:需要暴力破解key、需要等待管理员触发等)
3:严重(可直接getshell或RCE的漏洞,如:Struts2-045、fastjson、shiro反序列化RCE等)
5FingerstringfingerPOC所对应指纹,若该字段被定义,则当且仅当匹配到对应指纹后才会发送POC检测。
取值有两种形式:
- "vbulletin" in finger.name (完全匹配)
- finger.name.lcontains("vbulletin") (搜索匹配)
6PocCodestringpocCode唯一值,默认不需要填写,EZ会自动生成,生成方式是先把yaml md5,然后取前4位。
7Setmap[string]stringset定义在POC中使用的变量,通常用于生成随机数和随机字符串。例如:
set:
r1: randomInt(8000, 10000)
r2: randomInt(8000, 10000)
8Rules[]red.RulesrulesPOC检测规则字段,由一系列检测规则组合而成,检测规则取值详见表二。
9Groupsmap[string][]red.Rulesgroups由若干个Rules组合而成,检测采用“或”关系运算,即只要其中某一个Rules满足检测逻辑就报告漏洞。通常Rules与Groups需要至少填写一项。
10DetailDetaildetail定义PoC的描述信息,详见表三

Rules字段说明:

序号字段名类型Yaml对应名称是否必选说明
1Methodstringmethod请求方式,Web漏洞POC取值通常包括:GET、POST、PUT、TRACE、MOVE等,TCP类型POC取值固定为TCP。
2Pathstringpath请求路径,在Web漏洞POC中必须填写,例如:“/index”
3Headersmap[string]stringheaders请求头,由一组请求头构成,指定发送POC时除默认请求头以外附加的请求头参数,例如:
headers:
Cookie: ctr_t=0; sid=123456789
Content-Type: application/json
4Bodyintbody请求体,指定发送POC时的请求体部分,形式允许任意填写。例如:
1. urlencode 类型:a=1&b=2
2. JSON类型:{"a":1,"b":2}
3. XML类型: \<xml> \<a>1\</a> \<b>2\</b> \</xml>
5Searchstringsearch定义从响应包中需要提取的变量,通过正则表达式的P方法将提取到的内容存储在变量中, 如下案例,将响应包中隐藏的input标签中连续的32位字符提取并储存在token变量。 例如:
search: <input\stype="hidden"\sname="(?P\<token>\S{32})"
6FollowRedirectsboolfollow_redirects是否跟随跳转,当取值为1时,表示跟随跳转,此时会检测跳转后的页面响应内容。当取值为0时,表示不跟随跳转,此时仅检测当前响应内容,尽管响应头为301、302也仍然仅会检测当前响应。
7Expressionstringexpression命中POC的条件,通常由一串逻辑表达式组成
例如:
expression: |
response.status == 200 && "root:[x*]:0:0:".bmatches(response.body)
表示当匹配到响应头状态200且响应内容命中所示正则时,完成此次匹配。
当缺省Expression字段时,会默认直接匹配该检测项,若POC中仅有一条检测项,且expression为空,则会直接报告漏洞存在。

Detail字段说明:

序号字段名类型Yaml对应名称是否必选说明
1Authorstringauthor插件开发作者
2Links[]stringlinks相关链接,提供一组能够描述漏洞原理、详情或复现方式的参考链接
3Descriptionstringdescription漏洞简要描述,可以直接填写与漏洞有关的描述信息。
4TvulIdinttvul_id与M-SEC对应的漏洞唯一编号,Web类POC由1-6位数字表示:
如:91846 可关联社区漏洞:https://msec.nsfocus.com/vuln/detail/2024-91846

Response字段说明:

序号字段名类型Yaml对应名称是否必选说明
1Headersmap[string]stringauthorheaders,匹配响应头参数,如: response.headers["content-type"].contains() 。
注意响应头全部小写。
2Bodybytebody响应体,通常匹配形式如下: response.body.bcontains(b"for 16-bit app support")
3Content_typestringcontent_type响应content-type字段,可以用headers["content-type"]代替。
4Statusintstatus响应状态码,例如:response.status==200
5ReqRawstringreqRaw请求原始内容,字符串形式
6RespRawstringrespRaw响应原始内容,字符串形式
7Body_md5stringbody_md5响应体md5值
8Icon_hashstringicon_hash图标hash,计算方法与fofa一致