pwnable.kr [Toddler's Bottle] - random
2017-03-13 14:09
369 查看
c语言中取随机数函数rand()为伪随机,需要依赖srand()提供的随机数种子seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。没有置随机数种子直接调用rand(),得到的结果也是一样。
题目源码如下:
使用gdb调试查看random的值,或者本体直接跑rand()得到固定的一个random的值。(这里需要严格在Linux中取指,不同的操作系统会影响这个定值的结果。)
笔者在这里使用本地调试取这个random的值:(这里注意数据定义为unsigned int 或long,因为结果3039230856>2^31,超出了int的上限)
结果如下:
正确输入后即可得到flag。
题目源码如下:
/* ssh random@pwnable.kr -p2222 (pw:guest) */ #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!\n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases.\n"); return 0; }
使用gdb调试查看random的值,或者本体直接跑rand()得到固定的一个random的值。(这里需要严格在Linux中取指,不同的操作系统会影响这个定值的结果。)
笔者在这里使用本地调试取这个random的值:(这里注意数据定义为unsigned int 或long,因为结果3039230856>2^31,超出了int的上限)
#include <stdio.h> int main() { unsigned int random; random = rand(); unsigned int temp = 0xdeadbeef ^ random; printf("%u\n", random); printf("%u\n", temp); return 0; }
结果如下:
./random 1804289383 3039230856
正确输入后即可得到flag。
相关文章推荐
- pwnable.kr [Toddler's Bottle] - bof
- pwnable.kr [Toddler's Bottle] - input
- pwnable.kr [Toddler's Bottle] - uaf
- pwnable.kr [Toddler's Bottle] - lotto
- pwnable.kr [Toddler's Bottle] - shellshock
- pwnable.kr [Toddler's Bottle] - cmd1
- pwnable.kr [Toddler's Bottle] - cmd2
- pwnable.kr [Toddler's Bottle] - leg
- pwnable.kr [Toddler's Bottle] - passcode
- pwnable.kr [Toddler's Bottle] -fd
- pwnable.kr [Toddler's Bottle] - mistake
- pwnable.kr [Toddler's Bottle] - codemap
- pwnable 笔记 Toddler's Bottle - random
- pwnable.kr [Toddler's Bottle] - collision
- pwnable.kr [Toddler's Bottle] - flag
- pwnable.kr [Toddler's Bottle] - coin1
- pwnable.kr [Toddler's Bottle] - blackjack
- pwnable 笔记 Toddler's Bottle - fd
- pwnable.kr-random-Writeup
- pwnable.kr-random-Writeup