¿Qué define a un lenguaje de programación como útil para piratear?

32

Sé que los lenguajes de script ( Perl , Ruby , Python , javascript e incluso Lua !!!) son los más adecuados para pruebas de intrusión y piratería.

Mi pregunta es: ¿Qué es lo que hace que esos idiomas sean adecuados? Por lo que sé, son más lentos que otros idiomas y operan a un nivel de abstracción más alto, lo que significa que están muy lejos de el hardware La única razón por la que podría pensar es debido a sus capacidades avanzadas de manipulación de cadenas, pero creo que otros idiomas tienen tales capacidades.

    
pregunta NlightNFotis 21.09.2012 - 09:02
fuente

8 respuestas

30

Los idiomas son útiles para hacer cosas . Para qué tipo de cosas es adecuado depende completamente del tipo de lenguaje, los marcos de trabajo disponibles, los sistemas operativos que tienen los intérpretes / compiladores, etc.

Veamos los que has mencionado:

  • Perl
    • lenguaje de scripting
    • propósito general
    • Disponible en la mayoría de los sistemas operativos * nix desde los años 90.
    • Ideal para hacks rápidos y scripts cortos.
  • Ruby
    • lenguaje de scripting
    • propósito general
    • multiplataforma
    • orientado a objetos
    • Reflexivo (puede ver su propia estructura y código)
    • Bueno para marcos dinámicos
  • Python
    • lenguaje de scripting
    • propósito general
    • multiplataforma
    • Diseñado para un código fuente claro y legible
    • Gran marco de bibliotecas
  • JavaScript
    • lenguaje de scripting
    • basado en la web
    • multiplataforma (disponible en todos los principales navegadores)

Entonces, ¿qué hace que estos sean particularmente buenos para pentesting? Bueno, la mayoría de los intentos consiste en escribir herramientas de eliminación rápida para realizar un trabajo específico para una prueba específica. Escribir una herramienta de este tipo en C o C ++ cada vez que quiera hacer un trabajo rápido es engorroso y requiere mucho tiempo. Además, tienden a producir binarios o fuentes específicos de la plataforma que requieren compilación específica de la plataforma, en lugar de scripts multiplataforma que simplemente ejecutan . Los lenguajes de scripting le dan la flexibilidad para producir tales herramientas de forma rápida y sencilla.

Por ejemplo, Ruby y Python son populares para tareas más complejas porque tienen bibliotecas integrales, mientras que Perl es popular para hacks rápidos de procesamiento de datos. JavaScript se utiliza comúnmente como un lenguaje simple basado en navegador al que todos tienen acceso. Otros lenguajes, como C, tienden a usarse para tareas de más bajo nivel que se relacionan con el sistema operativo.

Ahora, el otro lado de la moneda son los idiomas utilizados como carga útil. Aquí es donde la línea se vuelve borrosa, porque los requisitos son muy variados. Para atacar a las cajas de Windows, cualquier carga útil que no tenga dependencias fuera de lo que proporciona el sistema operativo es útil. Esto podría ser C, C ++, VBScript, x86 asm, C # / VB.NET (.NET 2.0 está en la mayoría de las máquinas en estos días), etc. Para atacar cajas de Linux puede usar C, C ++, scripts de bash o Perl. Java también es común para ataques multiplataforma.

Al final del día, elija el idioma que usted encuentre mejor para el trabajo.

    
respondido por el Polynomial 21.09.2012 - 10:14
fuente
16

Aquí hay una gran respuesta que encontré en un pregunta de desbordamiento de pila de contexto similar por @tqbf: (Copié esta respuesta aquí, porque creo que da razones válidas por las cuales pueden ser preferidas, por lo que podría ser útil para futuros lectores)

  

