0x00 前言:
阅读蒸米师傅的一步一步学习ROP做的笔记
0x01 程序源码:
1 | #include <stdio.h> |
编译程序:
1 | gcc -fno-stack-protector level4.c -o level4 -ldl |
这里引用蒸米师傅的原话。。。(感觉自己总结的话语言组织不太行,这里就牢记蒸米师傅的原话)
我们之前提到x86中参数都是保存在栈上,但在x64中前六个参数依次保存在RDI, RSI, RDX, RCX, R8和 R9寄存器里,如果还有更多的参数的话才会保存在栈上。所以我们需要寻找一些类似于pop rdi; ret的这种gadget。
这里我们先从level4中找,看看有没有:
1 | mask@mask-virtual-machine:~/mzheng$ ROPgadget --binary level4 --only "pop|ret" |
可以看到0x00000000004008b3 处就有我们想要的
那么,写一哈exp:
1 | !/usr/bin/env python |
运行一哈:
1 | mask@mask-virtual-machine:~/mzheng$ vim exp0.py |
(当然,gadgets在libc.so。6里找也是可以的,因为程序运行时会加载)