Cosa definisce un linguaggio di programmazione come utile per l'hacking?

32

So che i linguaggi di scripting ( Perl , Ruby , Python , javascript e persino Lua !!!) sono i più adatti per i test di hacking e penetrazione.

La mia domanda è: Che cosa rende tali lingue idonee? Da quello che so, sono più lente delle altre lingue e operano a un livello di astrazione più alto, il che significa che sono troppo lontane l'hardware. L'unica ragione per cui ho potuto pensare è a causa delle loro capacità avanzate di manipolazione delle stringhe, ma credo che altre lingue abbiano tali capacità.

    
posta NlightNFotis 21.09.2012 - 09:02
fonte

8 risposte

30

Le lingue sono utili per fare cose . Che tipo di cose è adatto dipende completamente dal tipo di linguaggio, dai framework disponibili per esso, da quali sistemi operativi sono gli interpreti / i compilatori per esso, ecc.

Diamo un'occhiata a quelli che hai menzionato:

  • Perl
    • Linguaggio di scripting
    • Scopo generale
    • Disponibile sulla maggior parte dei sistemi operativi * nix dagli anni '90.
    • Ottimo per gli hacker rapidi e i brevi script.
  • Rubino
    • Linguaggio di scripting
    • Scopo generale
    • Cross-platform
    • orientata agli oggetti
    • Riflettente (può vedere la propria struttura e il proprio codice)
    • Ottimo per i framework dinamici
  • Python
    • Linguaggio di scripting
    • Scopo generale
    • Cross-platform
    • Progettato per codice sorgente chiaro e leggibile
    • Enorme framework di librerie
  • JavaScript
    • Linguaggio di scripting
    • Web-based
    • Cross-platform (disponibile su tutti i principali browser)

Quindi cosa rende questi articoli particolarmente adatti al pentesting? Bene, la maggior parte del pentesting riguarda la scrittura di strumenti rapidi da buttare per fare un lavoro specifico per un test specifico. Scrivere un tale strumento in C o C ++ ogni volta che si vuole fare un lavoro veloce è complicato e richiede molto tempo. Inoltre, tendono a produrre binari o sorgenti specifici della piattaforma che richiede una compilazione specifica della piattaforma, piuttosto che script multipiattaforma che eseguono solo . I linguaggi di scripting offrono la flessibilità necessaria per produrre tali strumenti in modo rapido e semplice.

Ad esempio, Ruby e Python sono popolari per attività più complesse perché hanno librerie complete, mentre Perl è popolare per gli hacker di elaborazione dei dati veloci. JavaScript è comunemente utilizzato come una semplice lingua basata su browser a cui tutti hanno accesso. Altri linguaggi come C tendono ad essere utilizzati per attività di basso livello che si interfacciano con il sistema operativo.

Ora, l'altro lato della medaglia sono le lingue usate come payload. È qui che la linea si confonde, perché i requisiti sono così vari. Per attaccare le finestre di Windows, qualsiasi carico utile che non ha dipendenze al di fuori di ciò che l'OS fornisce è utile. Potrebbe trattarsi di C, C ++, VBScript, x86 asm, C # / VB.NET (attualmente .NET 2.0 è presente sulla maggior parte delle macchine), ecc. Per attaccare le macchine Linux è possibile utilizzare C, C ++, script di bash o Perl. Java è anche comune per gli attacchi multipiattaforma.

Alla fine della giornata, scegli la lingua che tu trovi meglio per il lavoro!

    
risposta data 21.09.2012 - 10:14
fonte
16

Ecco un'ottima risposta che ho trovato su domanda di overflow dello stack di un contesto simile di @tqbf: (Ho copiato questa risposta qui, perché ritengo che fornisca validi motivi per cui potrebbero essere preferibili, quindi potrebbe essere utile ai futuri lettori)

You probably want Ruby, because it's the native language for Metasploit, which is the de facto standard open source penetration testing framework. Ruby's going to give you:

  • Metasploit's framework, opcode and shellcode databases

  • Metasploit's Ruby lorcon bindings for raw 802.11 work

  • Metasploit's KARMA bindings for 802.11 clientside redirection

  • Libcurl and net/http for web tool writing

  • EventMachine for web proxy and fuzzing work (or RFuzz, which extends the well-known Mongrel webserver)

  • Metasm for shellcode generation

  • Distorm for x86 disassembly

  • BinData for binary file format fuzzing.

