| 版本 | 状态 |
|---|
| 6.4.0 – 7.0.2 | 存在漏洞——开箱即触发 |
| 5.8 – 6.3 | 有条件——需要插件通过 wp_kses() 传递 login_errors 且允许 style |
| 4.7 – 5.7 | 不可利用(用户名未被反射) |
| 6.4.9 / 6.5.9 / 6.6.6 / 6.7.6+ / 6.8.7 / 6.9.6 / 7.0.3+ | 已修复(esc_html) |
python3 banner_poc.py \
--out trigger.html \
--target http://192.0.2.10/wp-login.php \
--msg "Scheduled System Maintenance"
# 子目录 + 隐藏登录路径 + 副标题
python3 banner_poc.py \
--out trigger.html \
--target http://10.0.0.5:8080/blog/my-secret-login \
--msg "Please sign in again" --sub "Session expired"
将 trigger.html 托管在任何位置。当受害者打开它时,会被重定向到
目标登录页面并渲染出横幅。跳转过程静默无感:无可见的中间内容,
背景与 WordPress 登录界面一致,约 0.5 秒内完成落地。
| 参数 | 说明 |
|---|---|
--out | 输出 HTML 文件(必填) |
--target | 完整登录页面 URL——包含子目录 / 隐藏登录路径(必填) |
--msg | 横幅文本(默认:Scheduled System Maintenance) |
--sub | 可选副标题行 |
wp-login.php 将登录失败的用户名反射到错误消息中。
存在漏洞的版本使用 PHP strip_tags() 进行清理,该函数会放过
任何 < 后跟空白字符的内容。< div style="..."> 会以真实元素形式呈现。< /strong>(斜杠前带空格)同样能绕过 strip_tags(),并被
重建为真实的闭合标签,使载荷能够闭合模板中的
<strong>(一个 HTML5 活动格式化元素)作为其第一个标记,并
保持对 DOM 的精确控制。div 会吞掉模板的尾部文本
("… is not registered on this site …")。class 的内联样式,能够通过
safecss_filter_attr() 的过滤。在 6.3+ / 6.4+ 上,position:fixed 会渲染全页
覆盖层;在 5.8–6.2 上,这些属性会被剥离,同一载荷
会自动降级为流内红色横幅。纯 HTML/CSS——目标端不执行任何 JavaScript。针对
<script> 或事件处理程序的 WAF 规则不适用。
本工具发布用于防御性研究和授权渗透测试。 作者不对滥用行为负责。