cgy12306
[pwnable.kr] blackjack 본문
[blackjack]
http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html
해당 주소로가면 blackjack에 대한 코드가 있다.
블랙잭은 확률게임이기 때문에 18 이상이 되면 stay를 하고, 딜러가 버스트 되는 것을 기다리는 코드를 짰다.
remote('pwnable.kr', 9009)
#context.log_level = 'debug'
r.recv()
r.sendline('Y')
r.recv()
r.sendline('1')
while True:
print r.recvuntil('Cash: $')
cash = int(r.recvline())
r.recvuntil('Your Total is ')
mycard = int(r.recvline())
r.recvuntil('Enter Bet: $')
print cash
r.sendline('500')
r.recv()
r.sendline('H')
while mycard <21:
r.recvuntil('Your Total is ')
mycard = int(r.recvline())
r.recvuntil('The Dealer Has a Total of ')
dealer = int (r.recvline())
if dealer >21:
r.recv()
r.sendline('Y')
break
if mycard == 21:
r.recv()
r.sendline('Y')
break
if 'Please Enter Y for Yes or N for No' in r.recv():
r.sendline('Y')
if mycard < 18:
r.sendline('H')
else:
r.sendline('S')
r.recv()
r.sendline('Y')
break
r.recv()
r.sendline('Y')
r.interactive()
1000000이 넘어가는 순간 플래그가 뜬다.
다른풀이
취약한 코드만 보자면
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
베팅을 할 때 내가 소유한 돈보다 많은 금액을 베팅하게 되면 다시 베팅을 하게 되는데 그 값은 검사를 하지 않고 그대로 반환 한다.
'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] cmd1 (0) | 2020.01.27 |
---|---|
[pwnable.kr] lotto (0) | 2020.01.27 |
[pwnable.kr ] coin1 (0) | 2020.01.26 |
[pwnable.kr] input (0) | 2020.01.26 |
[pwnable.kr] random (0) | 2020.01.26 |
Comments