제리의 블로그

pwnable.kr random 본문

Wargame/pwnable.kr

pwnable.kr random

j3rrry 2018. 8. 30. 16:35

random - 1 pt


Daddy, teach me how to use random value in programming!

ssh random@pwnable.kr -p2222 (pw:guest)

ssh 접속정보가 있군요

들어가볼까요




random@ubuntu:~$ ls -l
total 20
-r--r----- 1 random_pwn root     49 Jun 30  2014 flag
-r-sr-x--- 1 random_pwn random 8538 Jun 30  2014 random
-rw-r--r-- 1 root       root    301 Jun 30  2014 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!\n");
                system("/bin/cat flag");
                return 0;
        }

        printf("Wrong, maybe you should try 2^32 cases.\n");
        return 0;
}
시드없이 랜덤 함수가 사용되었습니다.
랜덤 함수는 말이 랜덤이지 AI 도 아니고 정해진 알고리즘에 의해 작동하기 때문에
시드만 알면 예측할 수 있습니다.



from pwn import *
import ctypes

s = ssh(user='random', host='pwnable.kr', port=2222, password='guest')
r = s.run('./random')
c = ctypes.CDLL(ELF(which('volname')).libc.path)
r.sendline(str(c.rand() ^ 0xdeadbeef))
print r.recvall()
랜덤 함수가 반환한 값에 0xdeadbeef 를 xor 연산한 값이 key 입니다.
xor 은 A ^ B = C 이면 C ^ B = A 이다라는 명제를 만족하는 연산입니다.


'Wargame > pwnable.kr' 카테고리의 다른 글

pwnable.kr fix  (0) 2018.09.03
pwnable.kr input  (0) 2018.09.02
pwnable.kr passcode  (0) 2018.08.29
pwnable.kr flag  (0) 2018.08.29
pwnable.kr bof  (0) 2018.08.24
Comments