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()