【pwnable.kr】 note

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

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

 

问题出现在红色部分

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

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

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

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

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

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

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

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

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

然后一直运行下去。

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

上传shellcode

提升shell代码的部分

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

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

Clear也运行了好几次

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值