测试跨站点脚本(XSS)
只要应用程序获取不受信任的数据并将其发送到客户端(浏览器)而未经验证,就会发生跨站点脚本(XSS)。这允许攻击者在受害者的浏览器中执行恶意脚本,这可能导致用户会话劫持,破坏网站或将用户重定向到恶意站点。
下面我们借助一个简单图表了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。
- 威胁代理 - 内部/外部用户或管理员发送给系统的不受信任的数据。
- 攻击者的方法 - 发送不受信任的数据/基于简单的攻击,漏洞利用目标解释器的语法。
- 安全弱点 - 非常普遍。如果从浏览器发送的数据未正确验证,则会发生。
- 如何发现缺陷 - 代码演练很容易发现大多数XSS漏洞。通过测试易于发现。
- 技术影响 - 攻击者劫持用户会话在受害者浏览器上执行脚本,破坏网站。
- 业务影响 - 影响数据,声誉受到影响。
XSS的类型
- 存储的XSS - 存储的XSS也称为持久性XSS,当用户输入存储在目标服务器上时发生,例如数据库/消息论坛/注释字段等。然后受害者能够从Web应用程序检索存储的数据。
- 反射的XSS - 当Web应用程序在错误消息/搜索结果中立即返回用户输入或用户作为请求的一部分提供的输入并且不永久存储用户提供的数据时,发生反射的XSS - 也称为非持久性XSS。
- 基于DOM的XSS - 基于DOM的XSS是一种XSS形式,当数据源在DOM中时,接收器也在DOM中,并且数据流永远不会离开浏览器。
示例
应用程序在构造中使用不受信任的数据而不进行验证。特殊字符应该被转义。
http://www.webpage.org/task/Rule1?query=try
攻击者将浏览器中的查询参数修改为 -
http://www.webpage.org/task/Rule1?query=<h3>Hello from XSS"</h3>
手动实践
第1步 - 登录Webgoat并导航到跨站点脚本(XSS)部分。执行存储的跨站点脚本(XSS)攻击。以下是该场景的快照。
第2步 - 根据场景,我们以用户名:Tom
和密码tom
登录,如方案本身所述。点击“查看个人资料”,进入编辑模式。由于tom
是攻击者,它将 Javascript 脚本注入这些编辑框。
<script> alert("HACKED") </script>
第3步 - 更新结束后,Tom
会收到一个警告框并显示 "HACKED"
的消息,应用程序容易受到攻击。
第4步 - 现在按照方案,我们需要以jerry(HR)
身份登录并检查jerry
是否受注入脚本的影响。
第5步 - 以Jerry
身份登录后,选择Tom
并单击"view profile"
,如下所示。
在从Jerry
的账户中查看tome
的个人资料时,也会看到相同的消息框。
第6步 - 此消息框只是一个示例,但实际的攻击者可以执行的不仅仅是显示消息框。
预防机制
- 开发人员必须确保它们根据HTML上下文(例如放置数据的正文,属性,JavaScript,CSS或URL)转义所有不受信任的数据。
- 对于那些需要特殊字符作为输入的应用程序,在将它们作为有效输入接受之前,应该有健全的验证机制。
上一篇:测试失效的验证
下一篇:不安全的直接对象引用