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

最低0.47元/天 解锁文章
2153

被折叠的 条评论
为什么被折叠?