Probablemente quieras a Ruby, porque es el idioma nativo de   Metasploit, que es la penetración de código abierto estándar de facto.   marco de pruebas. Ruby te va a dar:

     
  • Framework de Metasploit , código de operación y bases de datos de código de shell

  •   
  • Ruby lorcon de Metasploit para materias primas   Trabajo 802.11

  •   
  • Enlaces KARMA de Metasploit para redirección del lado del cliente 802.11

  •   
  • Libcurl y net / http para la redacción de herramientas web

  •   
  • EventMachine para proxy web y trabajo de confusión (o RFuzz, que amplía el conocido Mongrel   servidor web)

  •   
  • Metasm para la generación de código de shell

  •   
  • Distorm para el desmontaje x86

  •   
  • BinData   para el formato de archivo binario fuzzing.

  •   

El segundo lugar aquí va a Python. Hay más bibliotecas pentesting.   disponible en Python que en Ruby (pero no lo suficiente para compensar   Metasploit). Las herramientas comerciales tienden a ser compatibles con Python también --- si   eres un cliente de Immunity CANVAS o CORE Impact, quieres Python.   Python te da:

     
  • Twisted para acceso a la red

  •   
  • PaiMei para el seguimiento del programa y la depuración programable

  •   
  • CANVAS y soporte de impacto

  •   
  • Dornseif's   bibliotecas firewire para la depuración remota

  •   
  • Integración lista con WinDbg para la depuración remota del kernel de Windows (todavía no hay una buena respuesta)   Ruby para la depuración del kernel, por lo que todavía uso ocasionalmente   Pitón).

  •   
  • Peach Fuzzer y Sully para 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. El de facto   La herramienta estándar de web pentest es Burp Suite, que es una aplicación Java swing.   Tanto Ruby como Python tienen variantes de Java que puedes usar para obtener acceso a   herramientas como esa Además, tanto Ruby como Python ofrecen:

     
  • Integración directa con libpcap para el trabajo de paquetes sin procesar

  •   
  • Enlaces OpenSSL para crypto

  •   
  • Extensiones IDA Pro

  •   
  • Interfaces de funciones extranjeras C maduras (o al menos razonables) para acceso a API

  •   
  • WxWindows para trabajo de IU y pilas web decentes para UI web

  •   

No vas a ir mal con ninguno de los dos idiomas, aunque para   El trabajo pentest principal, Metasploit probablemente elimina todos los Python   Beneficios, y en la actualidad, para el trabajo de inversión de x86, Python's superior   Las interfaces de depuración superan todos los beneficios de Ruby.

     

También: es 2008. No son "lenguajes de script". Ellos son   lenguajes de programación. ;)

    
respondido por el NlightNFotis 23.05.2017 - 14:40
fuente
7

Las bibliotecas, la hora de escribir código, la compatibilidad multiplataforma son claves aquí. Descubrí que al usar Python, pude encontrar vulnerabilidades de prueba de concepto en muy poco tiempo con un mínimo de líneas de código. Esto es posible debido a la extensa biblioteca estándar y las bibliotecas adicionales que también puede descargar. Creo que esa es la mayor fortaleza de Python para ser utilizada para hacer pentesting y hacking.

Ex. necesitas una cadena de 1000 caracteres / 1000 bytes de largo.

En python:

print "A"*1000

En C:

for(i=0;i<1000;i++)printf("A");'

(Aparte de todo lo que incluye mumbo jumbo y compilarlo)

Eso es solo un ejemplo simple. Pero como puede ver, el tiempo necesario para una tarea tan trivial es mucho más simple en Python.

La diferencia se puede mejorar aún más cuando desea enviar solicitudes http, etc. desde su código. Con urllib , httplib , etc. para python, puede hacerlo en cuestión de 2 líneas de código.

    
respondido por el sudhacker 21.09.2012 - 14:58
fuente
6

No tengo ningún conocimiento en estos campos, pero todos los lenguajes de programación mencionados permiten una programación rápida, es decir, se podría probar un número mucho mayor de ideas diferentes en un marco de tiempo dado que con el tiempo de ejecución más eficiente pero ineficiente para la programación ( y depuración) lenguajes de programación como C, etc. Eso podría ser un punto.

    
respondido por el Mok-Kong Shen 21.09.2012 - 10:07
fuente
6

Creo que lo que define un lenguaje adecuado para piratear es:

  1. Uso del idioma.
  2. Soporte multiplataforma.

