第三次ROP (LEVEL 5)

本文详细介绍了如何通过栈溢出利用ROP技术获取shell的过程,包括禁用保护机制、构造payload泄露write地址、找到Libc中system和/bin/sh的地址,最终实现getshell。
摘要由CSDN通过智能技术生成

1、题目拿到是的一段C代码。

看到write 和 read 函数,猜测可以用栈溢出来getshell。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void vulnerable_function() {
    char buf[128];
    read(STDIN_FILENO, buf, 512);
}

int main(int argc, char** argv) {
    write(STDOUT_FILENO, "Hello, World\n", 13);
    vulnerable_function();
}

2、生成可执行文件。

通过gcc编译可执行文件,加上参数 -fno-stack-protector -o -z execstack -o 禁用CANARY和NX栈保护机制。

gcc -fno-stack-protector -z execstack -o level5 level5.c

再执行命令关闭本机的地址随机化,降低一下难度。

# echo 0 > /proc/sys/kernel/randomize_va_space

3、checksec查看一下文件的保护机制。

在这里插入图片描述
(这里看到有PIE,但是由于我们关闭了本机上的地址随机化,仍可以当作PIE disable)

4、ida查看文件。

在这里插入图片描述可以看到,read只申请了80h的栈空间,但是可以读进去200h的数据,所以可以利用栈溢出来getshell。

5、构造通用gadgat泄露write的地址,以获取libc。

------------------------------------------------------------------------------------------------------------------------------
在一些64位的可执行文件中,一般使用libc,就会有个libc初始化函数,如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值