师傅们在做pwn题的过程中,可能会遇到随机数问题,常用的方法是:

1.想办法去覆盖seed

栈溢出

缓冲区溢出

2,爆破

3.代码模拟生成

别急,先来看一道题,MOECTF 2022 RANDOM

看下保护

canary开了,栈不可执行

我们进入ida中

可以看到strcmp判断,进一步分析

现在的问题是我们如何求出v8

如果要跑代码模拟的话

我们要这样跑出结果

发现很不接近,这可能涉及c和python关于这个函数的具体实现不同,说明我们只能用c,不能用python

现在我们选择用c语言,还有两个方案(都是可以的)

1.将代码编译为动态链接库文件,利用ctypes在脚本中调用

2.编译成可执行程序,用process直接打开

下面我们来实战看下效果(只演示了第一种)

上面是我们自己写的c代码,gcc成demo.so后,在exp中利用ctypes调用函数计算

可以看到get shell!

其实因为是实现函数是伪随机,我们还有另一种方法

算出随机数后将结果适当调大不断执行脚本,知道对应时间与你的结果一样,就可以攻击成功!这里就不演示了

xiaoheshang404

a student

《pwn-random》有一个想法

回复 一位WordPress评论者 取消回复

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