Domanda

Innanzitutto voglio evitare una guerra infuocata sulle lingue.I linguaggi tra cui scegliere sono Perl, Python e Ruby.Voglio dire che mi trovo a mio agio con tutti, ma il problema è che non riesco a concentrarmi solo su uno.

Se, ad esempio, vedo un modulo Perl interessante, devo provarlo.Se vedo una bella app Python, devo sapere come è fatta.Se vedo un Ruby DSL o qualche Ruby voodoo, rimango dipendente da Ruby per un po'.

Al momento sto lavorando come sviluppatore Java, ma ho intenzione di intraprendere il CEH nel prossimo futuro.La mia domanda è:per la scrittura di strumenti e lo sviluppo di exploit, quale linguaggio ritieni sia il più appropriato?

Ancora una volta, non voglio causare scontri o problemi, voglio solo opinioni oneste da sceneggiatori che sanno cosa stanno facendo.

Un'altra cosa:forse qualcuno di voi si chiederà "Perché accontentarsi di una lingua?".Per rispondere a questa domanda:Vorrei scegliere una sola lingua, per provare a padroneggiarla.

È stato utile?

Soluzione

Probabilmente vorrai Ruby, perché è il linguaggio nativo di Metasploit, che è di fatto il framework di test di penetrazione open source standard.Ruby ti darà:

  • Di Metasploit database framework, opcode e shellcode
  • Di Metasploit Lorcon rubino associazioni per il lavoro grezzo 802.11.
  • Collegamenti KARMA di Metasploit per il reindirizzamento lato client 802.11.
  • Libcurl e net/http per la scrittura di strumenti web.
  • EventMachine per proxy web e lavori di fuzzing (o RFuzz, che estende il noto webserver Mongrel).
  • Metasma per la generazione dello shellcode.
  • Tempesta per lo smontaggio x86.
  • BinData per il fuzzing del formato di file binario.

Il secondo posto qui va a Python.Ci sono più librerie di pentest disponibili in Python che in Ruby (ma non abbastanza per compensare Metasploit).Gli strumenti commerciali tendono a supportare anche Python: se sei un cliente Immunity CANVAS o CORE Impact, vuoi Python.Python ti dà:

  • Contorto per l'accesso alla rete.
  • PaiMei per la tracciabilità dei programmi e il debugging programmabile.
  • Supporto CANVAS e Impact.
  • Quello di Dornseif librerie firewire per il debug remoto.
  • Integrazione pronta con WinDbg per il debug remoto del kernel di Windows (non c'è ancora una buona risposta in Ruby per il debug del kernel, motivo per cui uso ancora occasionalmente Python).
  • Fuzzer alla pesca e Sully per il fuzzing.
  • SpikeProxy per test di penetrazione web (anche, OWASP Pantera).

Non sorprende che gran parte del lavoro sul web utilizzi strumenti Java.Lo strumento web pentest standard di fatto è Burp Suite, che è un'app Java swing.Sia Ruby che Python hanno varianti Java che puoi utilizzare per accedere a strumenti del genere.Inoltre, sia Ruby che Python offrono:

  • Integrazione diretta con libpcap per il lavoro sui pacchetti grezzi.
  • Collegamenti OpenSSL per crittografia.
  • Estensioni IDA Pro.
  • Interfacce di funzioni esterne C mature (o almeno ragionevoli) per l'accesso API.
  • WxWindows per il lavoro dell'interfaccia utente e stack Web decenti per le interfacce utente Web.

Non sbaglierai con nessuno dei due linguaggi, anche se per il lavoro pentest tradizionale, Metasploit probabilmente elimina tutti i vantaggi di Python e, al momento, per il lavoro di inversione x86, le interfacce di debug superiori di Python eliminano tutti i vantaggi di Ruby.

Anche:è il 2008.Non sono "linguaggi di scripting".Sono linguaggi di programmazione.;)

