师傅们在做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!
其实因为是实现函数是伪随机,我们还有另一种方法
算出随机数后将结果适当调大不断执行脚本,知道对应时间与你的结果一样,就可以攻击成功!这里就不演示了
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。