SRC漏洞挖掘之存储型XSS

0x01 漏洞简介

某天闲来无聊,打开我的burp、火狐、chrome浏览器,随便找了一个目标,便开始了漏洞挖掘之旅。

故事要从一个评论开始说起,打开网站的论坛,一个显眼的标题映入眼帘,“真人MM主播全天在线直播表演”,咳咳。。。,开玩笑的啦,哦也是个正经银啦。就是常规的帖子,也是一时兴起,随手留个个言,抓了个包,然后便有了这篇文章。本篇有意思的点在于网站本身是有过滤的,下面我会讲解我当时的绕过思路,大佬勿喷。

0x02 漏洞分析

01 敏锐的嗅觉很重要

刚刚说到留言抓包,数据包截图如下
在这里插入图片描述

码打的有点多,见谅哈。一般我们挖洞,第一个就是观察力,看到以下数据包大家发现了什么呢。是不是看到了很显眼的%3Cp%3E,一般看到这种数据包的时候,我们就要留意了,这里是很可能存在xss漏洞的,因为如果标签过滤不严格,是会导致直接写入恶意xss标签的。但是这种低级错误,在这里是不会有的,毕竟也是被搞得多了,多少也有点安全经验,不过也只是有点而已。

02 漫长的绕过过程

既然数据包中存在html标签,那我们就从标签测起。首先,肯定是第一个尝试老大哥

果不其然,被过滤了,从过滤规则来看,应该是使用的黑名单+正则的过滤方式,当匹配到script标签的时候,自动在左右两边添加xss字符串,这样xss语句就无法执行了。

过滤了script,没事,我们还有很多标签没有尝试呢。这里推荐一个大佬写的XSS过滤绕过速查表,附在参考链接了。后面尝试了<img/src=1>,服务器提示src只能为站内链接(没有截图),然后我又把src属性去掉,尝试写入,提交后发现直接被删掉了。好吧,看来img标签暂时是用不了了。

后面又陆陆续续尝试了以下标签,object、div、iframe、a、meta、style、svg等等一些列标签,基本都阵亡了,直接被删除了,唯一存活下来的标签input、select,如图
在这里插入图片描述

好吧,既然还有存活的标签,那么我们就不能放弃,继续盘起!尝试完html标签,我们现在就要尝试html事件处理程序,先是最常用的onmouseover,提交后如图
在这里插入图片描述

可以看到,onmouseover中的on直接被替换了为了xss_,说明我们之前的猜测是正确的,后端就是使用的正则+黑名单的方式进行过滤的,javascript、eval、alert也是一样被过滤的。后面也经过一系列的尝试,发现都会被替换掉,这个时候也是有点陷入僵局了。要说不是xss注入点,它又能写入少数html标签,但你说是xss注入点嘛,能用的标签和事件都给你堵死了,有点食之无味,弃之可惜的感觉。但是本着白帽子的勇往直前,义无反顾,大义灭亲,所向无敌,,,扯远了,反正就是那种精神吧,咱们也不能放弃这个漏洞,是不。

03 偶然发现,挖洞也需要一点运气

就在丢弃,又有点可惜的心理下,我又进行了一些尝试,主要是标签上的尝试,因为是采用的黑名单过滤,如果有能逃过去的标签,并且能够写入可执行脚本,那么还是有希望的。

也是运气吧,不能说是全靠实力,在不断的尝试中,无意间有了意外发现。当我们写入标签的时候,我发现返回内容为< a>,这个时候敏锐的嗅觉告诉我,有戏了!

可以从返回中发现,details被剔除了,但是后面的空格和a都被完整保留下来了,学过sql注入绕过的童鞋应该都能想到,在黑名单过滤中,如果能找到一个会被替换为空的字符,那么就可以利用该字符来构造sql语句,从而绕过黑名单校验。

这里也是同样的原理,既然直接提交会被检测到,那么我们就来变下形 ,提交后服务端返回如图
在这里插入图片描述

可以看到成功写入数据库了,再来刷新看一下前端页面,如图
在这里插入图片描述

查看后发现,script多了一个点,果然没那么简单啊,呵呵。后面尝试通过事件来触发,如图
在这里插入图片描述

其实服务端是成功写入了,但是考虑是输出时也做了过滤或者前端脚本做了过滤,总之payload随你写入,就是不让你成功执行,哎,就是玩!

但是,都已经到了这一步,哪能轻易放弃,必须一战到底啊。

发现事件还是无法使用之后,我又开始了新的尝试,既然你非要在script后面加个点,那我就把你注释掉,实际测试中是可以注释的,测试代码如下
在这里插入图片描述
在这里插入图片描述

可以看到,这样子是可以执行的,但是!但是!我们能想到的,可爱的开发童鞋也想到了,/直接被前端过滤了,写入数据库是可以的,如图
在这里插入图片描述

看一下前端的效果,如图
在这里插入图片描述

尝试写入两个反斜线,如图(<script/ /></script/ />)
在这里插入图片描述

可以看到中间多了个空格,看下前端的情况,如图
在这里插入图片描述

嗯哼,熟悉的感觉瞬间就出来了,看来开发只考虑了一个斜线的情况,当存在两个斜线时,第二个被隔开,但是第一个没有与script隔开,传送到前端的时候,由于无法识别 script/ 所以只去除了斜线,而没有添加一点,最终导致我们成功绕过。

后面就不用说了,能写入script标签了,啥都有了。

当我们遇到可以写入少数html标签,但是又存在过滤的时候,千万不要放弃,多加fuzz尝试,你终将会找到打开那把锁的钥匙!

0x03 修复建议

  1. 严格过滤用户输入的数据
  2. 使用白名单过滤校验

0x04 参考链接

XSS过滤绕过速查表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值