先谢谢不愿暴露身份的大佬教我,感恩感恩感恩~
进入题目,根据提示有个lyrics接口,可以读取文件。
由于不知道web位置,先读取cmdline以获取python运行位置(这里的procid需要爆破):
可以看到在/usr/etc/下,python的web框架不是很多,比较常出现的是web.py、django和flask,而CTF是格外偏向于flask。django和flask都会生成一个app文件夹然后在下面放配置文件,所以这里应该有一个同级的settings文件。
先去读这个启动文件app.py:
头上可以看到三个重要信息:
-
• 后端为flask(可能存在模版注入、SSTI)
-
• 使用了pickle(可能存在反序列化漏洞)
-
• config文件位置
下面还有一个UserData类和Waf函数,往反序列化走的可能性很高:
先读一下config文件/usr/etc/config/secret_key.py,得到flask的Cookie密钥:
secret_code = "EnjoyThePlayTime123456"
再回过头来看主页:
这个登录不需要密码,会将用户名返回渲染到页面上:
一开始我以为是模版注入,但并不是:
那就只可能是反序列化了。
往上看,渲染页面前使用get_cookie读取了user,还进行了check:
(后面的截图丢了)那我们构造一个同名的UserData并赋予相同的属性就行了。
照抄一下UserData,然后增加一个会在反序列化时调用的方法(如__setstate__),避开Waf中的内容:
class UserData:
def __init__(self, username):
self.username = username
def __setstate__(self):
os.system("ls > tmp.txt")
然后使用刚才获取的secret_code构造出一个Cookie,代入请求包访问/board:
几乎明示了通过执行这个文件读取flag,修改__setstate__中执行的命令为/readflag>tmp.txt:
. . . * . * 🌟 * . * . . .
由于很多人问我微信群的事情,所以我建了一个小微信群。现在可以在公众号菜单里选择合作交流->交流群获取交流群二维码,希望大家和谐交流,为更好更友善的行业环境贡献自己的力量。
如果喜欢我的文章,请点赞在看。网安技术文章、安卓逆向、渗透测试、吃瓜报道,尽在我的公众号:
原文始发于微信公众号(重生之成为赛博女保安):2024羊城杯WP | lyrics
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论