反射型XSS漏洞
如果一个应用程序使用动态页面向用户显示错误消息,就会造成一种常见的XSS漏洞。通常,该页面会使用一个包含消息文本的参数,并在响应中将这个文 本返回给用户。对于开发者而言,使用这种机制非常方便,因为它允许他们从应用程序中调用一个定制的错误页面,而不需要对错误页面中的消息分别进行硬编码。
例如,下面的URL返回如图12-1所示的错误消息:
分析被返回页面的HTML源代码后,我们发现,应用程序只是简单复制URL中message参数的值,并将这个值插入到位于适当位置的错误页面模板中:
::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0
一条动态生成的错误消息
Sorry, an error occurred.
提取用户提交的输入并将其插入到服务器响应的HTML代码中,这是XSS漏洞的一个明显特征;如果应用程序没有实施任何过滤或净化措施,那么它很容易受到攻击。让我们来看看如何实施攻击。
下面的URL经过专门设计,它用一段生成弹出对话框的JavaScript代码代替错误消息:
https://wahh-app.com/error.php?message=
请求这个URL将会生成一个HTML页面,其中包含以下替代原始消息的脚本:
可以肯定,如果该页面在用户的浏览器中显示,弹出消息就会出现,如图12-2所示。
一次概念验证XSS攻击
进行这个简单的测试有助于澄清两个重要问题:首先,