【pwnable.kr】 note

查看了国外网友Hansoo1018的WriteUp,在此谢谢这位网友。

源代码中的select_menu()函数出现问题

【pwnable.kr】 note

 

【pwnable.kr】 note

问题出现在红色部分

select_menu()函数以递归方式调用。

如果要在屏幕上再次显示菜单,通常使用while语句或者其他代码完成。递归代码具有更清晰的特点,但是递归迭代越多,堆栈内存就越多。我试图在函数结束时调用Tail Call(Tail Recutsion),但实际上是在用GDB分析之后浪费了堆栈内存。如果是这样,可以一直降低堆栈。它随机接收地址,地址不是堆栈地址。更重要的是,这里创建的内存分配函数使我运行了特权。他需要你写一个shellcode。

1、获取堆栈区域的地址(反复重复)

2、堆叠堆栈并降低地址。低于我们获得的堆栈区域的地址。

3、进行另一次内存分配并将shellcode放入其中(记住你收到的shellcode的地址)。

4、将shellcode的地址放在刚刚收到的堆栈区域的地址中。由于它可以写入4096个字节,因此可以用1024个地址覆盖。

5、当你运行exit时,递归返回堆栈,shell代码地址在中间被覆盖,shellcode执行。

在迭代过程中自然降低了获取堆栈区域的地址。

【pwnable.kr】 note

重复迭代,直到接收的地址大于当前的EBP地址。

然后一直运行下去。

【pwnable.kr】 note

我一再使用255个数组。在这种情况下,我创建了一个删除255次重复的函数。(你可以继续重复)

上传shellcode

【pwnable.kr】 note

提升shell代码的部分

【pwnable.kr】 note

然后它用堆栈区地址覆盖shellcode地址和利用。

【pwnable.kr】 note

Stacking旁边的值是当前的EBP值。

【pwnable.kr】 note

Clear也运行了好几次

【pwnable.kr】 note

终于覆盖了ret地址的堆栈区域的地址。

此时,如果按F5退出,可以最终获取shell权限。

【pwnable.kr】 note

相关文章: