puts函数泄露地址

博客介绍了CTF中PWN绕CANARY防护的方法,包括选择项、PUTS带出CANARY、泄露函数地址计算基地址,还给出了利用puts函数泄露libc内存信息的相关链接。
### 判断程序中存在可泄露 libc 函数地址漏洞的方法 #### 格式化字符串漏洞 格式化字符串漏洞是一种常见的可用于泄露 libc 函数地址的漏洞。当程序中使用了 `printf`、`sprintf` 等格式化函数,并且直接将用户输入作为格式化字符串参数时,就可能存在该漏洞。例如: ```c #include <stdio.h> int main() { char input[100]; scanf("%s", input); printf(input); // 存在格式化字符串漏洞 return 0; } ``` 利用格式化字符串漏洞,可以通过构造特殊的格式化字符串来泄露栈上的信息,包括 libc 函数地址。如通过 `%x` 格式说明符逐个打印栈上的内容,若栈上存在 libc 函数地址,就可以将其泄露出来。 #### 信息泄露函数调用 如果程序中存在一些可以输出内存中数据的函数调用,并且这些函数的参数可以被控制,也可能导致 libc 函数地址泄露。例如,程序中调用了 `puts` 函数,并且可以将 libc 函数的 GOT(Global Offset Table)表地址作为参数传递给 `puts` 函数,就可以泄露该 libc 函数的实际地址。如: ```python # 构造 payload 泄露 puts 函数地址 puts_got = 0xdeadbeef # 假设的 puts 函数的 GOT 表地址 payload = b'a'*28 + p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(main_addr) ``` ### 所需的前置基础 #### 对 ELF 文件格式的了解 需要了解 ELF(Executable and Linkable Format)文件的结构,包括 PLT(Procedure Linkage Table)、GOT 等。PLT 用于处理动态链接的函数调用,GOT 用于存储动态链接函数的实际地址。通过操作 PLT 和 GOT 表,可以实现对动态链接函数地址泄露和利用。 #### 对栈溢出原理的掌握 栈溢出是许多漏洞利用的基础,需要了解栈的结构和栈帧的工作原理。当程序存在栈溢出漏洞时,攻击者可以通过覆盖栈上的返回地址来改变程序的执行流程,从而实现对 libc 函数地址泄露和利用。 #### 对 Python 脚本编写的熟悉 在漏洞利用过程中,通常需要使用 Python 脚本来构造和发送 payload。需要熟悉 Python 的基本语法和一些常用的库,如 `pwntools` 库,它提供了许多用于漏洞利用的工具和函数,如 `p64` 用于将整数转换为 64 位的字节序列,`u64` 用于将 64 位的字节序列转换为整数等。例如: ```python from pwn import * p = process('./vulnerable_program') puts_got = 0xdeadbeef payload = b'A' * 100 + p64(puts_got) p.sendline(payload) ``` #### 对动态链接机制的理解 需要了解程序的动态链接机制,包括动态链接器(如 `ld-linux.so`)的工作原理,以及 `dl_resolve` 等机制。动态链接机制使得程序可以在运行时加载和调用共享库中的函数,了解这些机制有助于更好地利用漏洞来泄露和调用 libc 函数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叶叶扁舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值