Computer Security

#6 Pwnable.kr : random 문제풀이 본문

Wargame:Pwnable.kr

#6 Pwnable.kr : random 문제풀이

쿠리 Kuri 2022. 8. 6. 18:30
반응형

random


1. ls -al 을 보니,  random파일이 보인다. 

ls -al

 

 

 

 

2. ./random 을 통해 실행 시켜보니,,, 뭐 2^32 시도해보라는데,,, 무리인듯 하다.

./random

 

 

 

 

3. vi random.c를 이용해 코드를 뜯어보자.

vi random

  • rand()를 이용해 랜덤값을 random 변수에 넣어주고 있고,  사용자는 key 값을 입력한다.
  • 두 변수를 XRO한 값이 0xDEADBEEF 이면, flag를 출력해주는 함수이다.
  • 그런데 자세히 보니, rand()함수에 send를 주지 않고 있다.
  • send가 변칙적인 값이라 rand함수에서 매번 다른 값이 나오지만,  얘는 rand() 만 사용하고 있기 때문에, 생성되는 랜덤값이 규칙적이라는 것을 알 수 있었다.

 

 

 

4. gdb로 분석 해보자. 

disass main

일단 callq 0x400500에서 호출직후, main<+18> 요기 -0x4(%rbp) 속에 rand 로 생성된 난수가 있을테니, bp를 걸고 해보자.

 

 

 

 

5. x/x $rbp-0x4 라는 부분에 어떤 값이 들어가 있는지 확인해준다.

rbp

이 값은 send가 없기 때문에, 항상 같은 값일 것이다.

 

 

 

 

6. 이제 0x6b8b4567 과 0xdeadbeef 값을 XOR 해주면 입력해야할 key 값을 얻을 수 있을 것이다. 파이썬으로 알아보자.

python

 

 

 

 

7. 이제 다시 돌아가서 key 값에 3039230856 을 넣어주자!

./random

 

 

 

 

8.위에서 얻은  Mommy, I thought libc random is unpredictable... 문구가 맞는지 확인  해보자!

Mommy, I thought libc random is unpredictable...

성공!

반응형
Comments