[CTF]PWN--手搓格式化字符串漏洞

本文详细描述了一种在64位程序中利用格式化字符串漏洞的手动构造payload方法,涉及动态编译、栈溢出预防和hn指令的应用,以修改返回地址实现攻击。作者展示了如何一步步构造payload并利用漏洞控制程序流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

温馨提示:本期全是干货!!!

保护全开,64位,动态编译,IDA查看:

程序的大体是一个循环,循环的内容是让我们读入一个数,判断是不是1,如果是1就让我们读入一次,无法栈溢出,但是存在格式化字符串漏洞,随后进行下一次循环,直到我们读入的数不是1,就结束循环

既然存在格式化字符串漏洞可以利用,那第一步肯定得先泄露出libc基址与一个栈地址(格式化字符串漏洞常规思路)

随后将某个函数的返回地址修改为one_gadget地址,libc基址用于one_gadget地址,栈地址用于求出返回地址

有些看过我之前写的格式化字符串漏洞修改__stack_chk_fail函数的got地址的朋友就想到了用fmtstr_payload(偏移,{被修改的got表:改之后的地址})来修改,没看过的可以去了解了解

https://blog.youkuaiyun.com/2301_79880752/article/details/135916347?spm=1001.2014.3001.5501

但是我要告诉你本题不可以哦,这也是为什么我们标题为手搓格式化字符串漏洞

由于本题的读入字节仅仅是0x30个,而我们用工具生成的payload远超0x30,因此我们需要手搓出修改返回地址的payload

其实也不难,不过这里我们要用到%$hn

学过格式化字符串漏洞的朋友应该都知道%$n的作用吧,那这个%$hn又是跟%$n又有

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值