Ret2csu Jarvisoj level5_x64

本题有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.check

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值