Altri suggerimenti

[Disclaimer:Sono principalmente un programmatore Perl, il che potrebbe influenzare il mio giudizio.Tuttavia, non sono particolarmente tribale, e penso che su questa particolare questione la mia argomentazione sia ragionevolmente obiettiva.]

Perl è stato progettato per integrarsi perfettamente nel panorama Unix, ed è per questo che sembra così estraneo alle persone con un background prevalentemente OO (in particolare la scuola Java di OOP).Per questo motivo, tuttavia, è incredibilmente ampiamente installato su macchine con qualsiasi tipo di sistema operativo Unixoid e al suo interno sono scritte molte utilità di sistema dei fornitori.Sempre per lo stesso motivo, è probabile che i server su cui non sono installati né Python né Ruby abbiano ancora Perl, il che rende ancora una volta importante avere una certa familiarità con.Quindi, se la tua attività CEH include un'ampia attività su Unix, dovrai comunque avere una certa familiarità con Perl e potresti anche concentrarti su quello.

Detto questo, è in gran parte una questione di preferenze.Non c'è molto che differenzia le lingue;la loro potenza espressiva è praticamente identica.Alcune cose sono un po’ più facili in una delle lingue, altre un po’ più facili in un’altra.

In termini di librerie non so come si confrontano Ruby e Python l’uno con l’altro – so che Perl li ha battuti con un margine.D'altra parte, a volte (in particolare quando cerchi librerie per esigenze comuni) l'unico effetto è che sei sommerso di scelte.E se stai cercando di fare cose solo in un'area particolare che è ben coperta dalle librerie per Python o Ruby, la massa di altro le cose su CPAN non sono necessariamente un vantaggio.Nelle aree di nicchia, tuttavia, è importante e non sai mai quale esigenza imprevista potresti avere alla fine (err, per definizione).

Per l'uso one-liner sulla riga di comando, Python è una specie di non-starter.

In termini di ambiente di interprete interattivo, Perl... uhm... beh, puoi usare il debugger, che non è eccezionale, oppure puoi installarne uno da CPAN, ma Perl stesso non ne fornisce uno buono.

Quindi penso che Perl abbia un leggero vantaggio in particolare per le tue esigenze, ma solo di poco.Se scegli Ruby probabilmente non starai affatto peggio.Python potrebbe infastidirti in modo un po' più evidente, ma anch'esso difficilmente è un Cattivo scelta.

Potrei discutere per tutti e tre :-)

Perl ha tutto CPAN, offrendoti un enorme vantaggio nel mettere insieme rapidamente le funzionalità.Dispone inoltre di un'infrastruttura di test flessibile e gradevole, il che significa che puoi collegare molti stili di test automatizzati diversi (inclusi test in altre lingue) nello stesso framework.

Ruby è un linguaggio piacevole da imparare e manca di alcune delle funzionalità di Perl 5.Se stai eseguendo test basati sul Web, ha anche la libreria watir, che è molto utile (vedi http://wtr.rubyforge.org/)

Python: bel linguaggio e (anche se non è una mia preferenza personale) alcune persone trovano il modo in cui è strutturato più facile da gestire.

Ognuno di loro (e molti altri) sarebbe un'ottima lingua da imparare.

Invece di guardare la lingua, guarderei al tuo ambiente di lavoro.È sempre più facile imparare cose se hai altre persone intorno che fanno cose simili.Se gli attuali sviluppatori/test sono già concentrati su uno dei precedenti, lo farei.In caso contrario, scegli quello che sarebbe più applicabile/utile al tuo attuale ambiente di lavoro.Chatta con il resto del tuo team e scopri cosa ne pensano.

Dipende dall'implementazione, se verrà distribuito andrei con Java, visto che lo sai, per la sua portabilità.Se è solo per uso interno o verrà utilizzato in ambienti semi-controllati, scegli quello che ti risulta più comodo da mantenere e quello che ha le migliori prospettive a lungo termine.

Ora, per rispondere semplicemente alla domanda, sceglierei Perl, ma sono un tipo da Linux quindi potrei essere un po' di parte in questo.

Se prevedi di utilizzare Metasploit per il pen-test e lo sviluppo di exploit, consiglierei Ruby come menzionato in precedenza. Metasploit è scritto in Ruby e qualsiasi sviluppo di exploit/modulo che potresti voler fare richiederà Ruby.

Se utilizzerai Immunity CANVAS per i test con penna, per gli stessi motivi consiglierei Python poiché CANVAS è scritto in Python.Anche molti framework fuzzing come Peach e Sulley sono scritti in Python.

Non consiglierei Perl poiché troverai pochissimi strumenti/script/framework relativi al test della penna/fuzzing/exploit/...in Perl.

Poiché la tua domanda è "scrittura di strumenti e sviluppo di exploit", consiglierei Ruby se scegli Metasploit o Python se scegli CANVAS.

Spero possa aiutare :)

