[Pwnable.kr] Simple Login

24. 2 月 2016 pwnable writeup 0

关于EIP控制的题目

 

F5的结果很简单,这里只贴一下main和auth两个函数

可以看出input在被Base64Decode之后,又被放回了input,然后传入auth函数,auth函数调用memcpy将input中的内容放到v4(ebp-8)中,因为之前检查了input的长度为12,所以这里可以导致栈溢出。但是这里的问题在于:只能溢出12字节,而且溢出开始地址在ebp-8,恰好覆盖不到函数返回地址:

PQ$[YSCGUFV%@4}W_P]B$$Y

(如图,最多只能覆盖了s,s是存储上一个栈帧ebp的地方

其实在函数返回的时候需要执行两步操作:

第一步,还原栈帧:mov esp, ebp;  pop ebp

第二步,还原eip:pop eip

如果我们将system地址放在ebp-4,input地址放在放在ebp+0的话,第一步时input地址将会被赋值给esp,ebp指向main函数的栈帧头;执行第二步时,因为esp这个时候指向input了,esp-=4,并赋值给eip,这样eip就获得了input+4中的内容——system地址

通过IDA可以看到system执行的地址和input的地址

输入即可得到shell


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据