【web-攻击用户】(9.1.6)查找并利用XSS漏洞--基于DOM

目录

查找并利用基于DOM的XSS漏洞

1.1、简介:

1.2、过程:


查找并利用基于DOM的XSS漏洞

1.1、简介:

1、提交一个特殊的字符串作为每个参数,然后监控响应中是否出现该字符串,无法确定基于DOM的XSS漏洞


2、确定基于DOM的XSS漏洞的基本方法是,用浏览器手动浏览应用程序,并修改每一个URL参数, 在其中插入一个标准测试字符串(如<script>alert(1)</script>和;alert(1)//等)


3、通过在浏览器中显示每一个返回的页面,可以执行所有客户端脚本,并在必要时引用经过修改的URL参数。只要包含cookie的对话框出现,就表示发现了一个漏洞(可能为基于DOM的或其他类型的XSS漏洞),使用本身提供JavaScript解释器的工具甚至可以自动完成这个过程


4、但这种基本的方法并不能确定所有基于DOM的XSS漏洞。如上所述,在HTML文档中注入有效Javascript所需的准确语法,取决于用户可控制的字符串插入点前后已经存在的语法,这时可能需要终止被单引号或双引号引用的字符串,或结束特定的标签,有时可能需要插入新标签,但有时并不需要,客户端应用程序代码可能会尝试确认通过DOM获得的数据,但它仍然易于受到攻击。


5、即使应用程序可能易于受到精心设计的攻击,但如果插入标准测试字符串仍不能得到有效的语法, 那么嵌入式JavaScript将不会执行,因此也不会有对话框出现,由于无法在每个参数中提交每一种可能的XSS攻击字符串,这种基本的探查方法必然会遗漏大量的漏洞


6、确定基于DOM的XSS漏洞的一种更加有效的方法,是检查所有客户端JavaScript,看其中是否使用了任何可能会导致漏洞的DOM属性。有大量工具可用于自动完成这个测试过程。其中一个有用的工具为DOMTracer

1.2、过程:

1、使用在应用程序解析过程中得到的结果, 检查每一段客户端JavaScript,看其中是否出现以下API,它们可用于访问通过一个专门设计的URL控制的DOM数据

document.location

document.URL

document.URLUnencoded

document.referrer

windows.location


2、确保检查出现在静态HTML页面及动态生成的页面中的脚本,无论页面为何种类型,或是否有参数被提交给页面, 任何使用脚本的位置都可能存在基于DOM的XSS漏洞


3、在每一个使用上述APl的位置,仔细检查那里的代码,确定应用程序如何处理用户可控制的数据, 以及是否可以使用专门设计的输入来执行任意JavaScript,尤其注意检查并测试控制的数据被传送至以下任何一个API的情况

document.write()

document.writeln()

document.body.innerHtml

eval()

window.execScript()

window.setlnterval()

window.setTimeout()


4、和查找反射与存储型XSS漏洞时一样,应用程序可能会执行各种过滤,尝试阻止相关攻击。通常这些过滤应用于客户端,因此可以直接查看其确认代码,以了解其工作机制,并尝试确定任何避开过滤的方法,用于避开针对反射型XSS攻击的过滤技巧在此处同样适用


5、某些情况下,服务器端应用程序可能会实施旨在阻止基于DOM的XSS攻击的过滤。即使客户端出现易受攻击的操作,服务器并不在响应中返回用户提交的数据,但是URL仍然被提交给了服务器;因此当应用程序检测到恶意有效载荷时,它会对数据进行确认,且不会返回易受攻击的客户端脚本。


6、如果遇到这种防御,应该尝试可能绕开过滤的攻击方法,测试服务器数据确认机制的可靠性。除这些攻击外,还有几种专门针对基于DOM的XSS漏洞的技巧可用于帮助攻击有效载荷避开服务器端确认


7、当客户端脚本从URL中提取参数值时,它们很少将查询字符串正确解析成名/值对。相反,通常会在URL中搜索后面紧跟着等号(=)的参数名称,然后提取出等号以后直到URL结束位置的内容。这种行为能够以两种方式加以利用:

A、如果服务器根据每个参数而不是整个URL应用确认机制,那么可以将有效载荷插入到附加在易受攻击的参数后面的一个虚构的参数中。虚构的参数被服务器忽略, 因此不会受到任何过滤。但是,因为客户端脚本在查询字符串中搜索真实参数,并提取其后的全部内容,所以它处理的字符串中正好包含该有效载荷(?真参数=……&假参数=……)

B、如果服务器对整个URL而不仅仅是消息参数应用确认机制,仍然可以将有效载荷插入到HTML片断字符#的右边, 从而避开过滤(?参数=……#<script>alert(1)</script>)

片断字符串仍然属于URL的一部分, 因此被保存在DOM中,并由易受攻击的客户端脚本处理。但是, 由于浏览器并不将URL中的片断部分提交给服务器, 因此攻击字符串不会传送到服务器中, 因而不会被任何服务特端过滤所阻止。因为客户端脚本提取参数=后面的全部内容, 所以有效载荷仍然被复制到HTML页面源代码中

注:一些应用程序使用更加复杂的客户端脚本,对查询字符串进行更加严格的解析。如在URL中搜索后面紧跟着=的参数名称,然后提取等号后面的内容,直到遇到一个分隔符(如&或#)在这种情况下,可以对前面的两个攻击进行修改

假设foo为假参数,A为真参数

.ashx?fooA=<script>alert(1)</script>&A=……

.ashx#A=<script>alert(1)</script>


8、有时,基于DOM的数据经过非常复杂的处理,仅通过静态审查JavaScript源代码可能很难追踪用户控制的数据采用的不同路径以及对它进行的各种操作。在这种情况下,使用JavaScript调试器动态监控脚本的执行情况可能会有很大帮助。

9、Firefox浏览器的FireBug扩展是一款用于监控客户端代码与内容的调试器,可用于设置断点、监视代码与数据, 为了解复杂脚本的执行过程提供了极大的便利

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值