- Malloc a chunk large enough to get malloc to call mmap and give you a chunk aligned to libc
- Overwrite free hook to system using out of bounds relative write
- Call system("ed") to bypass hexadecimal char only filter
- Escape ed to shell by doing !/bin/sh
Detailed writeup at the link