2024羊城杯WP | lyrics

admin 2024年9月18日10:25:09评论7 views字数 1106阅读3分41秒阅读模式

先谢谢不愿暴露身份的大佬教我,感恩感恩感恩~

. . . * . * ☄️. * . * . 🔆.* . * . 🧶 * . * . . .

进入题目,根据提示有个lyrics接口,可以读取文件。

由于不知道web位置,先读取cmdline以获取python运行位置(这里的procid需要爆破):

2024羊城杯WP | lyrics

可以看到在/usr/etc/下,python的web框架不是很多,比较常出现的是web.py、django和flask,而CTF是格外偏向于flask。django和flask都会生成一个app文件夹然后在下面放配置文件,所以这里应该有一个同级的settings文件。

先去读这个启动文件app.py:

2024羊城杯WP | lyrics

头上可以看到三个重要信息:

  • • 后端为flask(可能存在模版注入、SSTI)

  • • 使用了pickle(可能存在反序列化漏洞)

  • • config文件位置

下面还有一个UserData类和Waf函数,往反序列化走的可能性很高:

2024羊城杯WP | lyrics

先读一下config文件/usr/etc/config/secret_key.py,得到flask的Cookie密钥:

secret_code = "EnjoyThePlayTime123456"

再回过头来看主页:

2024羊城杯WP | lyrics

这个登录不需要密码,会将用户名返回渲染到页面上:

2024羊城杯WP | lyrics

一开始我以为是模版注入,但并不是:

2024羊城杯WP | lyrics

那就只可能是反序列化了。

往上看,渲染页面前使用get_cookie读取了user,还进行了check:

2024羊城杯WP | lyrics

(后面的截图丢了)那我们构造一个同名的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:

2024羊城杯WP | lyrics

几乎明示了通过执行这个文件读取flag,修改__setstate__中执行的命令为/readflag>tmp.txt:

2024羊城杯WP | lyrics

. . . * . * 🌟  * . * . . .

由于很多人问我微信群的事情,所以我建了一个小微信群。现在可以在公众号菜单里选择合作交流->交流群获取交流群二维码,希望大家和谐交流,为更好更友善的行业环境贡献自己的力量。

如果喜欢我的文章,请点赞在看。网安技术文章、安卓逆向、渗透测试、吃瓜报道,尽在我的公众号:

原文始发于微信公众号(重生之成为赛博女保安):2024羊城杯WP | lyrics

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月18日10:25:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   2024羊城杯WP | lyricshttp://cn-sec.com/archives/3177973.html

发表评论

匿名网友 填写信息