Second place here goes to Python. There are more pentesting libraries available in Python than in Ruby (but not enough to offset Metasploit). Commercial tools tend to support Python as well --- if you're an Immunity CANVAS or CORE Impact customer, you want Python. Python gives you:

  • Twisted for network access

  • PaiMei for program tracing and programmable debugging

  • CANVAS and Impact support

  • Dornseif's firewire libraries for remote debugging

  • Ready integration with WinDbg for remote Windows kernel debugging (there's still no good answer in Ruby for kernel debugging, which is why I still occasionally use Python).

  • Peach Fuzzer and Sully for fuzzing

  • SpikeProxy for web penetration testing (also, OWASP Pantera).

Unsurprisingly, a lot of web work uses Java tools. The de facto standard web pentest tool is Burp Suite, which is a Java swing app. Both Ruby and Python have Java variants you can use to get access to tools like that. Also, both Ruby and Python offer:

  • Direct integration with libpcap for raw packet work

  • OpenSSL bindings for crypto

  • IDA Pro extensions

  • Mature (or at least reasonable) C foreign function interfaces for API access

  • WxWindows for UI work, and decent web stacks for web UIs

You're not going to go wrong with either language, though for mainstream pentest work, Metasploit probably edges out all the Python benefits, and at present, for x86 reversing work, Python's superior debugging interfaces edge out all the Ruby benefits.

Also: it's 2008. They're not "scripting languages". They're programming languages. ;)

    
risposta data 23.05.2017 - 14:40
fonte
7

Librerie, tempo di scrivere codice, compatibilità cross-platform sono fondamentali qui. Ho scoperto che usando Python sono stato in grado di realizzare exploit Proof-of-concept in pochissimo tempo con linee minime di codice. Ciò è possibile grazie all'ampia libreria standard e alle librerie aggiuntive che è possibile scaricare. Credo che sia la più grande forza di Python ad essere usata per il pentesting e l'hacking.

Ex. hai bisogno di una stringa di 1000 caratteri / 1000 byte di lunghezza.

In python:

print "A"*1000

In C:

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

(Oltre a tutto include mumbo jumbo e compilandolo)

Questo è solo un semplice esempio. Ma come puoi vedere il tempo impiegato per un compito così banale è molto più semplice in Python.

La differenza può essere ulteriormente migliorata quando si desidera inviare richieste HTTP ecc. dal proprio codice. Con urllib , httplib , ecc per python, puoi farlo in due righe di codice.

    
risposta data 21.09.2012 - 14:58
fonte
6

Non ho conoscenze in questi campi, ma i linguaggi di programmazione menzionati consentono una programmazione rapida, ovvero si può provare un numero molto più grande di idee diverse in un dato intervallo di tempo rispetto a un tempo più efficiente ma inefficiente per la programmazione ( e debugging) linguaggi di programmazione come C ecc. Potrebbe essere un punto.

    
risposta data 21.09.2012 - 10:07
fonte
6

Penso che ciò che definisce un linguaggio adatto per l'hacking, è:

  1. Uso della lingua.
  2. Supporto multipiattaforma.

Fai un esempio di Java. Funziona su tutte le piattaforme ed è installato su molti sistemi. Ciò garantisce una probabilità abbastanza alta che il codice degli hacker possa essere eseguito e che la lingua sia installata sul sistema a cui è destinato.

La comunità di un determinato linguaggio di programmazione altamente utilizzato, inoltre, trova occasionalmente vulnerabilità nel linguaggio, che ha permesso agli hacker di individuare tale vulnerabilità e hanno avuto un altissimo cambiamento nel colpirlo, a causa dell'alta distribuzione della lingua.

    
risposta data 21.09.2012 - 10:05
fonte
6

Alcune buone risposte già a questa, ma fornirò un'altra prospettiva. Una delle ragioni per cui i linguaggi di scripting tendono ad essere utilizzati per l'hacking è che ottimizzano la velocità (e la facilità) di sviluppo che è probabile che sia un fattore chiave.

Ad esempio, per lo scripting test scripting uso ruby. Ha un buon numero di buone librerie per cose come HTTP, il che significa che non devo preoccuparmi dei dettagli di basso livello e scrivere uno script veloce è molto veloce dato che c'è poca "formalità" richiesta in uno script ruby (es. Dichiarazioni di metodi / variabili) se confrontato con linguaggi come Java.

Uno dei lati negativi di questi linguaggi può essere che sono più lenti in fase di esecuzione, ma per un gran numero di attività di hacking che non rappresentano un problema, la velocità di sviluppo è più importante.

    
risposta data 21.09.2012 - 11:27
fonte
3

I miei due centesimi:

Esegui (o altri ) prima !!

La rapidità della lingua non ha importanza quando sei in pieno brainstorm !

Uno dei linguaggi più utili e potenti per questo tipo di operazione sembra essere dimenticato nella tua domanda.

Vorrei parlare di come ambiente di hacking . Sì prendono il suo nome dalla shell che può contenere molte altre cose.

Sotto Un * x, si accede principalmente a una console, per poter eseguire altri strumenti.

Se è uno dei più lenti lingua :

$ 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ì! Più di 4 secondi per un ciclo step di 1 milione è molto lento, ma una volta effettuato l'accesso a una console della riga di comando ...

Vantaggio principale da considerare:

  • cronologia Puoi salvare / copiare la cronologia per poterli consultare in seguito o per creare uno script
  • log utilizzando strumenti come script e scriptreplay puoi conservare una traccia molto precisa di tutto il tuo lavoro
  • Cut'n paste Usando x-terminal o strumenti come screen , puoi giocare con attività parallele, su console separate e condividere input / output tra tutti loro.
  • fifo Unendo strumenti semplici ma potenti come nc | sed | ssh | python ...

Esempio pratico

da cui puoi iniziare:

$ mkdir /tmp/hackingGoogle
$ cd $_

di

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

Da lì, puoi utilizzare tutti gli strumenti che desideri, come ping , traceroute , openssl , nmap , ecc ...

$ 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

Se sei interessato a SSL, qualche altro script di esempio

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....')
...

per giocare con javascript ...

Ambiente utile per la memorizzazione delle variabili:

$ 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

A seconda di ciò che stai cercando, puoi utilizzare ampiamente tutti i tuoi strumenti in tutte le combinazioni.

$ 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

Ciò potrebbe essere riscritto :

Mini script da lì:

Con questo, effettuerai due ping, parallelizzati (questo richiederà normalmente solo 1 secondo) su ~ 5 host:

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

Altre lingue (più efficienti)

Una volta risolto l'obiettivo, dopo un sacco di brainf @ # @ ing , il hacker comune eseguirà il suo editor preferito e memorizzerà il suo exploit come script per automatizzare la prossima esecuzione.

La scelta della lingua utilizzata dipenderà principalmente dalle preferenze dell'hacker. (Se non richiesto dal suo capo.)

E prima di reinventare la ruota ...

Esiste già un sacco di strumenti dedicati al pentesting, alla scansione, alla ricerca e all'analisi. Se utilizzi puoi dare un'occhiata a Debian Forensics Environment ...

Ad ogni modo, il miglior ambiente per testare e registrare ogni passo da questo tipo di lavoro è un (come ; -)

    
risposta data 03.11.2013 - 12:10
fonte
-6
#include <stdio.h>
int main()
{
int i, list[1000];
for (i=0;i<1000;i++)
    {
    list[i] = 'A';
    }
return 0;
}

Non vedo nessun mumbo jumbo qui. In realtà questo non è molto più lungo di un programma Python completo per fare lo stesso. Alcuni loop sono più brevi di C che potrebbero mai essere con python, specialmente quando in C puoi usare puntatori che danno molto più potere e riducono il codice tra il 10 e il 70 percento dell'equivalente python. Ovviamente il codice C normalmente è più lungo perché è la natura di linguaggi più potenti.

In ogni caso l'hacking è fatto in C il meglio. dimentica qualcos'altro, vai su C.

    
risposta data 03.11.2013 - 10:05
fonte

Leggi altre domande sui tag