码迷,mamicode.com
首页 > 其他好文 > 详细

pwnable.kr第六题:random

时间:2019-10-04 19:01:35      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:bsp   srand   lag   span   null   结果   dea   随机   不同   

0x000打开环境
查看源码

#include 

int main(){
    unsigned int random;
    random = rand();    // random value!

    unsigned int key=0;
    scanf("%d", &key);

    if( (key ^ random) == 0xdeadbeef ){
        printf("Good!\n");
        system("/bin/cat flag");
        return 0;
    }

    printf("Wrong, maybe you should try 2^32 cases.\n");
    return 0;
}

从源码中可以看出,没有加随机种子,那么rand产生的就是伪随机数,每次运行出来的随机数都是一样的,随机种子初始化诸如“srand( (unsigned)time( NULL ) )”,则每次产生的随机数都是不同的。

0x001 漏洞利用

我们就可以找出该随机数的值,再和0xdeadbeef异或,就可以得到我们该输入的值,因为异或是可逆的,知道任意两个值都可以异或出第三个值。
用gdb调试下,先打印出main函数

技术图片

 

 不难看出,rbp-8是我们输入的值,rbp-4是random产生的值,则在*0x40062f设置断点。

技术图片

 

 查看rbp-4地址的值即为random数据。

再将该值和0xdeadbeef相与,结果即为我们要输入的数据。

 

技术图片

 

 技术图片

 

pwnable.kr第六题:random

标签:bsp   srand   lag   span   null   结果   dea   随机   不同   

原文地址:https://www.cnblogs.com/DennyT/p/11622768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!