输入框value属性XSS绕过:过滤< >及转义"后的利用方案
解决在value属性中绕过引号转义的XSS问题
针对你遇到的场景——输入被限制在input标签的value属性中,<和>被过滤,双引号"被转义为"——这里有几个可靠的利用思路:
1. 利用HTML实体"闭合属性值(最可靠)
应用只转义了你输入的原生双引号,但不会处理HTML实体形式的引号。你可以输入",浏览器解析时会把它转换成真实的双引号,从而闭合value属性,接着就能添加事件触发XSS了。
示例payload:
" autofocus onfocus=alert(document.domain) //
":被浏览器解析为",闭合当前value属性autofocus:让输入框自动获得焦点,无需用户点击就能触发事件onfocus=alert(document.domain):触发焦点事件时执行JS代码//:注释掉后续的闭合双引号,避免HTML语法错误
当浏览器解析后,最终的HTML会变成:
<input type="text" value="" autofocus onfocus=alert(document.domain) //">
完全符合语法规范,会自动触发弹窗。
2. 尝试反斜杠转义(依赖浏览器解析)
如果应用没有过滤反斜杠\,你可以用它来转义模板中的闭合双引号,让浏览器认为value属性未闭合,从而解析后续内容为新属性。
示例payload:
\ autofocus onfocus=alert(document.domain) //
浏览器解析时,\会转义后续的闭合双引号,使得value属性未正常闭合,后续的autofocus和onfocus会被识别为新的标签属性。不过这种方法在部分现代浏览器中可能因为严格的HTML解析规则失效,不如第一种方法稳定。
3. 检查单引号是否被过滤(DOM场景适用)
如果应用只转义双引号,未处理单引号',且页面存在JS读取value后插入DOM(比如用innerHTML)或执行代码(比如eval)的逻辑,可以尝试用单引号构造DOM XSS payload。例如:
' onmouseover=alert(1) '
不过这种情况依赖页面的JS处理逻辑,仅当value内容被动态插入到DOM或执行时才会生效。
额外提示
- 测试时可以用
document.domain代替固定字符串,确保能在目标域名下执行,避免跨域问题。 - 如果
alert被过滤,可以尝试confirm(document.domain)或prompt(document.domain)替代。
内容的提问来源于stack exchange,提问作者codeur
相关产品推荐
相关产品推荐

