sirve - python tutorial
¿Cuál de estos lenguajes de scripting es más apropiado para la prueba de pluma? (13)
Eso depende de la implementación; si se distribuirá, iré con Java, ya que lo conozco por su portabilidad. Si solo es para uso interno, o se usará en entornos semicontrolados, entonces escoja el que le resulte más cómodo de mantener y el que tenga la mejor perspectiva a largo plazo.
Ahora solo para responder la pregunta, me gustaría ir con Perl, pero soy un tipo de Linux, así que puede ser un poco parcial en esto.
Antes que nada, quiero evitar una guerra de llama en los idiomas. Los idiomas para elegir son Perl, Python y Ruby. Quiero mencionar que me siento cómodo con todos ellos, pero el problema es que no puedo enfocarme solo en uno.
Si, por ejemplo, veo un módulo Perl genial, tengo que probarlo. Si veo una buena aplicación de Python, tengo que saber cómo está hecha. Si veo un DSL de Ruby o un vudú de Ruby, me engancho con Ruby por un tiempo.
En este momento estoy trabajando como desarrollador de Java, pero planeo tomar CEH en el futuro cercano. Mi pregunta es: para la escritura de herramientas y el desarrollo de exploits, ¿qué idioma consideras el más apropiado?
De nuevo, no quiero causar una guerra de llama o ningún problema, solo quiero opiniones honestas de los guionistas que saben lo que están haciendo.
Una cosa más: tal vez algunos de ustedes preguntarán "¿Por qué conformarse con un idioma?". Para responder esto: me gustaría elegir un solo idioma, para tratar de dominarlo.
Hablando como CEH, primero aprenda el material de CEH. Esto lo expondrá a una variedad de herramientas y plataformas utilizadas para montar diversos tipos de ataques. Una vez que comprenda bien su objetivo, analice las capacidades de las herramientas y plataformas ya disponibles (el marco de metasploit antes mencionado es muy completo y robusto). ¿Cómo pueden ampliarse para satisfacer sus necesidades? Una vez que lo sepa, puede comparar las capacidades de los idiomas.
También recomendaría echar un vistazo a las herramientas disponibles en la distribución BackTrack .
Podría hacer una discusión para los tres :-)
Perl tiene todo CPAN, lo que le brinda una gran ventaja para unir la funcionalidad rápidamente. También tiene una bonita infraestructura de prueba flexible que significa que puede conectar muchos estilos de prueba automatizados diferentes (incluidas pruebas en otros idiomas) en el mismo marco.
Ruby es un lenguaje encantador para aprender, y le falta algo del pergamino en Perl 5. Si estás haciendo pruebas basadas en web, también tiene la biblioteca watir, que es muy útil (ver http://wtr.rubyforge.org/ )
Python: buen lenguaje y (si bien no es para mi preferencia personal) algunas personas encuentran la forma en que su estructura es más fácil de entender.
Cualquiera de ellos (y muchos otros) sería un gran lenguaje para aprender.
En lugar de mirar el idioma, miraría su entorno de trabajo. Siempre es más fácil aprender cosas si tienes otras personas alrededor que están haciendo cosas similares. Si tu gente actual dev / testing ya está enfocada en uno de los anteriores, yo iría por eso. De lo contrario, elija el que sea más aplicable / útil para su entorno de trabajo actual. Charle con el resto de su equipo y vea lo que piensan.
Si está buscando un lenguaje de scripting que funcione bien con Java, es posible que desee ver Groovy. Tiene la flexibilidad y la potencia de Perl (cierres, expresiones regulares integradas, matrices asociativas en cada esquina), pero puede acceder al código Java desde allí, de modo que tiene acceso a una gran cantidad de bibliotecas, y en particular al resto del sistema. re desarrollo
Todos ellos deberían ser suficientes para eso. A menos que necesite una biblioteca que solo esté disponible en un idioma, permitiría que las preferencias personales me guíen.
metasploit es un gran marco para las pruebas de penetración. Está escrito principalmente en Ruby, así que si conoces bien ese lenguaje, tal vez puedas conectarte allí. Sin embargo, para usar metasploit, no necesita conocer ningún idioma en absoluto.
[Descargo de responsabilidad: soy principalmente un programador de Perl, que puede colorear mi juicio. Sin embargo, no soy particularmente tribal, y creo que en esta pregunta en particular mi argumento es razonablemente objetivo.]
Perl fue diseñado para integrarse perfectamente en el paisaje de Unix, y es por eso que se siente tan extraño para las personas con un fondo principalmente OO (particularmente la escuela Java de OOP). Por esa razón, sin embargo, está increíblemente ampliamente instalado en máquinas con cualquier tipo de sistema operativo Unixoid, y muchas utilidades del sistema de proveedores están escritas en él. Además, por la misma razón, es probable que los servidores que no tienen ni Python ni Ruby instalados tengan Perl en ellos, lo que también hace que sea importante familiarizarse con ellos. Entonces, si su actividad de CEH incluye una gran actividad en Unix, de todos modos tendrá que estar familiarizado con Perl, y también puede enfocarse en ello.
Dicho eso, es en gran medida una cuestión de preferencia. No hay mucho para diferenciar los idiomas; su poder expresivo es virtualmente idéntico. Algunas cosas son un poco más fáciles en uno de los idiomas, algunas un poco más fáciles en otro.
En términos de bibliotecas, no sé cómo se comparan Ruby y Python, sé que Perl los tiene vencer por un margen. Por otra parte, a veces (especialmente cuando busca bibliotecas para necesidades comunes), el único efecto es que se ve inundado con opciones. Y si solo está buscando hacer cosas en algún área particular que esté bien cubierta por las bibliotecas para Python o Ruby, la masa de otras cosas en CPAN no es necesariamente una ventaja. Sin embargo, en áreas de nicho, importa, y nunca se sabe qué necesidad imprevista eventualmente tendrá (err, por definición).
Para el uso de una línea en la línea de comando, Python es una especie de no iniciador.
En términos de entorno de intérprete interactivo, Perl ... uhm ... bueno, puedes usar el depurador, que no es tan bueno, o puedes instalar uno desde CPAN, pero Perl no envía uno bueno.
Así que creo que Perl tiene una ventaja muy leve para sus necesidades en particular, pero solo justamente. Si eliges a Ruby, probablemente no estés mucho peor. Python podría molestarte un poco más notablemente, pero tampoco es una mala elección.
Bueno, ¿en qué clase de proezas estás pensando? Si quieres escribir algo que necesita algo de bajo nivel (ptrace, sockets crudos, etc.), entonces necesitarás aprender C. Pero se pueden usar tanto Perl como Python. La verdadera pregunta es: ¿cuál se adapta más a tu estilo?
En cuanto a la fabricación de herramientas, Perl tiene buenas capacidades de procesamiento de cadenas, está más cerca del sistema, tiene un buen soporte, pero en mi humilde opinión es muy confuso. Prefiero Python: es un lenguaje limpio, fácil de usar y fácil de aprender con un buen soporte (referencia completa de lenguaje / lib, libs de terceros, etc.). Y es (estrictamente en mi humilde opinión) genial.
Si estás interesado en CEH, echaría un vistazo a Gray Hat Python . Muestra algunas cosas que son bastante interesantes y relacionadas.
Dicho esto, cualquier idioma debería estar bien.
Mi preferencia personal por la creación de scripts es Python. Encuentro la sintaxis (sensible al espacio en blanco) para que las cosas sean más legibles. No soy un gran admirador de la sintaxis de Ruby.
Ruby es más amigable con los programadores funcionales con mejor soporte para ese estilo de programación.
Python es generalmente más rápido, pero esto está cambiando.
Estoy con tqbf. He trabajado con Python y Ruby. Actualmente estoy trabajando con JRuby. Tiene todo el poder de Ruby para acceder a las bibliotecas de Java, de modo que si hay algo que absolutamente necesita un lenguaje de bajo nivel para resolver, puede hacerlo con un lenguaje de alto nivel. Hasta ahora no he necesitado usar mucho Java, ya que Ruby ha tenido la capacidad de hacer todo lo que he necesitado como probador API.
Probablemente quiera Ruby, porque es el idioma nativo de Metasploit, que es el marco estándar de prueba de penetración de código abierto de facto. Ruby te va a dar:
- Bases de datos del framework, opcode y shellcode de Metasploit
- Encuadernaciones de Ruby lorcon de Metasploit para trabajos en bruto 802.11.
- Enlaces KARMA de Metasploit para la redirección 802.11 del lado del cliente.
- Libcurl y net / http para la escritura de herramientas web.
- EventMachine para proxy web y trabajo de fuzzing (o RFuzz, que amplía el bien conocido servidor web Mongrel).
- Metasma para la generación de shellcode
- Distorm para desmontaje x86.
- BinData para el formato de archivo binario fuzzing.
El segundo lugar aquí va a Python. Hay más bibliotecas pentesting disponibles en Python que en Ruby (pero no lo suficiente como para compensar Metasploit). Las herramientas comerciales también tienden a ser compatibles con Python; si usted es un cliente de Immunity CANVAS o CORE Impact, quiere Python. Python te da:
- Retorcido para el acceso a la red.
- PaiMei para el seguimiento de programas y la depuración programable.
- Soporte de CANVAS e Impacto.
- Bibliotecas Firewire de Dornseif para la depuración remota.
- Integración fácil con WinDbg para la depuración remota del Kernel de Windows (todavía no hay una buena respuesta en Ruby para la depuración del kernel, razón por la cual todavía uso ocasionalmente Python).
- Peach Fuzzer y Sully por fuzzing.
- SpikeProxy para pruebas de penetración web (también, OWASP Pantera ).
Como era de esperar, una gran cantidad de trabajo web utiliza herramientas de Java. La herramienta de pentest web estándar de facto es Burp Suite, que es una aplicación Java swing. Tanto Ruby como Python tienen variantes de Java que puedes utilizar para acceder a herramientas como esa. Además, tanto Ruby como Python ofrecen:
- Integración directa con libpcap para el trabajo de paquetes sin formato.
- Enlaces de OpenSSL para crypto.
- Extensiones IDA Pro.
- Interfaces de función extranjeras maduras (o al menos razonables) para el acceso API.
- WxWindows para el trabajo de UI, y apilamientos web decentes para UI web.
No se equivocará con ninguno de los lenguajes, aunque para el trabajo pentest principal, Metasploit probablemente supere todos los beneficios de Python, y en la actualidad, para el trabajo de inversión x86, las interfaces de depuración superiores de Python superan todos los beneficios de Ruby.
Además: es 2008. No son "lenguajes de scripting". Son lenguajes de programación. ;)
Si planeas utilizar Metasploit para probar las plumas y explotar el desarrollo, recomendaría ruby como se mencionó anteriormente. Metasploit está escrito en ruby y cualquier desarrollo de exploit / módulo que desees hacer requerirá ruby.
Si va a utilizar Immunity CANVAS para las pruebas de lápiz, entonces, por las mismas razones, recomendaría Python, ya que CANVAS está escrito en python. También se escriben en Python algunos frameworks de fuzzing como Peach y Sulley.
No recomendaría Perl ya que encontrará muy pocas herramientas / scripts / frameworks relacionados con pen test / fuzzing / exploits / ... en Perl.
Como tu pregunta es "escritura de herramientas y desarrollo de exploits", recomendaría Ruby si eliges Metasploit o Python si eliges CANVAS.
Espero que ayude :)