forpwn
一路执行下去就可以getshell
丢给ai直接分析下
得到flag{57801b57-857a-4322-8f00-2984e46712de}
go
开启pie的栈溢出,题目默认给了win函数的地址,直接根据偏移计算出后门地址和ret指令的地址,然后覆盖返回地址栈溢出就行了
得到flag{52b42b9e-ce62-46da-94d3-2136408f53ea}
cbllhl_double_free
利用uaf修改fastbin的next指针,使其指向0x6020D0前面0x7f的位置,两次分配覆盖过去之后修改0x6020D0为0x208,最后调用后门选项5即可
得到flag{6372ebfe-c2a7-41b4-9046-3f0ac12896ef}
format
输入no进入input函数
利用格式化字符串把bss段上的n改为4进入back后门函数
常规栈溢出泄露libc即可
得到flag{b829a3d6-1cba-49fb-aaf8-2d8ea863fe49}
flow
strcpy存在栈溢出
x00绕过strlen的判断也绕过了strcpy
刚好v3是unsigned int8 0-255,尝试让v3整型溢出从而输入长度大于0x21来getshell
得到flag{f8cc7c26-2efd-4f74-b274-0535924d70da}
polarmagicheap
存在后门函数
直接堆溢出修改unsortedbin的bk指针至后门-0x10处,两次分配之后magic就会被覆盖成一个0x7f开头的值,输入2020触发后门即可
得到flag{419737ce-5cb9-4193-93d7-f650552f628b}
bllhl_pieee
利用格式化字符串泄露程序基址,栈地址,以及canary内容
已经给了system函数,只需要在栈上写入一个/bin/sh字符串并计算好偏移就行了
得到flag{f5a7c281-f256-4b58-88f9-c5eb7603f1a2}
gadget
泄露puts地址找libc基址,然后修改v4为one_gadget即可
得到flag{ba10681d-f373-41fc-b83f-8b06f18cc134}
magichouse
编辑函数存在输入新的大小堆溢出问题,libc为2.23,思路就很清晰了,利用off-by-one修改malloc_hook并配合realloc_hook调栈。
通过off-by-one修改堆块大小释放分配造成堆块重叠泄露main_arena+88的地址,根据libc计算出malloc_hook、one_gadget、realloc的绝对地址,重新释放堆块,利用堆溢出修改其fd指针指向malloc_hook前方0x7f的地方,两次分配跳过去编辑堆内容,从而同时修改malloc_hook的内容为realloc+8地址,以及realloc_hook为one_gadget的地址,最后触发一下malloc函数即可。
得到flag{394a1d88-7d33-44dd-8c87-8abab96cb1f7}
bllhl_shellcode4
给0x4040C0开启了RWX
read很明显存在栈溢出
同时发现一个jmp rsp的代码段
那么思路就很清晰了,利用栈溢出控制程序执行流再次执行read,这次read到0x4040C0处写入shellcode,read完返回到jmp rsp-0x15的位置,从而跳转到nop滑到shellcode即可(本题给了/bin/sh所以shellcode可以简单一点)
得到flag{6073361c-542b-4541-b766-0c873180b4ef}
注意本题踩到的一个大坑,就是在gdb.debug的时候,第二次send前需要加一个pause(第35行),否则两段send会同时发出,read接收长度是0x24,会吃掉一截第二段的send内容,导致call read之后ret过去的位置不是jmp rsp-0x15那一个gadget了
原文始发于微信公众号(智佳网络安全):【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论