1742天 博客通用头像 Edwiin

本人熟练掌握linux,windows的开关机,擅长nfs,samba,ftp,dhcp,bind,apache,mail等各项服务的安装与卸载,精通shell,mysql,iptables,selinux等单词的拼写,了解虚拟化,存储,集群等相关汉字的书写。

跨站的艺术:XSS Fuzzing 的技巧

发布于 4年前 / 1.0k 次围观 / 0 条评论 / 技术学习 / Edwiin
本文最后更新于2017-4-3,已超过 1 个月没有更新,如果文章内容或图片资源失效,请【留言反馈】,我会及时处理,谢谢!

对于XSS漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做Fuzzing;同样是Fuzzing,有些人挖洞比较高效,有些人却不那么容易挖出漏洞,除了掌握的技术之外,比如编码的绕过处理等,还包含一些技巧的东西,掌握一些技巧和规律,可以使得挖洞会更加从容。

XSS应该是我挖过的最多漏洞的一种Web漏洞类型,累积下来,就国内BAT、金山、新浪、网易等这些互联网公司的XSS,应该至少也有超过100个,这篇文章主要就是根据自己的一些经验与大家一起探讨编码绕过、处理等技术因素之外的XSS Fuzzing的一些技巧。

Fuzzing(模糊测试)是挖掘漏洞最常用的手段之一,不止是XSS,应该可以说Fuzzing可以用于大部分类型的漏洞挖掘。通俗可以把这种方式理解为不断尝试的过程。

XSSFuzzing流程

14906903073189.png

这是一个比较常规的Web漏扫中XSS检测插件的一个流程图,其中比较关键的几个点在于:

检测输入点
潜在注入点检测
生成Payload
Payload攻击验证
检测输入点其实就是寻找数据入口,比如说GET/POST数据,或者Header头部里的UA/Referer/Cookie,再或者URL路径等等,这些都可以成为输入入口,转换为比较形象点的说法,比如看到一个搜索框,你可能会在搜索框里提交关键词进行搜索,那么这里可能就发生了一个GET或者POST请求,这里其实就是一个输入点。
其次是潜在注入点检测,潜在注入的检测是判断输入点是否可以成功把数据注入到页面内容,对于提交数据内容但是不输出到页面的输入点是没有必要进行Fuzzing的,因为即使可以提交攻击代码,也不会产生XSS;在潜在注入点的检测通常使用的是一个随机字符串,比如随机6位数字,再判断这6位数字是否返回输出在页面,以此来进行判断。为什么不直接使用Payload进行判断呢?因为Payload里包含了攻击代码,通常很多应用都有防火墙或者过滤机制,Payload中的关键词会被拦截导致提交失败或者不会返回输出在页面,但这种情况不代表不能XSS,因为有可能只是Payload不够好,没有绕过过滤或者其他安全机制,所以采用无害的随机数字字符就可以避免这种情况产生,先验证可注入,再调整Payload去绕过过滤;而随机的目的在于不希望固定字符成为XSS防御黑名单里的关键词

再者就是生成Payload和进行攻击验证的过程,Payload的好坏决定了攻击是否可以成功;而对于不同情况的注入点,需要使用的Payload也是不同的,比如,注入的位置在标签中还是标签事件中,使用的Payload是不同的;

标签中:如<a href="注入位置">test</a>,Payload:"></a><script>alert(0)</script><a href="
标签事件中:<img href="a.jpg" onload="注入位置">, Payload:alert(0) 
其实Payload的生成就是一个不断Fuzzing和不断调整的过程,根据注入位置上下文代码的结构、内容以及应用过滤机制等不断调整和不断提交测试的过程,下图是一个Payload的生成流程


1490259526183_2803_1490259526753.jpg

那么假如某次Payload调整后Fuzzing成功,也就意味XSS注入成功,并得出这个漏洞的PoC。
其实为什么一开始就介绍下扫描器常规的XSS检测方式呢?因为手工Fuzzing XSS其实也是这样一个过程,很多安全工具其实就是将手工的过程自动化。

  • 支付宝赞助图片
  • 微信赞助图片
  • QQ赞助图片
头像
描述: 还好有你,再见如初。
未显示?请点击刷新

Press Space to start