본문 바로가기

pwnable/pwnable.kr

[pwnable.kr Toddler's Bottle] blackjack write up

728x90

blackjack을 풀려고 보니 nc로 접속해서 해결하도록 되어있었습니다.

쓰여있는 주소로 일단 가서 소스코드부터 확인했습니다.

 

소스를 보고 취약점을 발견했습니다.

발견한 취약한 로직은 다음과 같습니다.

int betting() //Asks user amount to bet
{
 printf("\n\nEnter Bet: $");
 scanf("%d", &bet);
 
 if (bet > cash) //If player tries to bet more money than player has
 {
        printf("\nYou cannot bet more money than you have.");
        printf("\nEnter Bet: ");
        scanf("%d", &bet);
        return bet;
 }
 else return bet;
} // End Function
 

 

bet으로 배팅금액을 입력받는데 현재 가지고 있는 금액보다 많이 넣으면 if문으로 검사를 하고 다시 한번 입력을 받습니다. 그런데 여기서 추가로 입력받은 값은 검사를 거치지 않고 바로 return 해줍니다. 다른 함수들에서는 모두 while로 제대로 된 입력을 받을 때까지 반복을 해주었는데 여기서만 한 번만 검사하고 마치도록 되어있습니다.

 

딱히 익스플로잇을 작성하지않고도 금방 얻을 수 있을 것 같아서 게임을 했습니다. millionares에게만 flag를 주기로 되어있기 때문에 판을 시작할 때마다 베팅금액을 100만으로 주었고 10판도 안돼서 flag를 얻었습니다.

pwnable.kr 풀면서 어찌 보면 가장 쉬웠던 문제였습니다..

 

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90