伪随机+爆破canary+爆破PIE
 
                ida速览
前言
题目来自:basectf
题解参考:官方wp
checksec+ida速览
| 1 | checksec pwn | 

- 第一个红框,伪随机数的绕过,只要libc一致,时间一致,算法一致,所产生的随机数也是一样的。 
- 第二个红框fork创建子进程,虽然创建子进程是从头开始,但是canary是不变的,这里可以爆破canary 
- 第三个红框是核心函数,可以用来爆破canary和栈溢出到shell函数。 


思路
- 第一步肯定是绕过伪随机数,这里用到python中的ctypes库,先用本地的libc演示:
| 1 | from ctypes import * | 
- 第二步就是爆破canary,canary最后一字节肯定是\x00,所以还需要爆破七位,因此因套两层循环,注意每一次都需要模拟随机数:
| 1 | for j in range(7): | 
| 1 | 第1位是0xeb | 
- canary到手了,只需要将返回地址后两字节改为shell的地址,但是要注意并不是返回到push rbp的位置,因为那样程序是跑不通的,无法获得flag,所以我们直接往下面这个地址跳就行了:
| 1 | .text:00000000000012A9 ; __unwind { | 
| 1 | # 爆破pie | 
完整EXP
- 注意:本地复现要创建一个flag文件
| 1 | from pwn import * | 
- 标题: 伪随机+爆破canary+爆破PIE
- 作者: D0wnBe@t
- 创建于 : 2024-09-21 14:50:05
- 更新于 : 2024-09-23 15:58:32
- 链接: http://downbeat.top/2024/09/21/伪随机-爆破canary-爆破PIE/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
        评论