1. Introducción
2. Programación
2.1. ¿Qué es la programación?
2.2. Pseudocódigo
2.3. Estructuras de control
2.3.1. If-Then-Else
2.3.2. Bucles While/Until
2.3.3. Bucles for
2.4. Más conceptos de programación fundamentales
2.4.1. Variables
2.4.2. Operadores aritméticos
2.4.3. Operadores de comparación
2.4.4. Funciones
2.5. Manos a la obra
2.5.1. Una visión más global
2.5.2. El procesador x86
2.5.3. Lenguaje ensamblador
2.6. Regreso a lo básico
2.6.1. Cadenas
2.6.2. Con signo, sin signo y corto
2.6.3. Punteros
2.6.4. Cadenas de formato
2.6.5. Conversión de tipo
2.6.6. Argumentos de línea de comandos
2.6.7. Alcance de las variables
2.7. Segmentación de la memoria
2.7.1. Segmento de memoria en C
2.7.2. Uso del montón
2.7.3. Comprobación de errores para malloc()
2.8. Ampliando los conocimientos básicos
2.8.1. Acceso a archivos
2.8.2. Permisos de archivo
2.8.3. Identidades de usuario
2.8.4. Estructuras
2.8.5. Punteros de función
2.8.6. Números pseudoaleatorios
2.8.7. Un juego de azar
3. Exploits
3.1. Técnicas de exploit generalizadas
3.2. Desbordamiento de búfer
3.2.1. Vulnerabilidades de desbordamiento de búfer basado en la pila
3.3. Experimentos con BASH
3.3.1. Usar el entorno
3.4. Desbordamientos en otros segmentos
3.4.1. Un desbordamiento de montón básico
3.4.2. Desbordamiento de punteros de función
3.5. Cadenas de formato
3.5.1. Parámetros de formato
3.5.2. La vulnerabilidad de cadena de formato
3.5.3. Leer de direcciones de memoria arbitrarias
3.5.4. Escribir en direcciones de memoria arbitrarias
3.5.5. Acceso directo a parámetros
3.5.6. Usar escrituras de palabra corta
3.5.7. Desvíos con .dtors
3.5.8. Otra vulnerabilidad de notesearch
3.5.9. Sobrescribir la tabla de desplazamiento global
4. Redes
4.1. Modelo OSI
4.2. Sockets
4.2.1. Funciones de socket
4.2.2. Direcciones de socket
4.2.3. Orden de bytes de red
4.2.4. Conversión de dirección de Internet
4.2.5. Un simple ejemplo de servidor
4.2.6. Ejemplo de cliente Web
4.2.7. Un servidor Tinyweb
4.3. Recorriendo las capas inferiores
4.3.1. Capa de enlace de datos
4.3.2. Capa de red
4.3.3. Capa de transporte
4.4. Rastreo de red
4.4.1. Rastreador de sockets puros
4.4.2. Rastreador libpcap
4.4.3. Decodificar las capas
4.4.4. Rastreo activo
4.5. Denegación de servicio
4.5.1. Inundación SYN
4.5.2. El ping de la muerte
4.5.3. Lágrima
4.5.4. Inundación de ping
4.5.5. Ataques de amplificación
4.5.6. Inundación DoS distribuida
4.6. Secuestro de TCP/IP
4.6.1. Secuestro RST
4.6.2. Secuestro continuado
4.7. Rastreo de puertos
4.7.1. Rastreo sigiloso SYN
4.7.2. Rastreos FIN, X-mas y Null
4.7.3. Rastreo con señuelos
4.7.4. Rastreo pasivo
4.7.5. Defensa proactiva (shroud)
4.8. Sal y haz hacking
4.8.1. Análisis con GDB
4.8.2. "Casi" sólo sirve para las granadas de mano
4.8.3. Shellcode de vinculación a puerto
5. Shellcode
5.1. Ensamblado vs. C
5.1.1. Llamadas a sistema Linux en ensamblador
5.2. La ruta a la shellcode
5.2.1. Instrucciones de ensamblador usando la pila
5.2.2. Investigación con GDB
5.2.3. Eliminar bytes nulos
5.3. Shellcode creador de intérpretes de comandos
5.3.1. Cuestión de privilegios
5.3.2. Y todavía más pequeña
5.4. Shellcode de vinculación a puerto
5.4.1. Duplicación de descriptores de archivo estándar
5.4.2. Bifurcar estructuras de control
5.5. Shellcode de reconexión
6. Contramedidas
6.1. Contramedidas que detectan
6.2. Demonios del sistema
6.2.1. Curso rápido sobre señales
6.2.2. Demonio tinyweb
6.3. Herramientas de profesión
6.3.1. Herramienta de exploit para tinywebd
6.4. Archivos de registro
6.4.1. Perderse en la multitud
6.5. Pasar por alto lo obvio
6.5.1. Paso a paso
6.5.2. Volviendo a unirlo todo
6.5.3. Trabajadores infantiles
6.6. Camuflaje avanzado
6.6.1. Falsificar la dirección IP del registro
6.6.2. Exploit sin registro
6.7. Toda la infraestructura
6.7.1. Reutilización del socket
6.8. Contrabando de carga útil
6.8.1. Codificación de cadenas
6.8.2. Cómo ocultar un sled
6.9. Restricciones de búfer
6.9.1. Shellcode ASCII que se puede mostrar y polimórfica
6.10. Endurecer las contramedidas
6.11. Pila no ejecutable
6.11.1. ret2libc
6.11.2. Regreso a system()
6.12. Espacio en pila aleatorio
6.12.1. Investigaciones con BASH y GDB
6.12.2. Rebotando en linux-gate
6.12.3. Conocimiento aplicado
6.12.4. Un primer intento
6.12.5. Probando suerte
7. Criptología
7.1. Teoría de la información
7.1.1. Seguridad incondicional
7.1.2. Libretas de un solo uso
7.1.3. Criptografía cuántica
7.1.4. Seguridad de computacional
7.2. Tiempo de ejecución algorítmico
7.2.1. Notación asintótica
7.3. Codificación simétrica
7.3.1. Algoritmo de búsqueda cuántica de Lov Grover
7.4. Codificación asimétrica
7.4.1. RSA
7.4.2. Algoritmo de factorización cuántica de Peter Shor
7.5. Cifrados híbridos
7.5.1. Ataque de intermediario
7.5.2. Huellas dactilares de equipo diferentes para el protocolo SSH
7.5.3. Huellas difusas
7.6. Desencriptación de contraseñas
7.6.1. Ataques de diccionario
7.6.2. Ataques por fuerza bruta
7.6.3. Tabla de búsqueda de resumen codificado
7.6.4. Matriz de probabilidad de contraseña
7.7. Codificación inalámbrica 802.11b
7.7.1. Privacidad equivalente a cableado
7.7.2. Cifrado de flujo RC4
7.8. Ataques WEP
7.8.1. Ataques por fuerza bruta desconectados
7.8.2. Reutilización del flujo de claves
7.8.3. Tablas de diccionario de decodificación basadas en vectores
7.8.4. Redirección de IP
7.8.5. Ataque de Fluhrer, Mantin y Shamir
8. Conclusión
8.1. Referencias
8.2. Código
Apéndice. Conten alfabético