Parlando come CEH, impara prima il materiale CEH.Ciò ti esporrà a una varietà di strumenti e piattaforme utilizzati per organizzare vari tipi di attacchi.Una volta compreso bene il tuo obiettivo, esamina le capacità degli strumenti e delle piattaforme già disponibili (il framework metasploit menzionato in precedenza è molto completo e robusto).Come possono essere estesi per soddisfare le vostre esigenze?Una volta che lo sai, puoi confrontare le capacità delle lingue.

Consiglierei anche di dare un'occhiata agli strumenti disponibili su IndietroTraccia distribuzione.

Dovrebbero essere tutti sufficienti per questo.A meno che tu non abbia bisogno di una libreria disponibile solo in una lingua, lascerei che le preferenze personali mi guidassero.

Se stai cercando un linguaggio di scripting che funzioni bene con Java, potresti dare un'occhiata a Groovy.Ha la flessibilità e la potenza del Perl (chiusure, espressioni regolari integrate, array associativi ad ogni angolo) ma puoi accedere al codice Java da esso quindi hai accesso a un numero enorme di librerie, e in particolare al resto del sistema tu' si stanno sviluppando.

metaploit è un ottimo framework per i test di penetrazione.È scritto principalmente in Ruby, quindi se conosci bene quella lingua, forse puoi agganciarti lì.Tuttavia, a utilizzo metasploit, non è necessario conoscere alcuna lingua.

Se sei interessato a CEH, darei un'occhiata a Pitone dal cappello grigio.Mostra alcune cose che sono piuttosto interessanti e correlate.

Detto questo, qualsiasi lingua dovrebbe andare bene.

Ebbene, a che tipo di exploit stai pensando?Se vuoi scrivere qualcosa che necessita di materiale di basso livello (ptrace, socket raw, ecc.), allora dovrai imparare il C.Ma è possibile utilizzare sia Perl che Python.La vera domanda è: quale si adatta di più al tuo stile?

Per quanto riguarda la creazione di strumenti, Perl ha buone capacità di elaborazione delle stringhe, è più vicino al sistema, ha un buon supporto, ma secondo me è molto confuso.Preferisco Python:è un linguaggio pulito, facile da usare e da imparare con un buon supporto (riferimento completo al linguaggio/libreria, librerie di terze parti, ecc.).Ed è (rigorosamente IMHO) bello.

Sono con tqbf.Ho lavorato con Python e Ruby.Attualmente sto lavorando con JRuby.Ha tutta la potenza di Ruby con accesso alle librerie Java, quindi se c'è qualcosa per cui hai assolutamente bisogno di un linguaggio di basso livello, puoi farlo con un linguaggio di alto livello.Finora non ho avuto bisogno di usare molto Java poiché Ruby ha avuto la capacità di fare tutto ciò di cui avevo bisogno come tester API.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top