成绩

Web
not so web 1
本地起服务:
|
|
本地调试脚本:
|
|
修改 cookie:
|
|
还原脚本:
|
|
本地 fenjing 一把嗦
|
|

Upload
普通用户进去目录穿越读源码,然后拿去碰撞一下密码,在 admin 下面有一个存在命令拼接的点 file_path 直接拼接进去的不出网 rce,发现能任意写
|
|

|
|
|
|

Excellent-Site
利用 /report 路由的邮件头注入,构造一封邮件,设置 Subject 为可控 URL,并注入 From: admin@ezmail.orgmailto:admin@ezmail.org 以满足 get_subjects 的条件。
通过 SQLite 注入控制 /news 路由的响应,打 SSTI,然后访问 /bot 触发 /admin 里面的 render
|
|
not so web 2
明文 username 直接换 admin 再进去就行
{“user_name”: “admin”, “login_time”: 1745665984}&91f48825c577ce98f9c611681521eb05c92d1e17748e9e74e6b4928726e11bcf13aa8306350e1fc2e5d8ed00437cca189360dcc5489dd59f35aeee8c40eab121f35b0f2953fc5b7d48359ec5789baa302fae6e8f1c0f87943497ce5a3147daa5bbe780bbe637f73d7f95f8a2528e2fe06777634384bffea5cd865ee3999dc6fe0d475ae9fc2086d4b037c66ab20cb2b31215d0cd2c0e32643a59cca40315cbfa51ddf63a8e7c025d6be2247c18ea62c4f76c8c4f25b2cf0361c47f0cdc7105e27eb54bb84ef6512a84164f1f7d41370ddb0896b4f7373805414949e71004e5e2ca64dbdb74c5ad65007d189d8fcc72bc2878bd06848fadd0ff39f1ca6ced5c08
写个转接口本地 fenjing 打
|
|

Reverse
ezFPGA
四个字节为单位,逐位乘构造一个 6x6 的矩阵,与给定的矩阵做点乘。结果与 rc4 的密钥流逐位相加后比对。
由于过程中只保留了一个字节的信息,考虑 z3 解。
|
|
ACTF{RC4_4nd_FPGA_w4lk_1nt0_4_b4r}
Pwn
AFL
题目包含 afl-fuzz ,harness, wrapper.py 三个文件,其中对 wrapper.py 进行分析,发现该脚本除连接时需要的工作量证明验证,主要的作用是将用户输入的 Shellcode 写入到 /tmp/shellcode.bin 文件中并执行
|
|
这表明我们的 Shellcode 会由 afl-fuzz 进行检查,并且检查收集信息的程序是 harness ,我们无法看到 input 文件夹的样例输入,所以我们暂时无视它
我们把重心放到 harness 程序上

我们写的 Shellcode 被映射到了 0x10000 的位置,并且还给了一个 0x20000 的可读写位置

这里还有沙箱保护,我们可以使用 seccomp-tools 查看

我们知道这是一个 ORW 类型的题目,理论上编写对应的 Shellcode 即可
但我们发现如果通过 AFL-Fuzz 启动的 harness 的 stdout 和 stderr 被定位到了 /dev/null 里,所以说我们的输出等于半残废,在不考虑恢复标准输出的方法,可以把这个当成一个没有 write() 的题目,那么我们可以使用侧信道的方式来逐位爆破 Flag ,通过汇编的无限循环以及程序非正常结束返回给模糊测试程序的返回值来判断该位是否正确
由于似乎这个测试程序实际不会限制 ORW 的 Shellcode ,我们不需要进行一些类似于免杀的优化,直接写就行,唯一的问题可能就是这个 Flag 位置太鸡贼了,实测需要访问 /home/ctf/flag 才能成功
|
|
onlyread
十分简洁的题目,只有一个可以溢出的 read() ,没有输出函数,几乎没有很多有用的 gadget

看一眼保护,发现是 Partial RELRO,没有 PIE

在这种保护下,如果不想通过爆破库函数低位偏移的方式来使用 open() 和 write() 的话,我们可以使用相对偏移,伪造 linkmap 并结合 re2dlresolve 来使得程序去执行在 libc 中想要的函数,甚至是某个地址,这里直接使用了 one_gadget
由于没有可以直接控制参数的 gadget 我们可以借助唯一能找到的 pop rsp; ret; 结合主函数的 read() 片段来进行任意已知地址读写 0x800 大小,我们利用这个来写入伪造的内容和构造攻击链
|
|
Misc
Hard guess
题目描述:
啊……远野君坚持让我为他的新项目学习计算机。这个 VPS 东西正好在打折,所以……教程上说“/root”文件是受保护的……(停顿,看向屏幕)它们不可能泄露吧……?——加藤惠
附件下载是个网页,关于加藤惠的介绍,有这样的信息:
来自秋人远野的安全通知
发布于 2 天前 | 标签:安全 | 未读
惠小姐,请注意:
- 不要将 SSH 用户名设置为“KatoMegumi”(太容易被猜到了!)。
- 不要使用名字 + 生日组合作为密码,比如“Megumi19960923”之类的……我猜。
- 服务器日志显示昨天有人试图暴力破解你的 SSH!
那么应该是在给的在线场景猜出用户名和密码,然后到/root 里面找到 flag
KatoMegumi
Megumi960923
/opt 下面有个 hello
|
|

清除了 LD_PRELOAD 等一堆东西,重置了 PATH 环境为/bin
用 BASH_ENV
|
|
https://blog.csdn.net/m0_68636078/article/details/142423736
Movie master
|
|

ACTF{IMDBMASTER_uw@tcHed@L0toFmoV1e|tt0118694}
QRCode


先尝试让 AI 用他的思路去写解题代码,搞不出来,不是生成的 1 数量超标就是直接投影出问题,像下面这样,就是差那么一点,没法识别



<strong>这时候就需要人工介入了,然后这个题目的关键就是满足投影能被识别的前提下有尽可能少的 1,那么我就可以先满足识别的要求,然后再去考虑每一个位置删掉这个 1 会不会影响识别,然后往下降 1 的数量 </strong>

<strong>最后就是 AI 生成解题脚本,deepseek🐂,脚本一字没动 </strong>

|
|
ACTF{QQQRCode_is_iiint3r3st1ng}