ctfer

10-20 来自DASCTF站的一题

2026-10-20 #dev#omakase

这几天没事干,决定每天写一两道题(希望能一直写下去?

T1-babypython

本题打开后是一个打字机效果,笔者也希望自己的博客之后能加入这个~~(因为魔改太多不想更到最新的flatpaper了…)~~,上面希望我获得admin权限。打开源码并没有找到有效信息,robots.txt也没有。感觉之后真得学学用nmap了(泣

但是总体上,本题允许上传zip文件,因此首先想到经典的文件上传。我们先尝试给如下php套个皮:

1
<?=eval($_POST['cmd']);?>

给它重命名为cmd.php.zip,能够成功上传,但是并没有成功解析php代码,甚至也不想一般的文件上传那样会给出上传的路径,只是一个/upload的指向,看来是执行/接收了zip的内容了之后就直接给干掉了。具体排除最简单的文件上传。

考虑到上面说的让我变成admin,我们首先抓个包,发现了如下的session的JWT:

1
eyJ1c2VybmFtZSI6Imd1ZXN0In0.HbjTXw.OjoY3jwAbJYADCvGXwNU9vZ3X1Q

发现payload部分为guest。鉴于什么提示都没有,猜测其为弱口令,直接使用flask-unsign爆破,然而16线程5min都没出来,基本排除这个可能。看样子我们不太可能变成管理员了(qaq

在这种情况下,我们朝向了评论区寻求提示,发现本题似乎是和去年的ts一样的符号链接。下面贴一部分去年出题人的wp,以及我们最终想到的构造:

来自ts出题人的wp
  1. 软链接
    又是没啥人做的一题……为了让大家做题学习已经很努力放很明显的hint了
    https://zh.wikipedia.org/wiki/符号链接
1
2
ln -s <path_to_file> <link_name>
zip -y <zip_filename>.zip <link_name>

上传zip就行,就会跟随软链接进行解压,进而能下载到想要的文件
主要就是读.env文件和server.js这两个,把伪造session需要的信息拿到

这里对于ln命令,-s表示创建符号链接(软链接),第一个para为目标,第二个para为链接名。
而对于zip命令,-y(symbolic)表示保留符号链接,而不是把指向的文件打包。para1为创建名称,para2为刚刚的链接名。

之后这样构建一个zip即可:

1
2
ln -s /proc/self/environ target
zip -y payload.zip target

上传以后可以直接打印出来一堆没什么换行的环境变量()里头就有flag。

在这里没来由地期望一下之后的eden评论不会鸽,我都好几天没打开玩了…

评论
也许会发生一些好事!
分享

评论