it-swarm.com.de

Was definiert eine Programmiersprache als nützlich für das Hacken?

Ich weiß, dass Skriptsprachen ( Perl , Ruby , Python , Javascript und sogar Lua !!!) am besten für Hacking- und Penetrationstests geeignet sind .

Meine Frage ist: Was macht diese Sprachen geeignet? Soweit ich weiß, sind sie langsamer als andere Sprachen und arbeiten auf einer höheren Abstraktionsebene Das heißt, sie sind zu weit von der Hardware entfernt. Der einzige Grund, den ich denken könnte, sind die erweiterten Funktionen zur Manipulation von Zeichenfolgen, aber ich glaube, dass andere Sprachen über solche Funktionen verfügen.

32
NlightNFotis

Sprachen sind nützlich für Dinge tun. Für welche Art von Dingen es vollständig geeignet ist, hängt von der Art der Sprache, den dafür verfügbaren Frameworks, den Betriebssystemen für Dolmetscher/Compiler usw. ab.

Schauen wir uns die an, die Sie erwähnt haben:

  • Perl
    • Skriptsprache
    • Allgemeiner Zweck
    • Verfügbar auf den meisten * nix-Betriebssystemen seit den 90er Jahren.
    • Ideal für schnelle Hacks und kurze Skripte.
  • Rubin
    • Skriptsprache
    • Allgemeiner Zweck
    • Plattformübergreifend
    • Objektorientierter
    • Reflektierend (kann seine eigene Struktur und seinen eigenen Code sehen)
    • Gut für dynamische Frameworks
  • Python
    • Skriptsprache
    • Allgemeiner Zweck
    • Plattformübergreifend
    • Entwickelt für klaren und lesbaren Quellcode
    • Riesiger Bibliotheksrahmen
  • JavaScript
    • Skriptsprache
    • Webbasiert
    • Plattformübergreifend (in allen gängigen Browsern verfügbar)

Was macht diese besonders gut zum Pentesting? Nun, das meiste Pentesting besteht darin, schnelle Wegwerfwerkzeuge zu schreiben, um eine bestimmte Aufgabe für einen bestimmten Test zu erledigen. Das Schreiben eines solchen Tools in C oder C++ jedes Mal, wenn Sie einen schnellen Job erledigen möchten, ist umständlich und zeitaufwändig. Darüber hinaus tendieren sie dazu, plattformspezifische Binärdateien oder Quellen zu erstellen, die eine plattformspezifische Kompilierung erfordern, anstatt plattformübergreifende Skripte, die nur ausführen. Skriptsprachen bieten Ihnen die Flexibilität, solche Tools schnell und einfach zu erstellen.

Zum Beispiel sind Ruby und Python] für komplexere Aufgaben beliebt, da sie über umfassende Bibliotheken verfügen, während Perl für schnelle Datenverarbeitungs-Hacks beliebt ist. JavaScript wird häufig verwendet Als einfache browserbasierte Sprache, auf die jeder Zugriff hat. Andere Sprachen wie C werden in der Regel für Aufgaben auf niedrigerer Ebene verwendet, die mit dem Betriebssystem verbunden sind.

Die andere Seite der Medaille sind Sprachen, die als Nutzdaten verwendet werden. Hier wird die Linie unscharf, weil die Anforderungen so unterschiedlich sind. Für den Angriff auf Windows-Boxen ist jede Nutzlast nützlich, die keine Abhängigkeiten außerhalb der vom Betriebssystem bereitgestellten Funktionen aufweist. Dies können C, C++, VBScript, x86 asm, C #/VB.NET sein (.NET 2.0 ist heutzutage auf den meisten Computern verfügbar) usw. Zum Angreifen von Linux-Boxen können Sie C-, C++ -, Bash-Skripte oder Perl verwenden. Java ist auch bei plattformübergreifenden Angriffen üblich.

Wählen Sie am Ende des Tages die Sprache aus, die Sie am besten für den Job finden!

30
Polynomial

Hier ist eine großartige Antwort, die ich auf einer Stapelüberlauffrage mit ähnlichem Kontext von @tqbf gefunden habe: (Ich habe diese Antwort hier kopiert, weil ich glaube, dass sie gültige Gründe enthält, aus denen sie bevorzugt werden könnten, also könnte es sein für zukünftige Leser nützlich sein)

Sie möchten wahrscheinlich Ruby, da dies die Muttersprache für Metasploit ist, das de facto das Standard-Open-Source-Penetrationstest-Framework ist. Ruby wird dir geben:

  • Metasploit's Framework-, Opcode- und Shellcode-Datenbanken

  • Metasploits Ruby lorcon Bindungen für 802.11-Roharbeiten

  • Die KARMA-Bindungen von Metasploit für die clientseitige 802.11-Umleitung

  • Libcurl und net/http zum Schreiben von Web-Tools

  • EventMachine für Web-Proxy- und Fuzzing-Arbeiten (oder RFuzz, das den bekannten Mongrel-Webserver erweitert)

  • Metasm zur Shellcode-Generierung

  • Distorm für die x86-Demontage

  • BinData für Fuzzing im binären Dateiformat.