Tomemos un ejemplo de Java. Se ejecuta en todas las plataformas y se instala en muchos sistemas. Esto garantiza una probabilidad bastante alta de que el código de los piratas informáticos pueda ejecutarse y que el idioma esté instalado en el sistema al que se dirige.

La comunidad de un lenguaje de programación muy usado, también ocasionalmente encuentra vulnerabilidades en el lenguaje, lo que permite a los piratas informáticos atacar esa vulnerabilidad, y tienen un cambio muy alto de golpearlo, debido a la alta distribución del lenguaje.

    
respondido por el Kao 21.09.2012 - 10:05
fuente
6

Algunas buenas respuestas ya están aquí, pero voy a proporcionar otra perspectiva. Una de las razones por las que los lenguajes de scripting tienden a usarse para piratear es que optimizan la velocidad (y la facilidad) del desarrollo, lo que probablemente sea un factor clave.

Como ejemplo, para las secuencias de comandos de pruebas de penetración utilizo ruby. Tiene una serie de buenas bibliotecas para cosas como HTTP, lo que significa que no tengo que preocuparme por los detalles de bajo nivel y escribir un script rápido es muy rápido, ya que se requiere poca "formalidad" en un script ruby (por ejemplo, declaraciones de métodos / variables) en comparación con lenguajes como Java.

Una de las desventajas de estos lenguajes es que son más lentos en tiempo de ejecución, pero para muchos trabajos de piratería no es un problema, la velocidad de desarrollo es más importante.

    
respondido por el Rоry McCune 21.09.2012 - 11:27
fuente
3

Mis dos centavos:

Ejecuta (u otra ) primero !!

¡La rapidez del idioma no importa cuando estás en plena lluvia de ideas !

Uno de los lenguajes más útiles y poderosos para este tipo de operación parece haber sido olvidado en su pregunta.

Me gustaría hablar sobre como entorno de hacking . Sí, toma su nombre de la shell who puede contener muchas otras cosas.

En Un * x, principalmente has iniciado sesión en un consola, para poder ejecutar otras herramientas.

Si es uno de los idiomas más lentos:

$ time for ((i=1000000;i--;));do :;done
real    0m4.755s
user    0m4.628s
sys     0m0.124s

time perl -e 'map{1}(0..1000000)' 
real    0m0.199s
user    0m0.112s
sys     0m0.060s

$ time python -c 'for a in range(1000000): 1==1
real    0m0.119s
user    0m0.096s
sys     0m0.020s

¡Sí! Más de 4 segundos para un bucle de 1 millón de pasos es muy lento, pero una vez que haya iniciado sesión en una consola de línea de comandos ...

Principal ventaja a considerar:

  • historial Puede guardar / copiar su historial para poder consultarlos más tarde o crear un script
  • log Al usar herramientas como script y scriptreplay , podría mantener un seguimiento muy preciso de todo su trabajo
  • Cut'n paste Al usar x-terminal o herramientas como screen , puedes jugar con tareas paralelas, en una consola separada, y compartir entradas / salidas entre todas ellas.
  • fifo fusionando herramientas simples pero potentes como nc | sed | ssh | python ...

Muestra práctica

puede comenzar desde:

$ mkdir /tmp/hackingGoogle
$ cd $_

que

$ nc google.com 80 <<<$'HEAD /fonts/ HTTP/1.0\r\n\r'
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
...

Desde allí, puede usar todas las herramientas que desee, como ping , traceroute , openssl , nmap , etc ...

$ openssl s_client -connect google.com:443 -ign_eof \
      <<< $'HEAD / HTTP/1.0\r\n\r' 2>&1 | \
    openssl x509 -in /dev/stdin -out certfile
$ openssl x509 -in certfile -noout -fingerprint
SHA1 Fingerprint=67:1B:98:92:48:86:FF:E1:C5:02:44:C5:9F:F3:96:78:08:F5:0A:45
$ openssl x509 -in certfile -noout -subject
subject= /C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com

Si estás interesado en SSL, algunos scripts de muestra más

o ...

$ wget https://www.google.com/fonts/
$ vi index.html
$ wget https://www.google.com/fonts/webfonts.nocache.js
$ smjs < <(sed < webfonts.nocache.js 's/Window....')
...

