Pwn 学习 fmt_test_2格式化字符串

本文详细解析了fmt_test_2程序中的格式化字符串漏洞,通过IDA静态分析和GDB调试,展示了如何利用两次循环泄露堆栈信息并实现代码执行。关键步骤包括利用泄漏的rbp地址找到v1地址,构造payload进行攻击,并给出了实际的exploit和运行结果。
### PWN格式化字符串漏洞利用 #### 背景与原理 格式化字符串漏洞是PWN题常见考点之一,主要源于程序使用了用户可控的格式化字符串作为参数传递给`printf`、`sprintf`、`fprintf`等C库中的打印函数[^1]。这种情况下攻击者可以通过精心构造输入来读取或修改内存数据。 #### 利用方式 在CTF竞赛中,格式化字符串漏洞常用于: - **泄露信息**:通过控制格式化字符串参数,可以泄漏栈上的内容或其他敏感信息。 ```python payload = "%x " * 20 # 泄露多个寄存器/内存位置的内容 ``` - **覆盖特定地址的数据**:结合`%n`操作符可实现对指定内存位置写入数值的功能,进而可能改写重要指针(如GOT表项),最终达到执行任意代码的目的[^2]。 ```python from pwn import * one_gadget = ... # 假设已知的一个gadget地址 stack_addr = ... # 需要被覆写的堆栈地址 payload = (b"%{}c%13$hn".format(one_gadget & 0xffff).encode() .ljust(0x28, b'\x00') + pack(stack_addr)) ``` 上述Python脚本展示了如何构建payload以完成一次简单的格式化字符串攻击,其中`one_gadget`代表目标进程中某个有用的ROP gadget偏移量,而`stack_addr`则是计划篡改的目标地址[^4]。 #### 编程实践建议 为了避免此类安全风险,在编写涉及格式化输出的应用时应遵循良好习惯,例如总是显式声明所需转换说明而非依赖默认行为,并严格验证所有来自外部源的数据[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

==Microsoft==

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值