ssh连接,输入密码查看目录下的文件
看看random.c的源码
#include <stdio.h> int main(){ unsigned int random; random = rand(); // random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good! "); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases. "); return 0; }
我们要将key异或random==0xdeadbeef才能获得flag,但是rand函数没有设置随机数种子(srand),所以rand()在调用时会自动设随机数种子为1,导致随机数都是相同值,我们用gdb调试一下,看看随机值
先把文件下载下来
scp -P 2222 -r random@pwnable.kr:/home/random/ /home/你的下载地址
用gdb在rand后面断点,慢慢调试(n)
之后,发现执行完寄存器rax的值为0x6b8b4567,即rand的值,之后获得结果
把答案提交即可
Mommy, I thought libc random is unpredictable...