首页
/ 突破扫描限制:xray自定义HTTP请求头与Cookie高级配置指南

突破扫描限制:xray自定义HTTP请求头与Cookie高级配置指南

2026-02-05 05:31:30作者:盛欣凯Ernestine

你是否遇到过扫描需要登录的网站时频频碰壁?是否因目标服务器识别扫描工具而被拦截?本文将带你掌握xray安全评估工具的高级配置技巧,通过自定义HTTP请求头与Cookie,轻松绕过身份验证和反爬虫机制,实现精准高效的安全扫描。读完本文,你将学会:

  • 配置持久化Cookie实现自动登录扫描
  • 自定义HTTP请求头伪装浏览器环境
  • 在POC中灵活设置请求头参数
  • 结合实战案例解决复杂扫描场景

为什么需要自定义请求头与Cookie?

在进行Web安全评估时,许多目标网站存在访问控制机制,如登录验证、CSRF令牌、API密钥验证等。默认情况下,xray的扫描请求可能因缺乏必要的身份信息或被识别为自动化工具而失败。通过自定义请求头和Cookie,我们可以:

  • 模拟已登录用户状态,扫描需要身份验证的功能模块
  • 伪装成正常浏览器请求,避免被WAF或反爬虫机制拦截
  • 添加特定的API密钥、Token等身份验证信息
  • 解决因Referer、Origin等头信息缺失导致的扫描失败问题

xray作为一款完善的安全评估工具README.md,提供了多种方式来自定义HTTP请求头与Cookie,满足不同场景下的扫描需求。

基础配置:全局请求头与Cookie设置

xray支持通过命令行参数或配置文件设置全局的请求头和Cookie,这些配置将应用于所有扫描请求。

命令行参数快速配置

使用--header参数可以添加自定义HTTP请求头,使用--cookie参数可以设置Cookie信息:

# 添加自定义User-Agent和Referer头
xray webscan --url http://example.com --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" --header "Referer: https://www.google.com"

# 设置登录Cookie
xray webscan --url http://example.com --cookie "PHPSESSID=abc123; user=admin" --html-output scan-report.html

配置文件高级设置

对于复杂的配置需求,建议使用配置文件进行管理。创建或编辑xray配置文件(通常为config.yml),添加以下内容:

http:
  headers:
    User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    Accept-Language: "zh-CN,zh;q=0.9"
    Referer: "https://www.example.com"
  cookies:
    - name: "PHPSESSID"
      value: "abc123"
      domain: "example.com"
      path: "/"
    - name: "user"
      value: "admin"
      domain: "example.com"
      path: "/"

然后在扫描时指定配置文件:

xray webscan --config config.yml --basic-crawler http://example.com --html-output scan-report.html

高级技巧:在POC中自定义请求头与Cookie

xray的POC(Proof of Concept)文件支持为特定漏洞检测场景定义请求头和Cookie,实现更精细的控制。xray的POC文件采用YAML格式,存放在pocs/目录下。

POC中设置请求头示例

以下是一个在POC中设置请求头的示例,来自pocs/citrix-cve-2020-8191-xss.yml

name: poc-yaml-citrix-cve-2020-8191-xss
manual: true
transport: http
set:
    r1: randomLowercase(6)
rules:
    r0:
        request:
            cache: true
            method: POST
            path: /menu/stapp
            headers:
                Content-Type: application/x-www-form-urlencoded
            body: sid=254&pe=1%2C2%2C3%2C4%2C5&appname=%0D%0A%3C%2Ftitle%3E%3Cscript%3Ealert%28{{r1}}%29%3B%3C%2Fscript%3E&au=1&username=nsroot
            follow_redirects: true
        expression: response.body.bcontains(bytes("<script>alert(" + r1 + ");</script>")) && response.body.bcontains(b"citrix")
expression: r0()

在上述示例中,通过headers字段设置了Content-Typeapplication/x-www-form-urlencoded,适用于表单提交场景。

POC中使用Cookie进行身份验证

以下是一个在POC中使用Cookie进行身份验证的示例,来自pocs/dubbo-admin-default-password.yml

name: poc-yaml-dubbo-admin-default-password
manual: true
transport: http
rules:
    guest0:
        request:
            cache: true
            method: GET
            path: /
            headers:
                Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
        expression: 'response.status == 200 && response.body.bcontains(b"<title>Dubbo Admin</title>") && response.body.bcontains(b": guest'', ''/logout''") && response.body.bcontains(b"/sysinfo/versions")'
    root0:
        request:
            cache: true
            method: GET
            path: /
            headers:
                Authorization: Basic cm9vdDpyb290
        expression: 'response.status == 200 && response.body.bcontains(b"<title>Dubbo Admin</title>") && response.body.bcontains(b": root'', ''/logout''") && response.body.bcontains(b"/sysinfo/versions")'
