伪随机+爆破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 进行许可。
评论