Der zweite Platz geht an Python. In Python sind mehr Pentesting-Bibliotheken verfügbar als in Ruby (aber nicht genug, um Metasploit auszugleichen). Kommerzielle Tools unterstützen in der Regel auch Python --- Wenn Sie ein Kunde von Immunity CANVAS oder CORE Impact sind, möchten Sie Python. Python gibt Ihnen:

  • Twisted für den Netzwerkzugriff

  • PaiMei für Programmverfolgung und programmierbares Debugging

  • LEINWAND und Impact-Unterstützung

  • Dornseif's Firewire-Bibliotheken für Remote-Debugging

  • Ready-Integration mit WinDbg für das Remote-Windows-Kernel-Debugging (es gibt immer noch keine gute Antwort in Ruby für das Kernel-Debugging, weshalb ich gelegentlich immer noch Python verwende).

  • Peach Fuzzer und Sully zum Fuzzing

  • SpikeProxy für Web-Penetrationstests (auch OWASP Pantera ).

Es überrascht nicht, dass bei vielen Webarbeiten Java Tools verwendet werden. Das De-facto-Standard-Web-Pentest-Tool ist Burp Suite, eine Java Swing-App. Sowohl Ruby als auch Python haben Java Varianten, mit denen Sie auf solche Tools zugreifen können. Außerdem bieten sowohl Ruby als auch Python:

  • Direkte Integration mit libpcap für Rohpaketarbeit

  • OpenSSL-Bindungen für Krypto

  • IDA Pro-Erweiterungen

  • Ausgereifte (oder zumindest vernünftige) C-Fremdfunktionsschnittstellen für den API-Zugriff

  • WxWindows für Benutzeroberflächen funktionieren und anständige Webstacks für Web-Benutzeroberflächen

Sie werden mit beiden Sprachen nichts falsch machen, obwohl Metasploit für die Pentest-Arbeit des Mainstreams wahrscheinlich alle Vorteile von [Python ausschaltet, und derzeit bieten die überlegenen Debugging-Schnittstellen von Python für x86-Umkehrarbeiten alle Vorteile Ruby Vorteile.

Außerdem: Es ist 2008. Sie sind keine "Skriptsprachen". Sie sind Programmiersprachen. ;)

16
NlightNFotis

Bibliotheken, Zeit zum Schreiben von Code und plattformübergreifende Kompatibilität sind hier entscheidend. Ich fand heraus, dass ich mit Python) in sehr kurzer Zeit Proof-of-Concept-Exploits mit minimalen Codezeilen erstellen konnte. Dies ist aufgrund der umfangreichen Standardbibliothek und möglich Zusätzliche Bibliotheken, die Sie ebenfalls herunterladen können. Ich glaube, das ist die größte Stärke von Python, die zum Pentesting und Hacken verwendet werden kann.

Ex. Sie benötigen eine Zeichenfolge mit 1000 Zeichen/1000 Byte Länge.

In Python:

print "A"*1000

In C:

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

(Abgesehen von allem, was Mumbo Jumbo beinhaltet und kompiliert)

Das ist nur ein einfaches Beispiel. Aber wie Sie sehen, ist die Zeit, die für eine so triviale Aufgabe benötigt wird, in Python viel einfacher.

Der Unterschied kann noch verstärkt werden, wenn Sie http-Anfragen usw. aus Ihrem Code senden möchten. Mit urllib, httplib usw. für Python können Sie dies in zwei Codezeilen tun.

7
sudhacker

Einige gute Antworten auf diese Frage, aber ich werde eine andere Perspektive bieten. Ein Grund dafür, dass Skriptsprachen zum Hacken verwendet werden, besteht darin, dass sie hinsichtlich der Geschwindigkeit (und Leichtigkeit) der Entwicklung optimiert werden, was wahrscheinlich ein Schlüsselfaktor ist.

Als Beispiel für Penetrationstests verwende ich Ruby. Es gibt eine Reihe guter Bibliotheken für Dinge wie HTTP, was bedeutet, dass ich mich nicht um Details auf niedriger Ebene kümmern muss und das Schreiben eines schnellen Skripts sehr schnell ist, da in einem Ruby) nur wenig "Formalität" erforderlich ist = Skript (z. B. Methoden-/Variablendeklarationen) im Vergleich zu Sprachen wie Java.

