Stack pivoting(栈翻转)
仅供个人学习参考
原理
如其名,劫持栈指针指向攻击者能够控制的内存,再进行rop
利用情况:
1.可以控制的栈溢出的字节数较少,难以构造较长的 ROP 链
2.开启了 PIE 保护,栈地址未知,我们可以将栈劫持到已知的区域。
3.其它漏洞难以利用,我们需要进行转换,比如说将栈劫持到堆空间,从而在堆上写 rop 及进行堆漏洞利用
利用条件:
1.可以控制程序执行流。
2.可以控制 sp 指针。
例题
X-CTF Quals 2016 - b0verfl0w https://raw.githubusercontent.com/GNchen1/Pages/main/Img/b0verfl0w
存在栈溢出,但溢出后可供写入的字节数很少,考虑Stack pivoting
思路:往栈上写shellcode,再劫持esp到shellcode处
栈变化如下,其中padding为填充的垃圾数据
fgets读入数据后
leave ret后,pop eip
eip执行jmp esp后
eip执行sub esp, 0x28;jmp esp后
exp如下:
1 | from pwn import * |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.