转义大于和小于符号时的跨站点脚本?

信息安全 xss sql注入 注射
2021-08-23 13:06:58

如果一个网站编码<&lt;是否仍然可以执行跨站点脚本>&gt;您会将脚本标签包含在什么中?

例如,在我的一个网站上我可以<script>alert(1)</script>正常使用,但是在编码发生时我怎么能做同样的事情呢?

2个回答

哦,是的!

考虑这个 HTML:

<a href="{{str}}">

并考虑如下输入:

" onmouseover="alert('GOTCHA')"

你得到图片。

如果您的 javascript 被注入标签中,那么您不需要尖括号。我从这个类似的 S/O 帖子中借用了这个:https ://stackoverflow.com/questions/5696244/xss-is-escaping-and-sufficient

如果您对像这样的过滤器规避感兴趣,请咨询:

https://owasp.org/www-community/xss-filter-evasion-cheatsheet

这有所有常见的东西。

就安全而言:编码所有东西!你永远不知道攻击者有多聪明。

对于跨站点脚本,最重要的是上下文。它被反映或存储的上下文。我将用我的经验中的一个真实例子来证明这一点。有一次,在寻找错误时,我注意到一个 URL 参数反映在一个变量中:

http://www.example.com/blah.php?id=test&var=101011

var 的值在页面加载时反映在页面源中,大致如下格式,在脚本块内:

var a = "101011";

并注入尽可能多的'<'会将请求转移到WAF,这会引发错误页面,所以我处理这个问题的实际有效负载是:

prompt(1)";eval(a);

绕过WAF,成为反射型XSS的成功案例。因此,应根据上下文修改有效负载,您可能不需要标签。希望有帮助。