DongDD's IT

[pwnable.kr] lotto 문제 풀이 본문

Wargame/pwnable.kr

[pwnable.kr] lotto 문제 풀이

DongDD 2017. 8. 27. 14:29

[pwnable.kr] lotto 문제 풀이



로또라는 문제 제목을 보고 되게 재밌을 것 같다는 생각이 들었다. 문제에는 lotto 프로그램을 숙제로 만들었는데 플레이해볼 것인지 물어보고 있었다.




다른 문제와 마찬가지로 flag파일과 lotto 실행 파일, lotto.c 소스코드가 주어져 있었다.

일단 소스 코드를 확인해보았다.





main은 단순히 while문에 1,2,3 을 입력 받을 수 있게 되있었고 2는 help로 사용법을 출력해주는 함수였고 3은 종료였다. 2번 help와 3번 종료는 문제풀이에 사용되지 않는 것 같아서 1번인 play 이미지만 첨부했다.


submit에 stdin으로 6자리를 읽고 /dev/urandom 파일을 열어 6자리를 읽는 형태로 되어있었다.

/dev/urandom에서 잘 몰라서 알아보니 그냥 일반적인 난수 생성을 해줄 수 있는 방법중 하나라고 되어있었다. 6개의 난수를 1~45까지의 수로 만들어 다시 lotto 배열에 저장하게 되있었다.

그 이후에 입력한 값과 난수를 비교하게 되어있었는데 이중 포문을 보고 이상하다는 생각이 들었다. 6*6, 총 36번을 비교연산하게 되어있었고 여기서 취약점이 있다는 생각이 들었다.

난수 중 한개라도 입력값과 겹치는 값이 있으면 match가 증가하게 되어있는 것 같았다.

즉, 같은 숫자 6개를 입력하고 이게 난수와 같다면 match가 증가하여 6이 되어 통과할 수 있는 형식 같았다.

submit이 char형 배열로 되어있었기 때문에 아스키코드 0~45를 이용해야했고 사용할 만한 것은 공백~'-'까지 있었다. 이중에 하나를 잡고 계속 실행하다보면 통과할 수 있을 것 같았다.


10번 넘게 시도했는데 계속 틀렸다고 나와서 아닌가 싶었는데, 그냥 계속 시도하다보니 통과할 수 있었다.

같은 난수가 안나온다는 조건이라면 금방 통과할 수 있을 것 같았는데 10번 넘게 실행하고 통과할 수 있었다.

성공할 확률이 꽤나 높았는데 오래 걸렸던 것 같다.















**************     Answer & Flag     **************



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

[pwnable.kr] flag  (0) 2018.03.09
[pwnable.kr] bof  (0) 2018.03.07
[pwnable.kr] collision  (0) 2018.03.02
[pwnable.kr] fd  (0) 2018.03.01
[pwnable.kr] cmd1 문제 풀이  (0) 2017.08.12
Comments