DongDD's IT

[pwnable.kr] blackjack 본문

Wargame/pwnable.kr

[pwnable.kr] blackjack

DongDD 2018. 6. 28. 14:45

[pwnable.kr] blackjack



Problem



C로 만든 blackjack 게임을 검사(확인) 해보라고 되어있었다.

이번 문제도 저번 문제와 마찬가지로 nc로 접속할 수 있는 port가 있었다.

소스 코드가 있는 주소가 주어져있었고 따로 실행할 수 있는 프로그램은 없었다.

100만장자가 되면 flag를 준다고 되어있었고 그만큼의 돈을 얻을 수 있냐고 되어있었다.


Source Code : http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html

소스 코드가 너무 긴 관계로 소스 코드가 있는 주소를 적어놓았다.



nc로 접속해보니 다음과 같은 화면이 나왔고 Y를 입력하게 되면 1,2,3을 입력할 수 있게 되어있었다.

1번은 게임을 시작하는 명령이였고 2번은 도움말, 3번은 종료였다.



게임을 시작하니 500$만큼의 돈이 있고 이것을 베팅해 일반적인 blackjack을 하는 프로그램이였다.

이 500$를 1000000$ 이상으로 만들어야 flag를 획득할 수 있는 것 같았다.



Solution


500$를 반복해 1000000$ 이상으로 만들기에는 너무 오래 걸리고 확실하지 않은 방법이였다.

소스 코드를 분석해 취약점을 찾았고 이를 통해 쉽게 해결할 수 있었다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
cs


주어진 소스 코드에서 취약점이 존재하는 부분이다.

소스 코드가 너무 길어서 찾는데 어려움이 있었지만 도움말이나 종료에서는 취약점이 존재하지 않을 것 같아 게임에 관련된 함수들을 분석하다가 찾게 되었다.

먼저 cash변수는 현재 사용자가 가지고 있는 돈으로 초기에는 500으로 설정되어있다.

게임에 걸 돈을 입력받고 입력한 값이 가지고 있는 돈보다 크다면 다시 입력을 받고 아니라면 입력한 값을 return 해준다.

하지만 다시 입력받는 과정에서는 가지고 있는 돈에 상관없이 입력한 값이 바로 return 되는 것을 볼 수 있다.

입력한 값에 대한 검증을 추가로 하지 않아 가지고 있는 돈과 별개로 입력한 값이 bet로 return되게 된다.

즉, 처음에는 가지고 있는 돈(500)보다 큰 값을 입력해 if문으로 들어가고 그 이후에 1000000 이상의 값을 입력해 게임에 돈을 걸 수 있다.


필요한 검증이 없는 이 부분을 통해 cash를 1000000$ 이상으로 만들고 게임을 지속하니 flag를 획득할 수 있었다.







**************     Answer & Flag     **************





처음 입력 값 검증 때, cash(500)보다 큰 값을 입력해 if문으로 들어갔고 if문 안에서는 추가 검증이 없기 때문에 1000000을 입력해 게임을 진행해 백만장자가 되어 flag를 획득할 수 있었다.


Flag : YaY_I_AM_A_MILLIONARE_LOL

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

[pwnable.kr] cmd1  (0) 2018.07.21
[pwnable.kr] lotto  (0) 2018.07.14
[pwnable.kr] coin1  (0) 2018.06.26
[pwnable.kr] shellshock  (0) 2018.06.18
[pwnable.kr] mistake  (0) 2018.06.14
Comments