XSS Fuzzing初探
Posted 联想安全实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS Fuzzing初探相关的知识,希望对你有一定的参考价值。
0x00 关于XSS
我们知道XSS可以理解为一种前端JS注入,那在攻防两端博弈的过程中,由于对漏洞原理和修复方式理解上的偏差,经常会发生一些有意思的事情。
下面就给大家分享一个Fuzzing案例,借此希望大家可以更好的理解XSS以及如何修复。
0x01 奇葩过滤
首先发现一处xss,是在一个搜索框的placeholder属性,会返回你上一次搜索的内容
尖括号会被过滤,双引号没过滤。所以只能在input标签的属性里做文章了。
然后又发现会对部分事件属性的关键字做空格隔开处理,比如onclick会变成on空格click,这也真是个奇葩的防御思路啊。。。
0x02 Fuzzing
既然不是所有事件属性都加空格,那么我们就来fuzzing一下所有的事件属性,看看没加空格的都有哪些可以被我们利用一下的。
http://www.w3school.com.cn/tags/html_ref_eventattributes.asp
提取出来所有的事件属性列表。
放到burpsuite的intruder中进行fuzzing
跑完之后,我们使用正则过滤返回值中的关键部分,只显示没有加空格的事件属性。
这样就可以在相关列中查看哪些事件属性可以正常使用了。
得到了这些可用的属性,剩下的就要一个一个试,看哪个能真正使用了。
0x03 保持耐心
由于是input标签,关于多媒体的事件不能使用,试了onredu、onundo、ononline、onoffline不知道怎么才能触发,onforminput、onformchange也没反应,最后最后终于找到一个oninvalid属性。(说起来很快,实际过程花了几个小时)
https://blog.csdn.net/heyue_99/article/details/53116292
是说当元素内容不满足pattern时,提交表单时会触发oninvalid。
0x04 攻击payload
https://xxx.net/workorders/search
在输入框中输入
content=1na5r1"oninvalid="alert(1);" pattern="[a-z]+
查询
然后再在输入框中输入数字(只要不满足pattern中的正则),点查询,即可触发
0x05 修复建议
其实修复还是老建议,最简单的服务端对单引号、双引号、尖括号等特殊字符进行字符转义,保证数据段不会越界到代码段就可以了。
这里还想说一下,你如果修复就是要采用这种黑名单的方式,一个一个的把属性的关键字全都封掉,最后是可以封住,没法利用xss的。但严格来说,这样只是不能利用了,问题本质还是存在的,因为双引号没有过滤,攻击者到底还是可以破坏你正常的标签属性。并且你封的关键字多了就不怕误伤一些其他的正常请求吗?再有如果以后html又出了新的属性呢?封的过来吗?到时会想起来再更新黑名单吗?那你如果说这就是攻防的博弈呀。。。是,是博弈。但这种博弈从甲方看是毫无意义的,这种低级的博弈只会增加攻击者的乐趣和快感。
回到正确的修复建议,写一个xss_filter里面转义一下单引号、双引号、尖括号不好吗?后面所有的输入都调一下这个xss_filter多好,一劳永逸。建议研发同学们都按这种思路修复。当然研发遇到的情况通常要比我们想象的要复杂,所以如果真的遇到没办法一劳永逸的解决这个问题,那修复的时候也一定要抓住关键,对xss来说就是双引号和尖括号,不管你是删除还是转义还是怎么的,只要抓住这两个字符基本可以杜绝大部分xss了。
以上是关于XSS Fuzzing初探的主要内容,如果未能解决你的问题,请参考以下文章
转:初探Windows Fuzzing神器----Winafl