ya se que este tema es viejo, pero como no encontre ninguna respuesta completa.. aca va..
- Tenes que saber algun lenguaje de scripting.. vos elegi el que mas te guste.. yo uso Python puede ser tambien Ruby o Perl
- Tenes que saber programar bien en C y C++ para saber lo que estas explotando...
- Tenes que saber programar o por lo menos entender x86 Assembly que es el mas comun...
- Tenes que conocer bien la arquitectura del SO Windows...
- Tenes que conocer bien como se dispone la memoria de los procesos...
- Las vulnerabilidades mas comunes: Buffer Overflows: Stack Based Overflow, Heap Overflow, Integer Overflow, SEH Based Overflow... Format String Vulnerabilities, etc..
- Tenes que saber sobre shellcode que es? como se arma? para que sirve? los tipos? todo..
- Algunas de las herramientas mas utilizadas: Immunity Debugger, OllyDbg, WinDbg, IDA Pro, Explorer Suite, Sysinternals.. etc..
- Tener profundos conocimientos sobre protocolos de red..
- Framework mas utilizado para desarrollar exploits es Metasploit Framework (Ruby)
- Ingenieria Inversa, formatos de archivo, binarios, criptografia..
- Como evadir protecciones para Buffer Overflows y demas...
no es poco, pero si le metes a full en 3 o 4 años ya empezas a ser pro

te recomiendo una vez que sabes todo esto, como buena practica buscar aplicaciones vulnerables viejas, y sus respectivos exploits... tratar de entenderlos, probarlos.. cambiarlos... etc..
tambien hay juegos para practicar.. (son avanzados)..
mis preferidos son: smashthestack.org y overthewire.org...
tambien esta pwn0.com ... que es una VPN donde hackers se conectan y se hackean uno a otro.. es divertido.. xD
Salu2 y espero que sea util para alguien esta info xD