干货 - Xray POC编写指南,从零基础到精通,收藏这篇就够了!


还在为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_redirectsfalse,然后手动发起请求。

payloads - “万箭齐发”

POCv2新增字段,实现发送不同Payload的效果,让你的攻击更具针对性!

注意: Gamma 语法检查可能会报错,但实际可以运行。

变量名/函数名类型说明
continuebool命中一个之后是否继续,默认false命中即停
payloadsmap[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:高级表达式的“秘密武器”

Xray POC调试秘籍:

  1. Xray格式检测:
$ xray poclint --script poc-yaml-xxx.yml # 提交前一定要进行格式检测!
  1. Xray功能调试:
$ xray --log-level debug webscan --url http://example.com -p ./poc-yaml-xxx.yml # 配合Burp,事半功倍!
  1. 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辅助工具,效率提升不止一点点!

温馨提示: 本文仅供安全学习交流,请勿用于非法用途!所有渗透需获取授权!

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值