profile image

L o a d i n g . . .

random 문제 화면이다.

 

ssh로 접속해서 파일들을 확인해보았다.

 

random.c 소스 파일이다.

 

먼저 rand 함수의 결과로 반환된 값을 random 변수에 저장한다. 그리고 scanf를 통해 입력받은 key값과 random 값을 xor 연산을 해 0xdeadbeef와 같은 값이 되면 system 함수가 실행된다.

 

그러면 어떻게 random 값을 유추해서 우리가 입력한 값과 연산해야할까?

사실 그럴 필요가 없다.

rand() 함수의 경우 seed 값에 따라 다른 값들을 생성해낸다. 따라서 seed 값이 같거나 없을 경우 일정한 값을 만들어낸다는 의미가 된다.

 

참고 : [C언어/C++] rand, srand, time 랜덤함수에 대해서 (난수생성) (tistory.com)

 

[C언어/C++] rand, srand, time 랜덤함수에 대해서 (난수생성)

안녕하세요. BlockDMask 입니다. 오늘은 C/C++로 개발할때 가끔 사용하는 랜덤한 수(난수)를 생성하는 함수에 대해서 알아보겠습니다. 랜덤한 값을 가지고올때 필요한데요. 그럼 시작해보겠습니다. 1

blockdmask.tistory.com

 

 

그렇다면 rand()의 결과 반환되는 random 값만 구하면 문제를 해결할 수 있을 듯 하다!

main 함수

rand() 함수가 호출된 후에 bp를 걸어 반환값을 확인해보자.

eax를 확인해보면 될 듯하다.

 

 

rax : 0x6b8b4567

 

python을 통해 구해준다.

우리가 구해야 할 key 값은 0x6b8b4567^0xdeadbeef 이다.

 

 

성공적으로 쉘을 획득하였다!

'Wargame > Pwnable.kr' 카테고리의 다른 글

[Pwnable.kr] UAF  (0) 2021.05.08
[Pwnable.kr] 5번 passcode  (0) 2021.04.08
[Pwnable.kr] 4번 flag  (0) 2021.04.08
[Pwnable.kr] 3번 bof  (0) 2021.04.01
[Pwnable.kr] 2번 collision  (0) 2021.04.01
복사했습니다!