Estoy interesado en crear y editar software, redes y pruebas de penetración. ¿Qué lenguajes de programación debo aprender?

Aprenda la arquitectura de von Neumann, aprenda sobre códigos de operación, memoria, marcos de funciones C, ensamblador.
Una vez que pueda escribir programas de ensamblador simples en X86, continúe y aprenda C lo mejor posible.
Aprende a jugar con punteros de cualquier manera posible.
Ahora aprenda el compilador de C, aprenda cómo funciona lo que significa ctor, dtor. Aprenda todos los conceptos básicos de cómo el compilador de C convierte el código fuente en un binario.
Probablemente quiera hacer esto para Linux primero, luego para que Windows cubra el sistema operativo principal. Es bastante similar de todos modos.

En ese camino probablemente aprendiste mucho sobre las bibliotecas estándar, por lo que no las menciono.

Entonces, ahora comprende cómo se programan los procesadores, cómo funciona un binario compilado internamente.

Ahora es el momento de aprender sobre cifrado, hash, algoritmos.
Tal vez no sea demasiado profundo, dependiendo de cuán grande quieras ser, no soy un fanático de las matemáticas, así que dejé de poder modificar un código protegido MD5sum sin cambiar realmente su suma MD5.
Si llega tan lejos, tiene una buena comprensión del hash, incluso si MD5 se está desactualizando lentamente para tales operaciones (todavía se usa demasiado, cualquier niño puede romperlo).
Por supuesto, espero que entiendas el cifrado básico de asym / sym, su implementación, SSL también.
La mejor manera de entenderlos, al menos en lo básico, es implementarlos.

Debe comprender el kernel de Linux, cómo está construido y al menos un conocimiento mínimo de la programación del kernelspace. Esa es una, aunque no hay mucha información adecuada en la red. De hecho, compré libros para el núcleo.

Las redes no son tan difíciles, querrás saber cómo funcionan los enrutadores.
Tal vez aprenda el conocimiento básico de CCNA, que también cubre el modelo OSI.
Aprenda sobre la pila TCP / IP, escriba algunos protocolos binarios de bajo nivel en C para comprender cómo funcionan los protocolos.
Aprenda a establecer una conexión con un servicio típico (https, ntp, etc.).
Aprenda netfilter / iptables, cómo usarlo y cómo escribir pequeños módulos propios para él. Bastante simple en comparación y muy divertido.

Aprenda cómo funcionan ARP, ICMP, TCP, UDP, RIP, BGP, HTTP y HTTP, POP3, SMTP y todos los demás protocolos esenciales. Mira su apretón de manos, todo es bastante simple y similar de todos modos, ya que dominaste el modelo OSI y la pila tcp / ip.

Ahora que conoce los conceptos básicos, puede comenzar a explotar.
Encontrarás algunos tutoriales, recuerdo algo llamado “destrozar la pila por Alpeh” o algo similar de mi tiempo.
Una vez que haya entendido los diferentes trucos, todo es simple para usted, podrá encontrar formas propias.

Una vez que sea capaz de escribir exploits simples para el montón, desborde de búfer de pila y desbordamientos de cadena de formato (son divertidos, lamentablemente raros desde el bombo) puede entrenarse descargando demonios obsoletos.
Hay innumerables errores en los programas que se han solucionado, solo descarga un demonio donde sabes que fue voluble y explotado.
Intenta encontrar el error (puedes hacer trampa con los registros de cambios) y explótalo tú mismo.

Una vez que domine esto, ya estará bastante lejos, ahora se trata de aprender a sortear los sistemas de protección.
Hay muchas formas diferentes de proteger un binario para que realmente no se inyecte con shellcode.
Algunos protegen el marco / memoria de la función agregando bytes de seguridad adicionales (protección canaria), algunos protegen áreas de memoria completa para no permitir la ejecución de la función.
Todos se pueden eludir, pero necesitará algunos negocios complicados, tendrá muchas más limitaciones en las áreas de memoria en las que puede agregar shellcode y en los métodos utilizados para obtener shellcode allí.

Hace 10 años hubo “juegos de guerra de codificación”, no estoy seguro de si algunos todavía están allí, pero fue divertido hacerlo una vez que sabes cómo hacerlo.
Es un desafío de código explotar su camino hacia un servidor y aumentar los privilegios en su camino hacia arriba. Al igual que los niveles en un juego normal.
Ya no conozco ningún nombre, la última vez que revisé la mayoría se habían ido.

Es una ruta larga y solo puedes ir por esa ruta si te encanta.
Es mucho trabajo, necesitas ser joven 🙂

Idiomas que tal vez quieras aprender como comienzo:
ASM, C, C ++, Bash, Perl, PHP
Algunas herramientas para dominar:
gdb, tcpdump, todas las herramientas predeterminadas (strace, ltrace, netstat, iptables, etc.)
En Windows es un poco más doloroso, no tan intuitivo y rápido.

Hace casi una década hice la misma pregunta.

Encontré muchas respuestas.

Los perseguí …

La mayoría no era suficiente, así que busqué más profundo.

El primer paso es buscar y luego seguir las recomendaciones más congruentes.

Mi primer idioma fue Java.

¿Era bueno que quedara por ver lo que quería?

Aprendí programación básica y luego programación orientada a objetos. En el camino descubrí Linux. Luego cambié de especialización a CSC. Aprendí sobre servidores, HTTP y LAMP. Aprendo: MySQL, PHP, DHTML, Python. Tenga en cuenta que dije aprender, continuamente hago esto, realmente no se detiene, por lo que nunca es en tiempo pasado. Diez años después estoy escribiendo esta publicación.

Esto es lo que he aprendido hasta ahora.

Para ejecutar algunas pruebas, solo necesita conocer algunas herramientas. Esto realmente no agrega valor a un servicio que puede ofrecer. Si aprende cómo las piezas realmente van juntas y funcionan, eso es un valor.

En cuanto a qué idioma aprender … la mayoría de los lenguajes orientados a objetos pueden hacer algunas cosas impresionantes en las manos correctas.

Existen algunos aspectos destacados: aprenda cómo funciona la pila AMP y cómo se comunican los datos a través de una red.

Recomiendo Python para un primer idioma debido a la gran comunidad, sintaxis fácil, montañas de materiales de referencia y muchas bibliotecas geniales. No faltan libros sobre cómo hacer lo que le gustaría con Python. Manténgase alejado de las librerías de uso general, en su lugar, encuentre algo especializado como O’reilly o (mi favorito) Packtpub. Lee mucho y programa más que mucho. Comience a usar Linux, inmediatamente, cada computadora que tengo es Linux o tiene una caja virtual con Linux. Obtenga algo como Ubuntu, luego Kali será más tarde.

Hoy, mis objetivos han cambiado, pruebo mis aplicaciones como parte de mi proceso de desarrollo. No ofrezco esos servicios al público en este momento.

Una última cosa, no dejes de aprender.

Eso es … una especie de dos, o posiblemente tres, profesiones diferentes.

Python es un buen candidato, es un lenguaje muy utilitario y multipropósito. Perl podría considerarse libremente predecesor de Python. Además, scripts de shell y Linux en general. Kali Linux es una distribución de Linux creada específicamente para pruebas de lápiz.

¿Puedes probar WaveMaker? Puede ayudarlo a crear y editar aplicaciones sin la necesidad de ninguna codificación o prueba. ¡Hoy en día con el advenimiento de las plataformas LowCode, no es necesario ser un programador para crear aplicaciones!

Creo que Python cubrirá muchos de esos temas. Empezaría allí si eres un principiante. Muchas herramientas para pentesting están escritas en Python.