Pwnable/Pwnable CTF

[Pwnable.kr] Toddler's Bottle_blackjack

Y06 2021. 5. 11. 23:30

문제를 들어가면 뜨는 창이다.

 

코드창에 들어갔다가 너무 길어서 서버부터 접속하는 것으로 하였다.

nc 명령어를 통해 접속한다.

1을 누르면 게임 시작, 2는 도움말, 3은 게임 종료이다.

현재 잔고는 $500인데 넘는 금액을 입력했더니 아래 나오는 말이 반복된다.

입력한 금액과는 다르게 출력이 되었고 플래그가 반복된다.

코드를 살펴보니 위와 같은 함수가 보였다. 베팅에 관여하는 함수인데, if(bet>cash)에서 if문이 반복되지 않고 한 번만 쓰이는 것이 취약점인 것을 알 수 있다. 입력한 베팅금과 잔고 비교를 한 번밖에 안 하는게 취약점인 것이다.

잘못된 베팅값을 통해 다시 베팅 값을 받을 때 예외처리를 하지 않는다.

따라서, 두 번째 입력을 받을 때 임의의 betting 값 설정이 가능하다.

 

flag를 얻기 위해서 100만 달러 이상의 부자가 되어야 하니 100만 달러를 베팅한 후 게임에서 이기면 된다.

betting 함수를 이용해서 $100000를 베팅하였다.

딜러와의 게임에서 이기면 FLAG를 얻을 수 있다.

 

FLAG : YaY_I_AM_MILLIONNARE_LOL