还在为Xray POC编写头疼?别慌!这篇“食用指南”带你告别枯燥的文档,玩转YAML脚本,轻松编写属于你的专属POC!🚀
YAML:安全界的“乐高积木”?
YAML,一种让人又爱又恨的序列化数据格式,就像安全圈的“乐高积木”,结构清晰但细节繁琐。
- 特点:
- 大小写敏感: “敏感”如你,一丝一毫都不能搞错!
- #号注释: 想说什么悄悄话?“#”号帮你搞定!
- 空格缩进: 层级关系全靠空格,Tab键?不存在的!
- YAML字符串转义: 遇到特殊字符?记得转义一下,不然YAML会“罢工”哦! ➡️ YAML字符串转义
POC脚本“葵花宝典”:从入门到精通
1. 命名规则:
文件命名要规范,就像给孩子起名字一样重要!组件-编号-漏洞类型.yml
,例如:super-cms-cve-2023-9999-sqli.yml
# 基本信息
# POC名称,格式:poc-yaml-<组件名>-<漏洞编号>-<漏洞类型>
name: poc-yaml-super-cms-cve-2023-9999-sqli
# 是否手工编写,Xray有些POC是自动生成的
manual: true
2. 脚本核心:
set: # 定义全局变量,就像给你的POC起个响亮的名号!
randInt0: randomInt(1000, 9999) # 随机整数?小菜一碟!
randStr1: randomLowercase(10) # 随机字符串?安排!
transport: http # 通信协议,是http还是https?
rules: # 规则,POC的灵魂所在!
r1: # 第一个规则
request: # 请求方式,用什么姿势去搞事情?
method: GET # GET请求,简单粗暴!
path: "/" # 目标路径,直捣黄龙!
expression: | # 最终执行结果,决定POC是否成功!
response.status == 200 && response.body.bcontains(b"example")
output: # 从响应包中提取关键信息,像侦探一样!
search: |
r'(?P<info>|.*|)'.bsubmatch(response.raw)
info: search["info"]
expression: r1() # 规则执行顺序,让POC按照你的剧本走!
set
:全局变量,就像你的百宝箱,随时取用!randomInt(min, max)
:生成随机整数,让目标防不胜防!randomLowercase(length)
:生成随机字符串,增加攻击的迷惑性!
transport
:通信协议,选择正确的“交通工具”才能到达目的地!rules
:语法规则,POC的核心逻辑!search
:正则表达式匹配,提取关键信息,让漏洞无处遁形!info:search["info"]
:自定义变量,方便后续调用,让代码更简洁!request
:定义请求方式和目标路径,发起攻击的“第一步”!
expression
:判断规则是否命中,决定POC的成败!r1() && r2() && r3()
:所有规则都命中,才能宣告胜利!r1() || r2() || r3()
:只要一个规则命中,就足够了!r1() || (r2() && r3())
:灵活组合,让你的POC更强大!
- 短路求值:
r1() || r2()
,如果r1()
成功,r2()
就不用执行了,省时省力!
3. 信息部分:
detail: # 漏洞细节描述,让别人更容易理解你的POC!
author: Chaitin(https://www.chaitin.cn/) # 作者信息,留下你的大名!
links: # 参考链接,方便学习和研究!
- https://docs.xray.cool/
# 还有一些指纹和漏洞信息,可以参考文档
4. 完整POC示例:
# 基本信息
name: poc-yaml-test
manual: true
# 脚本部分
set:
randInt0: randomInt(1000, 9999)
randStr1: randomLowercase(10)
transport: http
rules:
r1:
request:
method: GET
path: "/"
expression: |
response.status == 200 && response.body.bcontains(b"example")
output:
search: |
r'(?P<info>|.*|)'.bsubmatch(response.raw)
info: search["info"]
expression: r1()
# 信息部分
detail:
author: Chaitin(https://chaitin.com/)
links:
- https://docs.xray.cool/
expression
表达式:玩转响应包匹配
expression: response.status == 200 # 状态码必须是200!
expression: "zbx_session" in response.headers # Header里必须包含"zbx_session"!
expression: response.body.bcontains(b"verify_string") # Body里必须包含"verify_string"!
# 前面使用了md5加密随机值: md5({{randNum}}), 后面可使用以下语句来进行匹配:
expression: response.body.bcontains(bytes(md5(string(randNum)))) # 验证加密后的数据!
搜索字符:
search: |
""verify_string":"(?P<token>\w+)"".bsubmatch(response.body) # 用正则提取token!
常用字段“避坑指南”
output
- rule执行后的“战利品”
out
字段定义的变量是全局变量,但要注意命名冲突!
错误示例:
r0:
request:
method: GET
path: /
expression: response.status == 200
output:
search: "?P<info>\w+".bsubmatch(response.body)
info1: search["info"]
r1:
request:
method: GET
path: /test.php
expression: response.status == 200
output:
search: "?P<info>\w+".bsubmatch(response.body)
info2: search["info"] # 这里的search会和r0的search一样!
正确示例:
r0:
request:
method: GET
path: /
expression: response.status == 200
output:
r0search: "?P<info>\w+".bsubmatch(response.body)
info1: r0search["info"]
r1:
request:
method: GET
path: /test.php
expression: response.status == 200
output:
r1search: "?P<info>\w+".bsubmatch(response.body)
info2: r1search["info"] # 命名不同的变量!
follow_redirects
- “追”还是“不追”?
follow_redirects: bool
决定是否跟随30X跳转。
场景:从302跳转的包中获取信息并设置Cookie,需要设置follow_redirects
为false
,然后手动发起请求。
payloads
- “万箭齐发”
POCv2新增字段,实现发送不同Payload的效果,让你的攻击更具针对性!
注意: Gamma 语法检查可能会报错,但实际可以运行。
变量名/函数名 | 类型 | 说明 |
---|---|---|
continue | bool | 命中一个之后是否继续,默认false命中即停 |
payloads | map[string]Set | 和 set 一样的结构和语法 |
示例:
payloads:
payloads:
ping:
cmd: r"ping test.com"
curl:
cmd: r"curl test.com" # 每个Payload中的`key`必须严格一致!
reverse
- 反连平台,让目标“自投罗网”
利用反连平台,实现更高级的漏洞利用!
set:
reverse: newReverse()
reverseURL: reverse.url
rules:
r1:
request:
method: POST
path: "/xxx/{{reverseURL}}"
expression: |
reverse.wait(5)
CEL:高级表达式的“秘密武器”
- CEL语法 - 官方文档
- expression编写
Xray POC调试秘籍:
- Xray格式检测:
$ xray poclint --script poc-yaml-xxx.yml # 提交前一定要进行格式检测!
- Xray功能调试:
$ xray --log-level debug webscan --url http://example.com -p ./poc-yaml-xxx.yml # 配合Burp,事半功倍!
- Gamma:
# 语法检查
$ gamma lint --script xxx.yml
# 运行
$ gamma run --target "http://xxx.com" --script xxx.yml
# 调试运行
$ GAMMA_LOG_LEVEL=debug ./gamma run --no-cache --target "http://xxx.com" --script xxx.yml
# 搭配Burp调试
$ gamma run --target "http://xxx.com" --script xxx.yml --http-proxy http://127.0.0.1:8080
Xray POC辅助工具,效率提升不止一点点!
温馨提示: 本文仅供安全学习交流,请勿用于非法用途!所有渗透需获取授权!
黑客/网络安全学习包
资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**
**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
更多内容为防止和谐,可以扫描获取~
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************