Wargame/pwnable.kr

[Pwnable.kr] blackjack

핏디 2021. 8. 12. 16:07
SMALL

[문제]

 


[풀이]

문제에 주어진 url에 접속해보면 c코드들이 출력된다.

https://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html

 

Simple Blackjack Program

Replies: 10 Last Post: 09-09-2004, 05:48 AM

cboard.cprogramming.com

 

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

주요 코드만 살펴보면 betting 함수를 통해 취약점을 찾을 수 있다.

 

가장 먼저 scanf를 통해 betting 금액을 입력 받는데, 이 금액이 보유 금액 보다 크다면 다시 입력을 받는다.

그런 후 return bet으로 betting 금액을 return 하게 되는데 여기서 금액에 대한 검증을 실시하지 않아 취약점이 발생한다.

즉, 2번째 입력 받는 곳에서 cash보다 큰 값을 입력하더라도 그 betting 값을 그대로 사용한다는 것!

 

flag를 1000000 이상일 때 출력한다고 하였으니 betting 입력 값에 1000000 이상의 값을 입력하고 게임을 진행하면 flag를 획득할 수 있다.

처음 betting 값에 cash 이상의 값을 입력해 다시 한 번 betting 값을 입력 받도록 하여 betting 값에 1000000을 입력하도록 한다.

입력 후 게임을 진행하면 게임에서 이겼다는 문구가 출력되면서 다시 play 할 것 인지 물어보는 메시지가 출력된다.

여기서 y를 입력하면 flag를 획득할 수 있다.

 

LIST

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

[Pwnable.kr] lotto  (0) 2021.08.12
[Pwnable.kr] leg  (0) 2021.08.04
[Pwnable.kr] input2  (0) 2021.07.22
[Pwnable.kr] random  (0) 2021.07.22
[Pwnable.kr] passcode  (0) 2021.06.03