首先使用 nmap 进行端口探测,开放了 80、8888 两个 WEB 服务,指纹识别显示 80 端口是 wordpress 4.9.6,8888 端口是 phpMyAdmin。
sudo nmap 192.168.246.174 -p- --min-rate=5000 -A
看到 wordpress,就先用 wpscan 扫描试试。发现了几个常见的主题和插件,此外还枚举出了用户 admin 和 intern。
wpscan --url http://192.168.216.174 --enumerate p,t,u --plugins-detection aggressive --plugins-version-detection aggressive
访问网站,主页没有多余的信息。
搜索该版本的 wordpress 历史漏洞,有挺多的历史漏洞,我们需要优先尝试未授权的。
这个未授权查看别人的私人帖子,可以试试看。
利用成功,发现发给一个实习生的帖子,其中泄露了密码 IntraPersonalVision349。
之前枚举到了两个用户,admin 和 intern,有理由相信这是 intern 的密码,登录后台成功。
wordpress 后台拿 shell 的方式有不少,但这个权限太低,似乎都用不了,上传媒体文件也限制了后缀。
那这个密码能登录 admin 或者 phpMyAdmin,亦或是直接 ssh 登录主机吗?
尝试后发现都不行。
那么只有接着找一下还有没有可利用的漏洞。
一 一排除后发现这个任意文件删除居然可以被用来 RCE,原理是删除配置文件后进行重装网站。
先不尝试手动利用,找找看有没有现成的脚本。
这里找到了一个 js 的利用脚本,按照步骤进行利用。
成功删除配置文件。
居然没有模板文件,不能重装,这下坏了,看来不能删除这个配置文件。
只有重置靶机,然后换一个思路:
wordpress 同目录下有个 .htaccess 文件,这是 apache 的配置文件,是用作访问控制的,并且指定了 php 解释器。我们把他删除就可以访问 wp-config 源码,拿到里面的数据库密码,然后连接数据库,一样可以获取到 admin 密码登录后台。
用 admin 用户登录后台后就可以上传文件 getshell 了。
接下来查看 wp-config.php,成功从里面找到了数据密码,ThinnerATheWaistline348。
curl http://192.168.122.174/wp-config.php
用这个密码登录数据库,可以看到 wordpress 的用户名密码,不过是经过加密处理的。
破解不见得能够成功,最好的办法就是直接修改它,wordpress 加密用户密码是用的 php 提供的一个函数,加密类型为 phpass,在线识别可以证明。
接下来找一个在线 phpass 加密,然后修改 admin 的密码为 123456。
因为删除了 .htaccess 文件,又得重置一下靶机,然后重新替换密码,登录后台。
wordpreess 后台 getshell 的方式不少,这里在主题上传功能处上传一个 webshell。
上传文件后访问该 php 文件,路径都是固定的。
本地监听,反弹获取一个 shell,是一个服务器的低权限 shell。
查看服务器用户,有一个 tobias。
试试看之前拿到的两个密码能否直接 ssh 登录它,均未成功。
暂时只能用这个 shell 进行信息收集了,枚举了一系列提权向量,很快就在计划任务里发现了问题。
这个计划任务每 5 分钟执行一次,删除 wordpress 中 uploads 目录下的所有非图片文件,但它的 rm 命令使用的是相对路径。
此外它指定命令执行的路径时,使用了 ~/bin 这个语句,这样一来命令执行的上下文就是:
/var/www/html/wordpress/wp-content/uploads/bin/
结合相对路径的 rm 命令,可以在 /var/www/html/wordpress/wp-content/uploads/ 目录下创建一个 bin 目录,然后再 bin 目录下创建一个 rm 文件,该文件中写入我们的提权命令。按照这个思路,每 5 分钟会以 root 权限执行我们的提权脚本。
接下来找到 wordpress 的安装目录,在该路径下写入恶意文件。
等待 5 分钟,成功提权到 root。