前言
pwn第一题没有mips环境导致很快写完了却没法汇编shellcode,第二题又因为中途太紧张了分析成了依托,实际上逻辑盘的也差不多了,但是比赛为了其他方向的分又没专心做…导致最后仅仅差了10分与省一,教训就是一定要稳住心态,也不能因为分数的变动和排名的摇摆而出现心态的恍惚…总之好好吸取教训
2025省赛决赛
misc
misc1
十六进制中有换表base,用7z打开末尾的附加文件可以看到flag.txt:c.txt
解密flag即可
pwn(仅复现)
mips
保护
一个mips异构的pwn
qemu进行运行
会
给出一个v1的地址,可以栈溢出
ra会放返回地址
实际上是有假canary的,可以溢出到返回地址
要把这一行原本的arm64改为arm才能出gadget
此处read溢出到返回地址
拿python生成一下shellcode,栈是可执行的!可以直接写shellcode
|
|
calc
保护
由于实现了一个stack,在这片空间上我们可以利用操作符进行溢出,但是只能输入一次,要精心构建payload,如果我们++两次,那么就会直接触发到canary从而stack smashed
我们没有输入的时候可以看到在最后退出的时候如上正常返回
如果输入一个+的情况下会因为多清理一次栈而导致变为0从而指向0-8,这时候需要回去看具体的逻辑才可以。难受的是符号全剥去了,不过好在结构体还比较好逆,实际上程序模拟实现了两个栈,分别装载操作数和操作符
程序还原
逆向完后主要有的函数为:
操作数的出入栈 操作符的出入栈以及查看当前栈顶操作符
1
2
3
4
5
在push和pop的部分存在漏洞
vuln
push部分对于操作数栈的sp的类型转换为int,因此可以实现负数的绕过
而pop部分始终会执行–的操作,即使检查无法通过也不会报错,这就导致可以正常返回,从而覆盖到栈上的信息,而在进入函数之前刚好就是0,所以我们直接输入+的话,就会如下图
如图,pop导致对数值的清空,从而直接将0写到了返回地址,同理如果输入两个++
canary也直接变为了0
那么就有如下的构建执行链的思路
-
通过
one_addr++,这种情况下数字进入实现push,而++会pop两次,从而-1就写到了返回地址,比如12345++ -
然后如何构建链条呢?注意到程序里是有符号优先级的
-
并且符号
)的处理也存在大问题,正常的解决括号顺序应该就是遇到)的时候往前组合存在的式子,然后直到遇到(的时候把其pop出来;但是看到下图
遇到)的时候,实际上陷入到了while(1)循环当中,v11由上一次的Peek得到,若为(则会继续走pop分支
这就给了我们继续往下写的一个思路,我们的程序在检测完前面的首先不能让括号里的内容为空,随便放一个数字进去,诶这个时候有人就要问了,那如果后面的先进行了怎么让-1的覆盖和rop链共存呢?这个可以根据具体的位置进行调试,当然我对payload也画了具体构架的思路
按照逻辑,直到遇到之前的++我们的while都不会退出,伴随着(我们的地址进入栈中,但注意此时还是没有覆盖到返回地址的,准备好之后最后再执行到ret++的部分,此时不就实现了-1开始的链条覆盖了吗?
那么就可以构建出如下的exp
exp
|
|
only_one
保护:
有增删和一次free
glibc为2.31
delete会清零指针,无uaf
add会检测chunk_ptr指向的地方有无堆块存在,index不能写负数,所以改不到负数的结构体?
跟预赛好像是类似的,最多20次申请,size小于0x100,那么就是unsorted bin和tcache bin的利用
但是有一次不清理指针的free来进行唯一double free
来不及写
crypto
rsa
给出了diff和sum,根据diff和sum可以求出p,q。之后就是正常RSA
|
|
数据安全
check1
检验方法均已给出,根据检测方式进行提取编写:
|
|
最后提取出文件
reverse
天命人
根据算法dump出解密即可
|
|
Androidtest
fridahook字符串得到换过表的base64
lib中可以看到ret_str函数,从中dump出数据换表后异或即可
|
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=
用cyberchef解密即可
DASCTF{android_anti_and_test_is_interesting}
AI
dog
肉眼一张一张看过去的
26c39cf8-55fb-4899-82bc-442cf4627d95.jpg+6e17fffa-b696-4769-9b43-e0f453f8098d.jpg+7a19da17-9f4a-411b-bac7-83d2454d868a.jpg+897a3a87-dfcf-4233-8097-6bba2e6507ba.jpg+c6b1099a-d626-4cbd-94fc-32aa46ffb02b.jpg+d5117480-7943-48f8-9e79-67fdd51092d2.jpg
然后md5计算