IT(개발, 보안)/pwnable

[Pwnable 풀이] 9. random

인도호랑이 2022. 11. 29. 23:41

이번엔 1pt 짜리 간단한 문제이다.

 

Putty를 사용해 해당 서버에 접속해보면 다음과 같은 파일들을 확인 할 수 있다.

 

여타 다른 문제들과 같게 random.c는 random의 소스코드로 보이고, 해당 소스를 분석해서 flag를 random 프로그램으로 얻어내는 문제 형식이다.

 

소스코드도 간단하다. rand() 함수를 사용해 random 변수에 난수값을 저장하고 이를 scanf로 받은 값과 XOR 하여서 deadbeef값과 같다면 flag를 출력해준다.

 

먼저 main 함수를 어셈블리로 풀어보았다. 랜덤 값은 13번 라인에서 생성되어 저장되는데 브레이크 포인트를 잡아서 해당 값을 확인해보자

 

해당 변수의 주소에 저장된 random 값은 0x6b8b4567이다. 난수 값이라면 응당 실행될때마다 다른 값으로 설정되어야 하는데 이게 웬걸 다시 실행해보아도 계속해서 같은 값이 나옴을 확인해 볼 수 있다. 다시한번 소스코드를 살펴보니 rand() 함수에 파라미터로 아무런 값도 주어져 있지 않다. rand() 함수에 파라미터가 존재하지 않으면 계속해서 같은 난수를 생성하기 때문에 파라미터로 시간 값을 주는 것이 일반적인데 이번 문제에서는 그 부분이 빠진 것 같다.

 

이제 6b8b4567과 XOR 해서 deadbeef 값이 나오는 값을 찾아서 이를 프로그램에 입력값으로 주면 flag값을 얻을 수 있다.

 

반응형