엄마!!!! 나 숙제로 로또 프로그램을 만들었어요!! 해볼래요?? 하고 ssh로 접속할 수 있는 주소를 준다. 한번 접속해보자.

lotto라는 바이너리가 하나 있다. c코드를 확인해보자.

main문을 먼저 확인해보면

main에서는 menu를 선택할 수 있도록 해준다. Play를 보자.

가장먼저 read로 로또 번호를 입력 받는다.

그 후에 로또 번호를 생성한다. /dev/urandom에서 6개를 읽어와서 모듈러스 연산으로 1 ~ 45의 숫자를 가지는 로또번호를 만든 다음에 아까 입력받은 번호랑 같은지 비교한다.

맞으면 system함수로 인해 flag가 읽히는 형식이다.

이 코드를 보자마자 urandom함수의 취약점에 관한 문제인가 싶었는데 그러기엔 2포인트가 너무 짠거 같아서 코드를 자세히 살펴보니까 다른 취약점을 확인할 수 있었다.

이 부분인데 코드가 조금 이상한 것을 확인할 수 있다. 반복문 속 if문이 총 36번 실행된다는 것을 볼 수 있는데 매우 이상한 것이다. lotto한바이트와 우리가 입력한 6개의 숫자 전체를 계속 비교하는 것인데, lotto의 한 바이트만 맞춰도 match6이 되어서 flag를 얻을 수 있는 것이다. 1~45의 값을 입력받으니까

이 친구를 참가해보면 45이하의 아스키 코드 중에 입력할 수 있는 것이 10진수로 33‘!’에서 45‘-‘까지 밖에 없다. 그러면 !!!!!!이렇게 집어넣어서 몇 번 반복해서 시도해보자.

오 두번만에 성공했다!!!! 플래그는 sorry mom... I FORGOT to check duplicate numbers... :(

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

[pwnable.kr] cmd1  (0) 2019.08.10
[pwnable.kr] blackjack  (0) 2019.06.26
[pwnable.kr] coin1  (0) 2019.06.25
[pwnable.kr] shellshock  (0) 2019.02.27
[pwnable.kr] mistake  (0) 2019.02.24

+ Recent posts