【发布时间】:2021-11-26 13:46:43
【问题描述】:
我想通过 POST 方法为 XSS 编写 POC。在玩了很多html表单标签之后,我终于能够构造一个除了单个字符“\n”之外的有效载荷。 XSS 需要该字符才能使其工作。有效载荷看起来像这样
<input hidden=true type="search" name="&#13;N<html><body><script>alert(document.domain)</script><h1>" value="</h1></body></html>">
但是,在 HTTP POST 请求中,提交后的换行符 &#13; 会转换为 \n\r 而不是 \n。有没有办法解决这个问题??
【问题讨论】:
-
为什么需要换行符?不能只注入
">吗? -
如果它不接受初始的
\n字符,它会完全中断,而不添加\n它只会给出 json 有效负载的错误,而不是反映有效负载。我认为这是某种与 protobuf 相关的东西,尽管后端不检查content-type标头。&#13;后面的N表示payload的十六进制长度。 -
原来
'\n'只将光标移动到下一行而不将光标移回第0列。'\r'用于将光标返回到第0列。所以使用"\n\r"或@ 987654334@ 比只使用'\n'更正确,尤其是在 HTTP 和类似协议中。没有'\r',你可爱的电传打印机就无法工作。你知道,通过电传打印机打印出 HTTP 页面很有趣 ;-) 如果需要,PS 操作系统会自动将'\n'转换为"\n\r"也会自动将它们从"\n\r"转换回'\n'。"\n\r"用于电传打字机,而'\n'用于显示器。