这是由 Sijia Zhang(https://github.com/sijiahi) 和 Bowen Zhou(https://github.com/KonjakZhou) 共同完成的项目。
- 在 http://localhost/wp-admin/ 下配置并安装 Wordpress5.0;
- 以管理员身份登录 WordPress,并发布至少一篇文章;
- 打开 mal.html(需配置在其他域名下,或直接在浏览器中以文件形式打开),点击提交请求(submit request)。
- 若成功,将被重定向到包含“cilick me”评论的文章页面,当鼠标悬停在该评论上时,会弹出提示窗口表示攻击成功。
- 替换 /wp-includes 目录下的文件,并在 /wp-includes/js 中添加 JavaScript 脚本。
- 将模拟文章文件放置在 WordPress 域名下,打开模拟文章页面以测试 PINGBACK/TRACEBACK 功能。
- 若成功,将被重定向到包含“legal anchor”评论的文章页面;
- 从另一个域名打开 mal.com,测试 CSRF 攻击。
为了防御 WordPress 上的 CVE-2019-9787,引入了一个名为 doggyNonce 的新字段。 当管理员尝试使用 PINGBACK 功能,且无法提供 _wp_unfiltered_html 时,我们要求管理员使用其 cookie 对其上传的标签属性进行签名。这将帮助我们防御 CSRF 攻击,并确保上传标签属性的完整性。
WordPress 自动接受没有正确 CSRF token 的评论作为 PINGBACK 和 TRACEBACK 请求。使用白名单过滤器过滤该评论,提取 href 字段并重新构建“a 标签”。 为了防御此漏洞,主要考虑两点: 1. 服务器无法区分非法的 CSRF 请求与合法的 PINGBACK/TRACEBACK 请求。 2. CSRF 攻击者在“a 标签”的 href 字段中注入代码,标签属性在过滤后被更改。 doggyNonce 是一个依赖于 *cookie(wp-setting-time-$uid) 和 *上传的 href 属性 的哈希值: doggyNonce=Hash(*上传的 href 属性, *cookie) 需要指出的是,doggyNonce 扮演了管理员对上传 href 属性签名的角色。
1. 'mal.html' 用于模拟 CSRF 攻击,因此应放置在 WordPress 域名之外的域名下;
2. 'post.html' 用于模拟 PINGBACK/TRACEBACK 功能,因此应放置在 WordPress 的同一域名下;