8月8号pwn学习

今天先看了一点东西再做的题,还把做完做的题步骤给加上了,见昨日学习博客。

https://www.anquanke.com/post/id/85138

题目:guess_num

题目描述:菜鸡在玩一个猜数字的游戏,但他无论如何都赢不了,你能帮助他么

解题思路:一个新的题型,老规矩

1.checksec

保护机制好像都有。

2.file文件

64位文件

3.ida分析文件

 

 

 

 

在编译后发现,需要每一次都输入正确的数字,才会跳转到sub_C3E函数得到flag。

而在验证的代码里,我们发现,每一次都要与随机生成的数字相同,才会正确,所以一每一次去猜测基本是不可能的,这个时候要把目标投向随机数生成机制,在linuxc中,需要有一种子seed,和一个种子初始化函数srand(),他可以对相同的seed进行初始化,避免随机序列始终一致,以及一个随机数生成函数rand(),而seed不变的话,生成的数也不会变,这是突破口。详见https://blog.csdn.net/qq_41199502/article/details/80726780

 

 而查看了内存地址,发现要求输入的name和seed值是在一起的。那么这个时候我们就可以用gets覆盖掉seed的值,使随机数列变为我们想要的,得到flag

4.解法一

解法一是用c语言,用我们指定的seed查看得到的随机序列,代码如下图所示,机制为上文中提到的rand()和srand()函数

 

 得到随机序列

 

 然后远程连接,输入超过0x30(namev8地址)-0x10(seed地址)长度的字符串,我选择的是bbbb来覆盖seed,得到结果

5.解法二

而在解法二中,则是在exp中直接调用c的库函数生成随机序列,这里涉及到的知识:

Python使用Ctypes与C/C++ DLL文件通信过程介绍及实例分析

 
posted @ 2020-08-08 23:53  三木森林  阅读(167)  评论(0编辑  收藏  举报