SMALL
[문제]
[풀이]
문제에 주어진 url에 접속해보면 c코드들이 출력된다.
https://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html
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 |