DOM Based XSS(owasp)

10 篇文章 0 订阅
3 篇文章 0 订阅

原文

定义

基于dom的xss是指pyaload的执行结果是用户浏览器中DOM环境的修改。网页(http响应包)本身并没有修改,但由于DOM环境中发生的恶意修改,客户端中的页面代码的执行方式有所不同。

举例

假设以下代码用来生成一个表单,使用户选择他们偏好的语言。一个默认的语言也在请求中提供,为参数“default”。

…

Select your language:

<select><script>

document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("default=")+8))+"</OPTION>");

document.write("<OPTION value=2>English</OPTION>");

</script></select>
…

可以用以下URL调用页面:

http://www.some.site/page.html?default=French

对此页面的基于DOM的xss攻击可以通过发送以下URL给一名用户完成:

http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

当用户点击此链接,浏览器发送以下请求:

/page.html?default=<script>alert(document.cookie)</script>

到www.some.site。服务器对此的响应包带有上面的JS代码,浏览器在页面中生成一个dom对象,其中的 document.location对象带有以下字符串:

http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

原本的JS代码并未想到参数default会包含html代码,所以,它在运行时简单的解码并回显到页面中。然后浏览器渲染此最终的页面并执行攻击者的脚本:

alert(document.cookie)

注意,http响应包并不含有攻击者的payload。该payload在运行时显示在客户端的页面中。当含有漏洞的脚本访问DOM变量document.location,并假定它不是恶意的时候发生。另外,大部分浏览器URL会默认对document.location进行编码,从而减少基于dom的xss攻击的影响和可能性。

高级技术和衍生

在上述的例子中,当payload没被服务器嵌入到http响应中,它仍然作为http请求的一部分到了服务器,因此攻击可以被服务器端检测。

避免发送payload到服务器的技术依靠URI fragments(在URI中“#”后面的部分),它不会被浏览器发送到服务器中。因此,任意引用(例如document.location)客户端代码,将可能受到使用fragments的攻击。在此例子中,payload将不会发送到服务器中。举个例子,上述的基于dom的xss可以修改成:

http://www.some.site/page.html#default=<script>alert(document.cookie)</script>

在这里插入图片描述
会发出相同攻击而不被服务器看到(只看到page.html的请求,没#后的参数)。
(略,关于adobe一个pdf阅读插件的xss)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值