Hey~!~! C로 구현된 이 블랙잭 게임을 확인해봐!! (참고문헌)
내 플래그는 억만장자한테 줄거야..! 얼마나 많은 돈을 딸 수 있을까?? (돈만 있으면 다 되는 세상…..) 그리고 nc포트가 나와있다. 이것도 아까 coin1문제랑 비슷하게 코드를 짜서 푸는 문제인 것 같다. 일단 접속을 해보자.
예쁜 화면이 나온다~!~!
1 => 게임 시작 2 => 게임 룰 3 => 게임 나가기이다.
룰부터 확인해볼까?
흠…. 그냥 우리가 알고 있는 흔한 블랙잭 룰이다. 게임을 시작해보자.
게임 화면이다. 현재 500달러가 있다…. 이 게임을 이기기 위해서 그냥 무작정 하면 절대 억만장자가 될 수 없을 것 같았다. 따로 바이너리가 없어서 코드짜는 것 같았는데 아닌가보다. 아까 참고문헌도 같이 첨부해줬으니까 확인해보자.
https://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html
여기 확인해보기!!
이거 비슷한 문제를 풀었던 것 같은데 딜러가 가지고 있는 수가 아마 rand함수로 정해질 것이고 이를 예측해서 배팅을 하면 될 것이다. 그러면 그 부분을 확인해보자.
딱 randcard()함수가 있다. 여기부터 볼까?
int randcard() //Generates random card
{
srand((unsigned) time(NULL)); //Generates random seed for rand() function
random_card = rand()%4+1;
if(random_card==1)
{
clubcard();
l=k;
}
if(random_card==2)
{
diamondcard();
l=k;
}
if(random_card==3)
{
heartcard();
l=k;
}
if(random_card==4)
{
spadecard();
l=k;
}
return l;
} // End Function
내가 가진 카드는 seed가 time인 rand함수로 정해진다.
그리고 다른 함수를 쭉 보다가 betting함수를 봤더니….
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
이렇게 되어있다… 매우 취약한 것을 볼 수 있다. 1pt밖에 안되는 이유가 있었다.. 100m밖에서도 보이듯이 처음에 현재 잔고보다 더 많이 배팅하게 되면 if문에 걸리게 되는데 다시 배팅할 때에도 현재 금액보다 많이 배팅하는 것에 대한 필터링이 없다..!!! 이건 뭐 코드 짤 필요도 없겠는데..? 그냥 어마무시하게 많은 금액을 배팅하고 몇 번 하다가 얻어걸리면 풀릴 것 같다…
이렇게 몇 번 게임해주면
바로 플래그가 나온다… 어렵게 생각할 필요가 전혀 없는 엄청나게 매우 쉬운 문제였다.
플래그는 YaY_I_AM_A_MILLIONARE_LOL
'pwnable > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] cmd1 (0) | 2019.08.10 |
---|---|
[pwnable.kr] lotto (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 |