Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 2018
- reversing
- CTF
- Read
- ASM
- Bug
- Leak
- pico
- Reverse
- TUCTF
- FSB
- rev
- string
- writeup
- practicalmalwareanalysis
- BOF
- PMA
- pwnable.kr
- pwn
- format
- Rookiss
- Toddler's Bottle
- Bottle
- shellcode
- picoCTF
- pwnable
- shellcraft
- toddler
- anti
- CANARY
Archives
- Today
- Total
제리의 블로그
pwnable.kr random 본문
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