扫端口,开了22和5000 5000是个python写的web 简单看看 首先有个contact.html 公钥这么短,估计之后是要爆破一下 现在没啥用 额,直接把源码拉下来 拿到第一个flag
注意到有个/json_calc
直接exec???
注意到__builtins__
被设为空
就是python自带的int str eval print以及import都不能用。。。
参考这篇Write up进行沙箱逃逸
注意用subprocess.check_output的时候有回显,os.system()只返回成功执行与否 最后结果会json一下,枚举模块的时候会报错 空格会爆炸 这个flask程序没有弄wsgi,不能处理url编码 执行命令的时候有空格,只能chr(32)拼接
所以主要用两个东西:搞到builtin和import os模块
这样可以调builtins
{}.__class__.__base__.__subclasses__().pop((('a')*59+('b')).index('b'))()._module.__builtins__.values().pop((('c')*109+('d')).index('d'))('__builtin__').chr(32)
这样可以import
{}.__class__.__base__.__subclasses__().pop((('a')*59+('b')).index('b'))()._module.__builtins__.values().pop((('c')*109+('d')).index('d'))('os').system(a)
然后玄学拼接一下,下载meterpreter,chmod,执行即可
拿到python用户的shell
在根目录下找到secret.txt,拿到第二个flag
/home下有两个用户
basilic用户下有个.encrypted_password
开始有个rsa私钥
找工具爆破
得到明文nevergonnagiveyouup
ssh直接登录
拿到basilic用户和第三个flag
准备提权
basilic有sudo权限
/opt下有个calc_test.py
看看源码
我们已经可以控制web程序,那么这就可以以root权限写任意文件
以下有两个方法 写sudoers,把basilic用户加到sudoers 写passwd,新建一个密码已知,uid=0的用户
以第一种为例 首先魔改web app 直接return一个sudoers文本 然后sudo,运行calc_test.py 拿到root