ipwn
[pwnable.kr] blackjack 본문
이번 문제는 blackjack문제이다.
문제 이름 그대로 blackjack게임을 하면 되는 문제다.
저 글에 적힌 링크로 가면 nc 서버에서 실행되는 프로그램의 C 코드를 볼 수 있다.
(룰은 https://goo.gl/sy3C2G에서 볼 수 있다. 간단히 말하자면 딜러가 준 카드의 합이 21에 가까운 사람이 이기는 게임이다.)
뭔가 딱 봐도 베팅할 때 문제가 터질 것 같은 느낌이라 봤는데, 정말이었다.
보면 일단 베팅하는 값이 음수일 때를 검사하지 않고, 보유 자산보다 큰 값을 베팅 할 때는 처음에는 에러를 띄워준다.
하지만 그 이후 한 번 더 입력을 받을 때는 더 큰 값을 입력해도 그냥 베팅이 돼버린다.
즉, 정상적이지 않은 음수값을 입력해서 게임을 일부러 패배해서 돈을 매우 많이 벌 수 있고,
보유자산보다 더 큰 값을 입력해서 게임을 이겨 돈을 매우 많이 벌 수 있다는 것이다.
난 게임을 잘 할 자신이 없으므로 음수로 베팅을 한 뒤에 게임을 패배해보겠다.
nc서버에 처음 접속했을 때 화면이다.
Y를 눌렀을 때 화면인데, 게임을 나갈 필요는 없고 룰은 이미 알고 있으니 1번을 눌러 바로 게임을 시작하겠다.
게임을 처음 시작했을 때 화면인데, 카드가 주어지고 베팅할 금액을 입력하는 부분이 주어진다.
저 정도의 금액의 음수 값을 베팅해보았더니 에러없이 그냥 진행이 된다. 이제 게임을 패배하기만 하면
돈이 감소되는 것이 아니라 증가될 것이다.
S를 눌러 3이란 값에서 게임을 멈추고 패배해보았다. 그리고 다시 하기(Y)를 눌러서 돈이 올랐는지 확인해보자.
돈이 확실히 올랐고, 그 윗 부분에 flag가 출력 된 것을 알 수 있다.
'Write up > Pwnable.kr' 카테고리의 다른 글
[pwnable.kr] cmd1 (0) | 2018.01.04 |
---|---|
[pwnable.kr] lotto (0) | 2018.01.03 |
[pwnable.kr] random (0) | 2018.01.01 |
[pwnable.kr] passcode (0) | 2018.01.01 |
[pwnable.kr] flag (0) | 2017.12.31 |