随著网际网路的不断发展,人们对网路的使用越来越频繁,通过网路进行购物、支付等其他业务操作。而一个潜在的问题是网路的安全性如何保证,一些黑客利用站点安全性的漏洞来窃取用户的信息,使用户的个人信息泄漏,所以站点的安全性变得很重要。

Web 系统的安全性测试包括以下内容:

(1)Web 漏洞扫描

(2)伺服器端信息测试

(3)文件和目录测试

(4)认证测试

(5)会话管理测试

(6)许可权管理测试

(7)文件上传下载测试

(8)信息泄漏测试

(9)输入数据测试

(10)跨站脚本攻击测试

(11)逻辑测试

(12)搜索引擎信息测试

(13)Web Service 测试

(14)其他测试

本章节主要给大家介绍第(10)点——跨站脚本攻击测试

XSS 又叫CSS(Cross Site Script,跨站脚本攻击),是指恶意攻击者在Web 页面里插入恶意HTML 代码。当用户浏览该页时,嵌入其中的HTML 代码会被执行,从而达到恶意攻击的目的。

XSS 属于被动式攻击,因为其被动且不好利用,所以容易被忽略其危害性。

XSS 攻击分成两类:一类是来自内部的攻击,另一类是来自外部的攻击。内部攻击是指利用程序自身的漏洞,构造跨站语句;外部攻击是指自己构造XSS 跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。

测试包括两方面的内容:GET 方式跨站脚本测试和POST 方式跨站脚本测试

(1)GET 方式跨站脚本测试

GET 方式跨站脚本测试主要是测试以GET 方式提交的请求页面是否存在漏洞。如下面的页面,

假设访问的UTL 为127.0.0.1:81/testget.ph

该页面输出的内容为「欢迎您,[name]」,name 为输入的参数,如输入URL 为127.0.0.1:81/testget.ph,页面显示的内容为「欢迎您,test」。

浏览器对网页的展现通过解析HTML 代码来实现,那么如果name 的参数为HTML 代码,结果会怎么样呢?具体的测试步骤如下:

步骤1:将URL 修改为127.0.0.1:81/testget.ph<script>alert(hello)</script>,如果alert 函数弹出一个hello 对话框,则说明系统存在漏洞。

步骤2:如果没有弹出hello 对话框,则需要在页面上单击右键,在弹出菜单中选择「查看源文件」命令,如果源文件的内容为「欢迎您,<script>alert(hello)</script> 」,不管会不会弹出hello对话框,都说明系统存在跨站脚本漏洞。

步骤3:由于HTML 元素(比如<textarea>或")会影响脚本的执行,所以不一定能够正确地弹出hello 对话框,在测试过程中可以根据实际需要来构造name 的value 值,如多行文本输入框:

(2)POST 方式跨站脚本测试

POST 方式跨站脚本测试主要是测试以POST 方式提交的请求页面是否存在漏洞。如下面的页面,假设访问的UTL 为127.0.0.1:81/testpost.p

POST 方式跨站脚本攻击测试相对复杂一点,测试步骤如下:

步骤1:新建一个HTML 文件,假设为test.html,文件中的源代码如下:

<form action=" 127.0.0.1:81/testpost.p " method="post">

<input name="name" value="<script>alert(hello)</script>" type="hidden" />

<input name="ss" type="submit" value="XSS 测试" />

</form>

步骤2:运行test.html 文件,如果alert 函数会弹出一个hello 对话框,则说明系统存在漏洞。

步骤3:如果没有弹出hello 对话框,则需要在页面上单击右键,在弹出菜单中选择「查看源

文件」命令。如果源文件的内容为「欢迎您,<script>alert(hello)</script> 」,那么不管会不会弹出hello 对话框,都说明系统存在跨站脚本漏洞。

步骤4:由于HTML 元素(比如<textarea>或")会影响脚本的执行,所以不一定能够正确地弹出hello 对话框,在测试过程中可以根据实际需要来构造name 的value 值,如多行文本输入框:

</textarea><script>alert(123456)</script>

文本输入框:

</td><script>alert(123456)</script>

><script>alert(123456)</script>

"><script>alert(123456)</script>

</title><script>alert(123456)</script>

--><script>alert(123456)</script>

[img]javascript:alert(123456)[/img]

<scrip<script>t>alert(123456)</scrip</script>t>

</div><script>alert(123456)</script>

说明:以上两种方式都是手工方式,在测试过程中由于网页太多,使用手工测试很难测试全面,可以借助测试工具(如AppScan 工具)进行扫描测试。但是扫描工具只能提高效率,并不能完全代替手工测试,因为扫描工具受到规则和技术的限制,可能误报甚至漏报,所以手工测试还是必不可少的。


推荐阅读:
相关文章