para jugar con javascript ...

Entorno útil para almacenar variables:

$ ip=();ANS=false;while read -a line;do if [[ "$line" = ";;" ]];then [[ 
   "${line[1]}" = "ANSWER" ]] && ANS=true || ANS=false; fi ; $ANS && [[
   "${line[2]}" == "IN" ]] && ip+=(${line[4]});done < <(dig www.google.com)
$ printf "%s\n" ${ip[@]}
173.194.116.51
173.194.116.52
173.194.116.48
173.194.116.49
173.194.116.50

Dependiendo de lo que estés buscando, podrías usar ampliamente toda tu herramienta en todas las combinaciones.

$ grep ^64 < <(for host in ${ip[@]};do ping -c2 $host&done;wait)|sort -t. -nk4
64 bytes from 173.194.113.112: icmp_req=1 ttl=54 time=45.4 ms
64 bytes from 173.194.113.112: icmp_req=2 ttl=54 time=47.8 ms
64 bytes from 173.194.113.113: icmp_req=1 ttl=54 time=41.4 ms
64 bytes from 173.194.113.113: icmp_req=2 ttl=54 time=40.2 ms
64 bytes from 173.194.113.114: icmp_req=1 ttl=54 time=43.1 ms
64 bytes from 173.194.113.114: icmp_req=2 ttl=54 time=39.0 ms
64 bytes from 173.194.113.115: icmp_req=1 ttl=54 time=47.0 ms
64 bytes from 173.194.113.115: icmp_req=2 ttl=54 time=42.1 ms
64 bytes from 173.194.113.116: icmp_req=1 ttl=54 time=43.9 ms
64 bytes from 173.194.113.116: icmp_req=2 ttl=54 time=39.0 ms

Esto podría reescribirse :

Mini script desde allí:

Con esto, harás dos ping, paralelizado (esto normalmente tomará solo 1 segundos) en ~ 5 hosts:

ip=()
ANS=false
while read -a line;do
    if [[ "$line" = ";;" ]] ;then
        [[ "${line[1]}" = "ANSWER" ]] && ANS=true || ANS=false
    fi
    $ANS && [[ "${line[2]}" == "IN" ]] &&
        ip+=(${line[4]})
  done < <(dig www.google.com)
grep ^64 < <(
    for host in ${ip[@]};do
        ping -c2 $host &
    done
    wait
  ) |
  sort -t. -nk4

Otros idiomas (más eficientes)

Una vez que se haya fijado el objetivo, después de una gran cantidad de brainf @ # @ ing , el hacker común ejecutará su editor preferido y almacenará su exploit como un script para automatizar la próxima ejecución.

La elección del idioma utilizado dependerá principalmente de las preferencias del pirata informático. (Si no es requerido por su jefe.)

Y antes de reinventar la rueda ...

Ya existe una gran cantidad de herramientas dedicadas a realizar pruebas parásitas, escanear, investigar y analizar. Si usa puede echar un vistazo a Debian Forensics Environment ...

De todos modos, el mejor entorno para probar y registrar cada paso de este tipo de trabajo es un (como ;-)

    
respondido por el F. Hauri 03.11.2013 - 12:10
fuente
-6
#include <stdio.h>
int main()
{
int i, list[1000];
for (i=0;i<1000;i++)
    {
    list[i] = 'A';
    }
return 0;
}

No veo ningún mumbo jumbo aquí. De hecho, esto no es mucho más largo que un programa completo de python para hacer lo mismo. Algunos bucles son más cortos en C de lo que podrían ser con python, especialmente cuando en C puedes usar punteros que otorgan mucho más poder y acortan el código a entre el 10 y el 70 por ciento del equivalente de python. Por supuesto, normalmente el código C es más largo porque esa es la naturaleza de los lenguajes más poderosos.

De todos modos el hacking se hace en C de la mejor manera. olvida cualquier otra cosa solo ve C.

    
respondido por el trinity 03.11.2013 - 10:05
fuente

Lea otras preguntas en las etiquetas