본문 바로가기
시스템 해킹/pwnable.kr

[Pwnable.kr] lotto

by L3m0n S0ju 2021. 7. 28.


        // calculate lotto score 
        int match = 0, j = 0; 
        for(i=0; i<6; i++){ 
                for(j=0; j<6; j++){ 
                        if(lotto[i] == submit[j]){ 
                                match++; 
                        } 
                } 
        } 

        // win! 
        if(match == 6){ 
                system("/bin/cat flag"); 
        } 
        else{ 
                printf("bad luck...\n"); 
        } 

 


위 코드는 문제 코드에서 취약점이 되는 핵심 부분만 가져왔습니다. 문제점은 match가 6이되면 플래그가 출력됩니다. 예를 들어 랜덤 lotto 값이 123456이라고 가정하였을때 111111을 입력하면 반복문 36번 중에 6번이 조건을 통과하므로 match가 6이 됩니다. 따라서 lotto가 당첨될 확률은 매우 높습니다.

 

for(i=0; i<6; i++){

    lotto[i] = (lotto[i] % 45) + 1;         // 1 ~ 45

 

위 코드를 보면 lotto는 1에서 45까지의 값을 갖습니다. lotto는 unsigned char 형으로 문자열을 입력받으므로 lotto는 아스키 코드값 1~45 중에 하나가 됩니다. 따라서 아스키 코드 값 33번 !을 6번 입력하여 플래그가 나올 때 까지 입력하겠습니다. 저는 9번의 시도 끝에 플래그가 출력됬습니다.

 


플래그

'시스템 해킹 > pwnable.kr' 카테고리의 다른 글

[Pwnable.kr] blukat  (0) 2021.07.29
[Pwnable.kr] cmd2  (0) 2021.07.29
[Pwnable.kr] blackjack  (0) 2021.07.28
[Pwnable.kr] coin1  (0) 2021.07.28
[Pwnable.kr] shellshock  (0) 2021.07.27

댓글