8月15日pwn学习

题目:dice_game

题目描述:暂无

解题思路:

 8月15日pwn学习

 

 

 跟新手区某个题一样,得到的是压缩包文件,一个是需要pwn的程序,另一个则是库函数文件。然后我想仿照上一次做这种题目的方法如法炮制,但是经过试验和理解,发现是不可行的。而这道题中也出现了seed()和srand(),我们也遇到过,可以说是我们遇到的题的结合。详细的地方后面细说。

1.file和checkup查看文件

8月15日pwn学习

 

 

 64位文件,只有栈保护没开

2.ida逆编译文件

主函数:

8月15日pwn学习

 

 

 前面说过,我想像上一次一样,在read这个函数找到突破口(上次是wirite)得到read函数在GOT表中的的地址,进而得到libc库的加载基址,得到write函数地址后再操作,但问题是我们要同时让v5为1v8为50。

8月15日pwn学习

 

 

 要得到flag,v8要为50,且v5为1

这个函数决定了这两个函数的值

8月15日pwn学习

 

 

 然后我们想到,我们可以控制seed的值,得到随机数序列,依次输入,使其和每一次输入的值相等。上一次这种类型的题目,我们是在exp外面写的c函数,得到随机数序列后依次输入,这种方法很不智能,长度过长后还可能手动不可行。但这次压缩包里,是给了库函数的,那么我们就可以在exp里利用。

3.写exp

在这次写exp学到了很多,例如context.log_level =‘debug’可以显示调试信息,下次写exp记得加上。然后加载库函数的语句libc=cdll.LoadLibrary()是需要ctypes模块的。还有不初始化srand()函数,seed默认为0。

8月15日pwn学习

4.得到结果

8月15日pwn学习

 

上一篇:laravel数据填充


下一篇:Random(seed)中的seed 并不起直接作用