Einer der Nachteile dieser Sprachen kann sein, dass sie zur Laufzeit langsamer sind, aber für viele Hacking-Arbeiten, die kein Problem darstellen, ist die Entwicklungsgeschwindigkeit wichtiger.

6
Rory McCune

Ich denke, was eine Sprache definiert, die zum Hacken geeignet ist, ist:

  1. Verwendung der Sprache.
  2. Plattformübergreifende Unterstützung.

Nehmen Sie ein Beispiel für Java. Es läuft auf allen Plattformen und ist auf vielen Systemen installiert. Dies stellt eine ziemlich hohe Wahrscheinlichkeit sicher, dass der Hacker-Code ausgeführt werden kann und die Sprache auf dem System installiert ist, auf das er abzielt.

Die Community der häufig verwendeten Programmiersprachen findet gelegentlich auch Schwachstellen in der Sprache, die es Hackern ermöglichten, diese Schwachstelle zu bekämpfen, und aufgrund der hohen Verbreitung der Sprache eine sehr hohe Änderung der Trefferquote aufweist.

6
Kao

Ich habe keine Kenntnisse in diesen Bereichen, aber die genannten Programmiersprachen ermöglichen alle eine schnelle Programmierung, dh man könnte in einem bestimmten Zeitrahmen eine viel größere Anzahl verschiedener Ideen ausprobieren als mit der Laufzeit effizienter, aber ineffizient für die Programmierung (und das Debuggen). Programmiersprachen wie C usw. Das könnte ein Punkt sein.

6
Mok-Kong Shen

Meine zwei Cent:

Führen Sie zuerst bash (oder ein anderes Shell ) aus !!

Die Schnelligkeit der Sprache spielt keine Rolle, wenn Sie sich im vollen Brainstorming befinden !

Eine der nützlichsten und mächtigsten Sprachen für diese Art von Operation scheint in Ihrer Frage vergessen zu sein.

Ich möchte über bash als Hacking-Umgebung sprechen. Ja Shell nimm seinen Namen von der Shell , die viele andere Dinge enthalten kann.

Unter Un * x sind Sie hauptsächlich in einer Shell Konsole angemeldet, um andere Tools ausführen zu können.

Wenn es eine der langsameren Sprachen ist :

$ 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

Ja! Mehr als 4 Sekunden für eine 1-Millionen-Schritt-Schleife sind sehr langsam, aber sobald Sie in einer Befehlszeilenkonsole angemeldet sind ...

Hauptvorteil zu berücksichtigen:

  • Verlauf Sie können Ihren Verlauf speichern/kopieren, um ihn später abzurufen oder ein Skript zu erstellen
  • log Mit Tools wie script und scriptreplay können Sie alle Ihre Aufgaben sehr genau verfolgen
  • Ausschneiden und Einfügen Mit x-terminal oder Tools wie screen können Sie mit parallelen Aufgaben auf einer separaten Konsole spielen und teilen Ein-/Ausgänge zwischen allen.
  • fifo Durch Zusammenführen einfacher, aber leistungsstarker Tools wie nc | sed | ssh | python ...

Praktische Probe

sie könnten beginnen von:

$ mkdir /tmp/hackingGoogle
$ cd $_

als

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

Von dort aus können Sie alle gewünschten Tools verwenden, z. B. ping, traceroute, openssl, nmap usw.

$ 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

Wenn Sie an SSL interessiert sind, finden Sie weitere Beispielskripte

oder...

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

zum Spielen mit Javascript ...

Nützliche Umgebung zum Speichern von Variablen:

$ 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

Je nachdem, wonach Sie suchen, können Sie Ihr gesamtes Werkzeug in allen Kombinationen verwenden.

$ 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

Dies könnte durch neu geschrieben werden :

Mini-Skript von dort:

Damit machen Sie zwei Pings parallelisiert (dies dauert normalerweise nur 1 Sekunde) auf ~ 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

Andere (effizientere) Sprachen

Sobald das Ziel festgelegt ist, wird nach viel brainf @ # @ ing ein gewöhnlicher Hacker seinen bevorzugten Editor ausführen und seinen speichern Exploit als Skript zur Automatisierung des nächsten Laufs.

Die Wahl der verwendeten Sprache hängt hauptsächlich von den Vorlieben des Hackers ab. (Wenn nicht von seinem Chef verlangt.)

Und bevor Sie das Rad neu erfinden ...

Es gibt bereits viele Tools zum Pentesting, Scannen, Forschen und Analysieren. Wenn Sie debian verwenden, können Sie Debian Forensics Environment ...

Wie auch immer, die beste Umgebung zum Testen und Protokollieren jedes Schritts von dieser Art von Job ist ein Shell (wie bash ;-)

3
F. Hauri