XSS漏洞发掘

记录几种发掘xss漏洞的方法

主要有三种方法:白盒测试,黑盒测试,灰盒测试

1.自动化测试工具(黑盒)

使用专业的xss漏洞自动化测试工具,能够快速有效的发掘漏洞,如Ratproxy(http://code.google.com/p/ratproxy/)

2.手动测试(黑盒)

人工测试主要是配合查看客户端的HTML源文件发掘xss,输入“<script>alert(0)</script>”等XSS攻击字符串并提交给应用程序的每个参数,然后监控这个输入的响应。如果目标程序没有对攻击字符串做出过滤,消毒和转义处理,就可以确认应用程序存在xss漏洞。
例如,如果针对页面的输入框进行测试,首先可以输入一些能触发xss的敏感字符,如:< > “ ‘ & #,如果这些基本字符都未被转义,则该输入框大概率存在xss漏洞,我们就可以再借此构造完整的xss代码进行测试。
或者我们也可以直接输入以下完整的xss代码进行尝试,如:

1
2
3
4
5
6
7
<script>alert(document.cookie);</script>

"><script>alert(document.cookie);</script>

="><script>alert(document.cookie);</script>

<IMG src="javascript:alert('XSS');">

如果提交后发现页面出现排版问题或者JS错误,也说明这个输入框可能存在XSS漏洞。
关于这个方法,由安全研究者Rsanke维护的XSS语句列表中持续更新最新的xss语句,大家可以参考测试web应用程序是否存在xss漏洞。
传送:http://ha.ckers.org/xss.html

2.源代码安全审计(白盒)

这里的源代码指的是web服务端的程序代码,如ASP,JSP,PHP等。
一般思路是:查找可能咋页面输出的变量,检验他们是否受到控制,然后跟踪这些变量的传递过程,分析他们是否被HTMLlencode()之类的函数过滤。
推荐一个大佬的操作实例,传送门:https://www.freebuf.com/articles/web/186163.html

3.JavaScript代码分析

由于Javascript功能强大,能控制Web客户端的逻辑,甚至能操作用户的输入与输出。在这个过程中,如果用户的恶意输入没有被正确处理就可能产生XSS。
记录一种特别的XSS—DOM-Based XSS.
前面的学习已经提到,DOM-Based XSS是基于DOM文档对象模型的一种漏洞,受客户端浏览器的脚本代码所影响。
记录一个例子:假设有如下代码:

1
2
3
4
5
6
7
8
9
10
11
<html>
<head>
<title> DOM-XSS test </title>
</head>
<body>
<script>
var a=document.URL;
document.write(a.substring(a,indexOf("a=")+2,a.length));
</script>
</body>
</html>

将以上代码保存在domXSS.html,中,然后用浏览器访问:

1
http://127.0.0.1/domXSS.html?a=test

页面打印出test信息,上述代码在解析URL过程中直接提取出a参数的值,并把这个值写入页面的HTML源代码中。
然而,攻击者可能会以Javascript代码作为a的参数的值,导致这段代码被动态的写入页面中。如构造一个恶意的请求地址:

1
http://127.0.0.1/domXSS.html?a=<script>alert('xss')</script>

当访问以上地址时,服务器返回包含上面脚本的HTML静态文本,浏览器会把HTML文本解析成DOM,并向服务器返回代码一样执行。结果如下图:
1
由此可见,DOM XSS受客户端脚本代码的影响,分析客户端Javascript的方式,便能发掘出基于XSS的漏洞。

国外安全研究员Amit Klein发表的一篇论文中详细的讲述了DOM-Based XSS的许多概念和技术,还列举了许多可能触发改漏洞的DOM对象,附上传送门:
http://www.webappsec.org/projects/articles/071105.html