如何利用XSS执行alert弹窗?针对给定PHP代码的技术求助
问题分析
先拆解目标PHP代码的过滤逻辑:
- 对
q1/q2的过滤仅触发于**参数值同时包含<和>**时,此时会调用htmlentities()将特殊字符转义为HTML实体; - 如果参数只含其中一个符号、或两个都不含,则直接输出原始内容。
你之前用带<>的完整标签失败,就是因为同时触发了转义规则,脚本标签被转义后失去执行能力。
可行XSS实现方案
方案1:使用不闭合的标签(仅含<,规避转义)
给q1或q2输入以下payload:
<img src=x onerror=alert(1)
或
<svg onload=alert(1)
原理:
- payload仅包含
<,没有>,不会触发过滤,原始内容直接输出; - 浏览器解析HTML时会自动补全不完整标签:
<img>的src=x加载失败触发onerror事件,<svg>加载完成触发onload事件,都会执行alert(1)。
方案2:利用HTML事件属性(不含<>,完全绕过过滤)
给q1或q2输入以下payload:
" onclick=alert(1)
或
' onmouseover=alert(1)
原理:
- payload不含
<和>,直接输出到页面后会修改文本节点上下文,例如拼接后变为:
Some people say: " onclick=alert(1) <br/>
- 点击文本时触发
onclick事件,或鼠标悬浮时触发onmouseover事件,执行弹窗。
方案3:拆分脚本到两个参数(进阶玩法)
q1输入:<script>(仅含<,不被转义)q2输入:alert(1)(无<>,不被转义)
原理:
输出后页面会拼接为:
Some people say: <script> <br/> Others say: alert(1)
浏览器会将<script>标签与后续的alert(1)识别为同一段可执行脚本,触发弹窗。
内容的提问来源于stack exchange,提问作者intact473
相关产品推荐
相关产品推荐

