Pwnablekr_Toddlers Bottle_random

ssh로 접속하면 소스파일과 실행파일이 있다.

C 파일의 핵심 알고리즘은 다음과 같다.
rand함수로 랜덤 숫자 생성- 입력값과 랜덤 숫자를 xor한 값과 0xdeadbeef를 비교, 맞을 시 플래그 인쇄
rand함수는 srand로 설정한 시드가 같다면 매번 같은 숫자를 뽑는다.
위 코드에서는 딱히 srand를 호출하지 않으므로 디폴트 시드인 1을 이용한다. 디버거를 이용하여 random 변수에 어떤 수가 저장되는 지 알아내면 된다.

rand함수를 호출한 뒤 eax에 반환한 리턴값이다. random 변수에는 0x6b8b4567이 저장된다.
이제 key를 찾으면 된다. key^0x6b8b4567 = 0xdeadbeef 를 만족하는 key를 구해야 한다.
key는 0xdeadbeef ^ 0x6b8b4567 한 값이다. 이는 xor 계산의 특징이다.
즉, key의 값은 0xB526FB88이다.
scnaf에서 %d를 이용하므로, 0xB526FB88를 10진수로 변환한 3039230856를 입력해야 한다.

flag는 Mommy, I thought libc random is unpredictable... 이다.
tags: writeup, pwnable, elf file, linux, c lang, insecure randomness, pseudo random