XSS Fuzzing初探

Posted 联想安全实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS Fuzzing初探相关的知识,希望对你有一定的参考价值。

0x00 关于XSS

我们知道XSS可以理解为一种前端JS注入,那在攻防两端博弈的过程中,由于对漏洞原理和修复方式理解上的偏差,经常会发生一些有意思的事情。

下面就给大家分享一个Fuzzing案例,借此希望大家可以更好的理解XSS以及如何修复。

当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 XSS Fuzzing初探


0x01 奇葩过滤

首先发现一处xss,是在一个搜索框的placeholder属性,会返回你上一次搜索的内容

XSS Fuzzing初探

尖括号会被过滤,双引号没过滤。所以只能在input标签的属性里做文章了。

然后又发现会对部分事件属性的关键字做空格隔开处理,比如onclick会变成on空格click,这也真是个奇葩的防御思路啊。。。


XSS Fuzzing初探


0x02 Fuzzing

既然不是所有事件属性都加空格,那么我们就来fuzzing一下所有的事件属性,看看没加空格的都有哪些可以被我们利用一下的。

http://www.w3school.com.cn/tags/html_ref_eventattributes.asp

XSS Fuzzing初探

提取出来所有的事件属性列表。

XSS Fuzzing初探

放到burpsuite的intruder中进行fuzzing

XSS Fuzzing初探

跑完之后,我们使用正则过滤返回值中的关键部分,只显示没有加空格的事件属性。

XSS Fuzzing初探

这样就可以在相关列中查看哪些事件属性可以正常使用了。

XSS 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

安全牛学习笔记FUZZING

第一次ActiveX Fuzzing测试

资源:开源Fuzzers工具列表 (以及其它fuzzing工具)

Go Fuzzing已经进入Beta测试阶段

Kitty:Python语言编写的Fuzzing框架