TamuCTF2025(Web全)
baozhongqi CTF 230浏览 · 2025-03-31 10:27

Aggie Bookstore(160 solves)

这里的代码,对于我这个AI小子来说非常难看,但是看代码我们就不着急,慢慢一句一句的搞懂

首先看到是mongodb,并且过滤函数sanitize,过滤特殊字符,仅保留字母、数字、空格,/index什么东西都没有/search是一个数据库的查询,$and 是 MongoDB 的操作符,表示 同时满足所有条件(类似 SQL 的 AND),在/search的GET传参把所有的特殊字符过滤了,所以除了Unicode啥的基本不考虑了,不过这个路由开了POST,并且解析json,$eq 是 MongoDB 的等于”操作符(类似 SQL 的 =)。

进行查询,看完代码之后很明显的Nosql注入,冲

得到FLAG{nosql_n0_pr0bl3m}

Impossible(108 solves)

先把游戏保存下来,访问/impossible_ctf.swf然后JPEXS Free Flash Decompiler用这个工具进行分析,这里面没有牵扯地址的问题,不然就是逆向了,用exe的启动方式打开

image.png
图片加载失败


这个和web关系真不大

Transparency(99 solves)

这个解题思路更像是渗透,

image.png
图片加载失败


题目意思已经很明确了,就是说每个人可以创造私域,其中有自己的文档,当我选择创建新文档的时候发现什么事情都没有发生,回显为

New document creation is currently disabled following a request from law enforcement.

那flag能在哪里呢,只能在之前创建的私域里面了,那我们需要去查域名https查询域名

访问就是flag

Research(7 solves)

题目说明了五分钟重启一次,所以我们现在本地搭建一下docker,先把多余容器删了,再启动

发现docker拉不下来,额,慢慢看代码吧,首先看editor/editor.js

这里写的是编辑器的东西,也就是网页的那个框框的语法之类的,但是其中有个问题,就是引入了LaTeX语法支持(旧版模式)@codirror/legacy-modes/mode/stex

1.解密输入 → 2. 检查缓存 → 3. 无缓存时编译 LaTeX → 4. 缓存结果并 PDF。将我们输入的内容放进tmp里面然后通过PDF打印出来

进行一个会话加密,并且我们得知SERVER_KEY在环境变量中,查看

检测session

默认加载 compile.php来编译生成PDF,最后看看

看完了所有代码发现是--no-shell-escape,就是不允许执行命令,但是这些命令是允许的

bibtexbibtex8:用于处理 LaTeX 文档中的引用和参考文献。

extractbb:用于提取图形的边界框。

gregorio:与 Gregorian 调式相关的工具,通常用于音乐排版。

kpsewhich:一个非常常见的 LaTeX 工具,用于查找文件路径,可以用于读取环境变量和系统信息。

l3sys-query:用于获取系统信息的工具,在某些情况下可以用来列出系统文件或目录。

latexminted:用于处理 minted 宏包的工具,支持高亮代码。

makeindex:用于处理索引的工具。

memoize-extract.plmemoize-extract.py:可能是自定义的脚本,用于提取缓存或存储的文件。

repstopdf:一个将图像文件转换为 PDF 格式的工具。

r-mpost:可能是与 LaTeX 的元后处理相关的工具。

texosquery-jre8:与 Java 相关的工具,可能用于查询 LaTeX 环境的设置或路径。

有用的只有读取环境变量和列目录,我们先查看SERVER_KEY

得到以下内容

image.png
图片加载失败


可以得到当前目录的文件信息,

但是用处不大,现在我们根本不知道怎么去获得flag,后面查到可以利用inputattachfile读取文件

但是attachfile是插入内容,所以这里并不适用,不过还是写一下怎么用的

获取到了

但是这些都没有任何的作用,我们可以注意到文件中是通过session进行检验的,所以可以尝试把所有sess_id自己套上就这样获得了flag,弯弯真是多,这道题列出目录才是关键,同时也要多测试,我前面就是拿key就解密去了,结果没做出来

image.png
图片加载失败


Modern Banking(7 solves)

看到了用户名,并且发现这是个cob应用,这个代码直接从来没有见过,所以都是让AI来帮我看,发现如果是管理员就可以给指定账户转足够的钱去购买flag,卡着了没做出来,后面再看题目的时候发现出题人偷偷把题目改了,现在每个人可以进行用户的管理,最多创建8个用户

image.png
图片加载失败


还是来看看代码,在VSOCDE下载一个COBOL插件就可以看代码了,看到路由部分的时候发现

image.png
图片加载失败


登录然后访问?page=admin发现

也就是说339984317737用户有足够多的钱来购买flag,草草的看完了代码,想到了两种方式,第一种刷新出来这个用户,用它买flag,第二种成为admin,通过注入banlance的手法打钱给账户,

但是一直没什么进展,又看了一遍代码

image.png
图片加载失败


也就是说momo也会注入到数据中,那我们换行不就可以用那个巨额账号的钱转出来了嘛,但是写金额的时候有个问题就是代码中写到

余额格式为 20 位数,并且COBOL 通常使用固定长度字段来表示数据,注册用户之后的一键脚本

再登录一下发现就可以成功买flag了,而这问题我不知道为什么会这样,为什么会进行行一行的去处理转账,看到代码的最开始

image.png
图片加载失败


Forward to the Past(53 solves)

主要问题就是这里

image.png
图片加载失败


不让提交过去的时间,很明显有溢出漏洞,但是溢出了又能怎么样呢

总觉得晕头转向,重新读一下代码

外部函数声明,说明可能服务端是int32_t,所以在这里可能就有差异,且validate_future_date算的是时间戳大小来比较是否是未来,写个脚本来让看看二者如果进行强制转换的话时间是否不同

全部都用手动转换,不然数字大了不行,那么爆破一下输入什么最后会是2025-3-21,本来想写个爆破脚本的,但是真写不出来,一直报错

image.png
图片加载失败


这题给我做人格分裂了快

Moving Slowly(84 solves)

image.png
图片加载失败


进行逐字符比较,并且会输出错误的那一位,那我们可以fuzz一下看看

image.png
图片加载失败


正当我想要进行遍历代码的时候,看到一个漏洞,就是这个函数如果不返回False就会返回true,如果我们输入的一位刚好等于密码的第一位的时候就会成功返回true,写出如下demo测试

image.png
图片加载失败


这道题是非预期,看出题人说的预期解是打算进行侧信道攻击的

0 条评论
某人
表情
可输入 255

没有评论