expression: root0() || guest0()

这个POC通过在请求头中设置Authorization字段,使用Basic Auth进行身份验证,检查目标系统是否使用了默认凭证。

实战场景:扫描需要登录的网站

假设我们需要扫描一个需要登录的网站,常规步骤如下:

  1. 使用浏览器登录目标网站,获取登录后的Cookie信息
  2. 将Cookie配置到xray中,两种方式任选其一:
    • 使用--cookie命令行参数
    • 在配置文件中设置http.cookies
  3. 执行扫描命令

示例:使用Cookie扫描需要登录的网站

# 使用--cookie参数
xray webscan --url http://example.com/admin --cookie "PHPSESSID=abc123; user=admin" --html-output admin-scan.html

# 或者使用配置文件
xray webscan --config login-config.yml --basic-crawler http://example.com/admin --html-output admin-scan.html

处理动态变化的CSRF Token

有些网站使用CSRF Token来防止跨站请求伪造攻击,这会导致简单的Cookie配置无法持续有效。对于这种情况,我们可以:

  1. 编写自定义脚本来自动获取CSRF Token
  2. 结合xray的代理模式,手动登录后再进行扫描

使用代理模式扫描的命令如下:

xray webscan --listen 127.0.0.1:7777 --html-output proxy-login.html

设置浏览器代理为http://127.0.0.1:7777,然后手动在浏览器中完成登录操作,xray将捕获并使用登录后的Cookie进行后续扫描。

高级技巧:请求头与Cookie的动态调整

对于更复杂的场景,如不同URL需要不同的请求头或Cookie,我们可以使用xray的插件系统来实现动态调整。xray的webhook插件系统允许我们在请求发送前修改请求参数。

webhook插件配置示例

webhook插件的配置文件位于webhook/config.yml,我们可以在这里配置自定义的请求处理逻辑:

version: 1
server:
  host: 127.0.0.1
  port: 5000
  debug: false
  token: ""
  base_url: ""

plugins:
  custom-header:
    enabled: true
    args:
      target-url: "http://example.com/api"
      custom-header: "X-API-Key: mysecretkey"

然后编写自定义插件逻辑,在请求发送前检查URL,如果匹配目标URL则添加自定义请求头。

常见问题与解决方案

问题1:设置了Cookie但扫描仍提示未登录

可能原因及解决方法:

  • Cookie过期:重新获取最新的Cookie
  • Cookie作用域不正确:检查Cookie的domain和path是否与目标网站匹配
  • 存在多个Cookie:确保所有必要的Cookie都已配置

问题2:自定义请求头被覆盖

xray的请求头配置存在优先级:POC中定义的请求头 > 命令行参数设置的请求头 > 配置文件中的全局请求头。如果发现自定义请求头未生效,检查是否存在更高优先级的配置覆盖。

问题3:扫描请求被WAF拦截

解决方案:

  • 模拟真实浏览器的User-Agent
  • 添加常见的浏览器请求头,如Accept、Accept-Language、Referer等
  • 降低扫描速率,使用--rate-limit参数限制请求频率
  • 随机化请求间隔,避免被识别为自动化工具

总结与展望

通过本文介绍的方法,你已经掌握了在xray中自定义HTTP请求头与Cookie的各种技巧,能够应对大多数需要身份验证或特殊请求头的扫描场景。这些技巧包括:

  • 使用命令行参数快速配置
  • 通过配置文件进行全局设置
  • 在POC中定义特定请求头
  • 使用代理模式处理复杂登录流程
  • 结合webhook插件实现动态调整

xray作为一款功能强大的安全评估工具,其插件生态正在不断丰富。未来,我们可以期待更多自动化处理请求头和Cookie的功能,如自动识别和更新CSRF Token、智能模拟浏览器指纹等。

如果你在使用过程中遇到问题或有好的经验分享,欢迎加入xray社区讨论。贡献POC还可以获得丰厚奖励,详细信息请参考README.md中的"贡献POC"部分。

最后,安全扫描应该在合法授权的前提下进行,遵守相关法律法规和道德规范。合理使用xray等安全工具,共同维护网络安全生态。

欢迎点赞、收藏本文,关注获取更多xray使用技巧和Web安全知识!下一期我们将介绍"xray高级POC编写技巧",敬请期待。

登录后查看全文
热门项目推荐
相关项目推荐