본문 바로가기
Pwnable/Pwnable CTF

[Pwnable.kr] Toddler's Bottle_blackjack

by Y06 2021. 5. 11.

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

 

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

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

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

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

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

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

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

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

 

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

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

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

 

FLAG : YaY_I_AM_MILLIONNARE_LOL