TGCTF2025
前言
rank33,感觉自己还是太菜了,放一部分的wp
题目
crypto
AAAAAAAA·真·签到 |solved by zsm
task
|
|
思路就是先对照,然后对一下思路?UGBRC和TGCTF进行比较,位移是-1,0,1…,猜测每个增加1,搓个脚本 exp.py
|
|
mm不躲猫猫|solved by zsm
60组nc的广播攻击,先读取一下,然后直接爆,好像不用读取也行 读取.py
|
|
exp.py
|
|
tRwSiAns |solved by zsm
task.py
|
|
富兰克林,直接写 exp.py
|
|
宝宝rsa |solved by zsm
task.py
|
|
part1爆破e,part2小e攻击,爆破e的脚本自己写的很慢,ai启动
exp.py
|
|
费克特尔 |solved by zsm
分解n就行了 exp.py
|
|
EZRSA |solved by zsm
task.py
|
|
先把plow和e转了
|
|
plow就是256位,自然想到copper,看p的生成方法,先生成224位的素数,然后填充了九个32bits的emoji,目前已知八个,爆破这一个未知的emoji即可,爆破$2^{31}$到$2^{32}$是不可能的,列出来一点常见的emoji去爆破
|
|
然后是个不互素问题,直接crt
|
|
LLLCG | 复现
task.py
|
|
三个部分 第一个部分会给12组r和k,有模数,可以crt求解,十二组可以求出lcg的abcdn 第二个部分在已知abcdn后307次lcg,然后求出k,p,q,g,y均为已知值,即可计算得到x 第三部分就是伪造签名发过去就行了
但是这个题的交互真的很麻烦啊我靠,我是先把数据拉下来再传的,求解代码扔上面吧
|
|
pwn
签到 | solved by v2rtua1
没什么好说的,gets->ret2libc
|
|
overflow | solved by v2rtua1
x86的gets溢出题,同时是静态编译,尝试–ropchain一把梭没成功,观察到程序提供了很多gadget并且有mprotect函数,于是打mprotect写shellcode然后jmp过去
|
|
stack | solved by v2rtua1
一开始没看出啥门道,最后才发现可以溢出到原write的参数上,因为有sh字符串,改成system("/bin/sh")就结束了
|
|
fmt | solved by v2rtua1
格式化字符串题,正常流程下来只有一次格式化机会因为0x30不够再写个0x114514进去了,于是观察栈构造,几次调试后发现可以修改printf返回地址到前几行代码,这样就可以实现循环printf 然后就是随便打了,泄露libc->onegadget
|
|
heap | solved by v2rtua1
2.23的堆题,提供alloc和free两个常规功能和一个附带功能,发现无show于是先想到unsorted bin爆破stdin泄露地址,但是发现只给了fastbin,结合没pie和uaf的特性往name上写入fastbin头得以控制list,然后因为有了任意free就可以再布置一个unsorted bin大小的chunk在name上,free完泄露libc直接打malloc_hook
|
|
onlygets | solved by v2rtua1
题目给了个docker和一个.so库,so是个后门 程序开头将bss上的stdin等指针置空了,表明出题人不想让我们二次写/泄露,这种没泄露的题一般都是无输出直接增减偏移去打的。先看jmp/call,这种类型的gadget只和rax/rax/rbp有关联,rax没法控制而rbp可以,那就找所有跟rbp有关的gadget。想了一会发现可以打这么个链:rbp=(any writeable-0x3d),pop rsi…(偏移)+add ebx,esi+add [rbp-0x3d],ebx….+pop rbp,(any writeable)+ret+jmp [rbp]
|
|
总结
没有web,misc那几个都简单就不放了(