ROP_Ret2Shellcode-32实例
一、相关知识
之前我们说过ret2text漏洞是依赖于程序中存在执行 system("/bin/sh")的函数,那么如何解决ret2text的局限性
ret2textshellcode
没有执行shell的函数,没有开启NX保护
传入自定义的shellcode
ret2libc
开启NX(可写的不可执行)
使用libc函数,leak libc + ROP
什么是shellcode?
通常是开启一个shell
Linux的系统调用
/usr/include/x86_64-linux-gnu/asm/unistd_32.h
写shellcode就是在eax中放我们的系统调用号,最经常用的就是红框中的11
上图是32位的
如何写shellcode(两种方式)
1、手写
(1)调用execve(“/bin/sh”,null,null);
(2)传入字符串/bin///sh(三个’/’)
(3)系统调用execve
eax = 11
ebx = bin_sh_addr(第一个参数)
ecx = 0
edx = 0
2、pwntools自动生成
(1)先指定context.arch = “i386/amd64” (运行环境)
(2)asm(自定义shellcode)
(3)asm(shellcraft.sh())
(4)自动生成shellcode
NX保护(DEP)数据执行保护:可写的不可执行,可执行的不可写
二、实例教学
实例下载:提取码:8189
step1:checksec 检查保护
我们发现没有NX和canary保护
这时我们可以用ret2text护着ret2shellcode
step2:查看是否存在系统函数
-d 显示汇编语句 grep system 查找是否存在system函数,但是这里显然是没有的,所以只能用ret2shellcode(没有NX保护就可以用)
step3:看看主函数
我们看到了get,这就是我们的切入点
思路:程序先put,然后get,我们要覆盖这里,获取返回值,这个返回值就是0x804a080,就是strcpy函数上方的参数。
step4:查看804a080在哪个段,这个段是否有执行权限