pwnable.kr第六题:random

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相与,结果即为我们要输入的数据。

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

时间: 2024-11-10 15:13:19

pwnable.kr第六题:random的相关文章

pwnable.kr第三题:bof

0x000查看源码 打开bof.c文件 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 void func(int key){ 5 char overflowme[32]; 6 printf("overflow me : "); 7 gets(overflowme); // smash me! 8 if(key == 0xcafebabe){ 9 system(&q

pwnable.kr第五题:passcode

0x000打开环境 ①查看源码: 1 #include 2 #include 3 4 void login(){ 5 int passcode1; 6 int passcode2; 7 8 printf("enter passcode1 : "); 9 scanf("%d", passcode1); 10 fflush(stdin); 11 12 // ha! mommy told me that 32bit is vulnerable to bruteforcin

pwnable.kr第四题:passcode

0x000 打开环境 下载文件到本地,查看文件格式为64位的ELF,xxd命令是将文件转化为16进制的格式查看,发现文件内容有个明显的upx,upx是一种加壳压缩的程序,所以先把该文件脱壳,使用upx -d命令脱壳至flag_upx. 0x001 源码分析 细心一点就会发现,有一个注释“#0x6c2070 <flag>",然后你懂的:(“x/s",查看地址内容,s可省略,代表字符串) 这就是flag了!   原文地址:https://www.cnblogs.com/Denn

【pwnable.kr】blackjack

又一道pwnable nc pwnable.kr 9009 读题找到源代码在:http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html 第一反应是源代码这么长,还不如先玩玩看. 首先,看一下游戏规则发现和21点游戏是一样的,可能国外就叫blackjack吧. 每次,让游戏中下注,然后和电脑比赛,下注的金额不能超过所持有的金额. 这尼玛发牌函数也是随机的,就算你运气再好,算法再牛,想挣100w

pwnable.kr 第一题 FD

题目地址http://pwnable.kr/play.php 第一题 FD 环境是kali系统 首先打开题目 按提示连接ssh 密码为guest 查看文件内容发现存在flag文件,但是没有读权限 查看fd.c代码文件 复习出现的函数 int argc 要输入的参数 char* argv[]表示的是包括文件名在内的参数,文件名是argv[0] char* envp[]是环境变量,比如path=c:\windows之类的东西.它没有一个整数来为它记数是通过最后一个evnp[i]==NULL来表示结尾

pwnable.kr 第二题 collision

题目地址 http://pwnable.kr/play.php 首先登录查看文件 分析代码,目的输出flag 显而易见,要让flag输出 就得让check_password这个函数返回一个0x21DD09EC 看提示可以得出要输一个20字节的字符 int占四个字节 char占一个字节 check_password 转换时候将20个char 四个一组转为int并相加 用python自带的计算机简单算一下 我们需要输入四个0x6c5cec8和一个0x6c5cecc 使用万能的python,尝试了多次

【pwnable.kr】 codemap

pwnable新的一题. download: http://pwnable.kr/bin/codemap.exe ssh [email protected] -p2222 (pw:guest) 这道题虽然是在pwnable下,但是是一道逆向题... //前web狗膜一发二进制大佬 根据提示,需要查看 0x403E65 运行时,寄存器 EAX,EBX 的内容. 先不考虑运行的内容,先看程序.首先这个程序没有加壳,直接可以用ida查看内容. 然后可以看到程序的框架,在main函数中,默默按下F5..

【pwnable.kr】bof

pwnable从入门到放弃,第三题. Download : http://pwnable.kr/bin/bofDownload : http://pwnable.kr/bin/bof.c Running at : nc pwnable.kr 9000 很简单的一道栈溢出题目. 依然先读代码: #include <stdio.h> #include <string.h> #include <stdlib.h> void func(int key){ char overfl

【pwnable.kr】leg

pwnable从入门到放弃第八题. Download : http://pwnable.kr/bin/leg.cDownload : http://pwnable.kr/bin/leg.asm ssh [email protected] -p2222 (pw:guest) 先下载这两个文件:leg.c #include <stdio.h> #include <fcntl.h> int key1(){ asm("mov r3, pc\n"); } int key2