【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

admin 2025年6月15日23:49:54评论49 views字数 1860阅读6分12秒阅读模式
比赛时候时间有点紧张,有很多能做出来的题当时没时间做了,赛后复盘了一下所有的PWN题,在此总结一下。
【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解
【圆满收官】PolarCTF网络安全2025夏季个人挑战赛获奖名单已公布!快来看看吧!

forpwn

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

一路执行下去就可以getshell

丢给ai直接分析下

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{57801b57-857a-4322-8f00-2984e46712de}

go

开启pie的栈溢出,题目默认给了win函数的地址,直接根据偏移计算出后门地址和ret指令的地址,然后覆盖返回地址栈溢出就行了

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{52b42b9e-ce62-46da-94d3-2136408f53ea}

cbllhl_double_free

利用uaf修改fastbin的next指针,使其指向0x6020D0前面0x7f的位置,两次分配覆盖过去之后修改0x6020D0为0x208,最后调用后门选项5即可

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{6372ebfe-c2a7-41b4-9046-3f0ac12896ef}

format

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

输入no进入input函数

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

利用格式化字符串把bss段上的n改为4进入back后门函数

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

常规栈溢出泄露libc即可

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{b829a3d6-1cba-49fb-aaf8-2d8ea863fe49}

flow

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

strcpy存在栈溢出

x00绕过strlen的判断也绕过了strcpy

刚好v3unsigned int8 0-255,尝试让v3整型溢出从而输入长度大于0x21getshell

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{f8cc7c26-2efd-4f74-b274-0535924d70da}

polarmagicheap

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

存在后门函数

直接堆溢出修改unsortedbinbk指针至后门-0x10处,两次分配之后magic就会被覆盖成一个0x7f开头的值,输入2020触发后门即可

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{419737ce-5cb9-4193-93d7-f650552f628b}

bllhl_pieee

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

利用格式化字符串泄露程序基址,栈地址,以及canary内容

已经给了system函数,只需要在栈上写入一个/bin/sh字符串并计算好偏移就行了

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{f5a7c281-f256-4b58-88f9-c5eb7603f1a2}

gadget

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

泄露puts地址找libc基址,然后修改v4为one_gadget即可

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{ba10681d-f373-41fc-b83f-8b06f18cc134}

magichouse

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

编辑函数存在输入新的大小堆溢出问题,libc2.23,思路就很清晰了,利用off-by-one修改malloc_hook并配合realloc_hook调栈。

通过off-by-one修改堆块大小释放分配造成堆块重叠泄露main_arena+88的地址,根据libc计算出malloc_hookone_gadgetrealloc的绝对地址,重新释放堆块,利用堆溢出修改其fd指针指向malloc_hook前方0x7f的地方,两次分配跳过去编辑堆内容,从而同时修改malloc_hook的内容为realloc+8地址,以及realloc_hookone_gadget的地址,最后触发一下malloc函数即可。

realloc调栈的原理和方法可以参考我之前的一篇文章:
堆溢出打fastbin one_gadget并用realloc_hook调栈
【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解
【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到flag{394a1d88-7d33-44dd-8c87-8abab96cb1f7}

bllhl_shellcode4

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

0x4040C0开启了RWX

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

read很明显存在栈溢出

同时发现一个jmp rsp的代码段

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

那么思路就很清晰了,利用栈溢出控制程序执行流再次执行read,这次read0x4040C0处写入shellcoderead完返回到jmp rsp-0x15的位置,从而跳转到nop滑到shellcode即可(本题给了/bin/sh所以shellcode可以简单一点)

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解

得到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方向全解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月15日23:49:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【WP】PolarCTF2025年夏季个人挑战赛PWN方向全解http://cn-sec.com/archives/4167549.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息