关于栈迁移的学习总结
BUUCTF刷题记录
BUUCTF_de1ctf_2019_unprintable
通过这道题的学习与收获有:
1、bss段的格式化字符串,需要找一条栈链,需要用栈地址->栈地址->栈地址->值,用第二个栈地址来控制第三个栈地址,将第三个栈地址当做跳板,最终去通过跳板的不断移动,去不断写入一或两字节的数据。
这里稍稍总结两句。
利用格式化字符漏洞来达到写的目的,分为两种情况。
如果输入直接是在栈中,那就可以去利用距栈顶偏移加我们构造地址,去达到任意地址任意写的目的。
如果输入是在bss段,那么要利用栈链,来进行任意地址任意写。2、这道题的思路是一边利用格式化字符串漏洞去不断执行printf和read,一边在栈里写入bss段地址,为之后的栈迁移做打算。最后将布置好的rop链发送过去,让执行流迁移到rop链上,利用magic gadget来获取shell。
3、又收集到了一个新的magic gadget。adc DWORD PTR [rbp+0x48],edx 机器码搜11554889
4、第一次遇见格式化字符函数自己修改自己的返回地址去执行自己… 另外就是格式化字符并不需要对齐,格式化字符后面的地址才需要对齐。
5、多注意栈里的数据,是否有特殊的存在。没思路的时候,就调试一下看看能不能找到有用的信息。
2022-长城杯-铁人三项赛 pwn wp
题确实不难,但确实比赛没写出来,可惜差了一点,要是再给半个小时或者一个小时应该就出了,最后卡在一个奇奇怪怪的点(就是 global_max_fast
为了避免写进去 0xdeadbeef
有点大,就用了 global_max_fast - 1
这个地址写入的,结果不知道为啥后面 free
掉堆块后,里面的数据直接没了)浪费了很多时间
2022_祥云杯_pwn 部分wp
赛题WP
2022强网杯 强网先锋-devnull wp
2022柏鹭杯-note2
2023西湖论剑 PWN 部分WP
一共五个 PWN
,有两个零解,还有一个很少解的题目,本人菜鸡选手做不出来,估计后面复现也够呛,就记录一下比赛做出来的两个常规 PWN
。
BSidesSF 2022 CTF
第一次打国外的比赛,由于好几道pwn题出的非常萌新,所以做起来比较舒服(我做出来了三道shellcode闯关和两道无保护的栈题)。其中有两道题的代码是一样的,一个是32位的,一个是64位的。整体利用思路一样,我就详细说一下32位的,64位的这个题同理。