Web Hacking
Aus exmediawiki
Version vom 8. Juni 2019, 00:05 Uhr von C.heck (Diskussion | Beiträge)
Inhaltsverzeichnis
Allgemeines
zum Workshop
- Fragen
- Allgemeines
- Ausprobieren
Hacking
Code oder Daten? Der Computer entscheidet
- Allgemeines
- Einschleusen von Code
Kommunikation im Internet
Aus der Sicht der Computer
- Wo ist das Internet?
- Wo ist mein Gesprächspartner?
- Wie heißt unser Kommunikationspartner?
- Welche Sprache sprechen wir?
Beispiele
Request - Response - Client - Server
- Mini nc mit Python
- Request aus Sicht des Servers
- logdateien
- cURL und HTTP Header
Hacking Werkzeug Browser
Traue keinem Nutzer-Input. Nirgends!
- Response - was wissen wir?
- Addresszeile - was können wir noch finden?
- Parameter - was können wir eingeben?
Darkweb Shop
Everything is broken...
- Eine von mir programmierte WebApp
- Dort können wir Hacks testen
- Die Anwendung ist extra unsicher Programmiert
Allgemeines
zum Workshop
Achtung
Ich habe einige Beispiele, die wir im Workshop angeschaut haben Entfernt.
Die Testumgebung war auch nur lokal während des Workshops verfügbar
Falls das Interesse besteht sich die Beispiele nochmal anzuschauen, sagt mir einfach Bescheid
Fragen:
- Habt ihr Ideen?
- Was wollt ihr wissen?
- Was stellt ihr euch unter "Hacking" vor?
- Programmiersprachen kenntnisse?
- Was ist interessant?
Allgemeines
- Hacken muss nicht immer technisch sein
- Kreativ mit technologie umgehen ist Hacking. Kunst ist Hacking
- exMedia an der KHM zu studieren ist meiner Meinung nach auch Hacking
- Trotzdem ist das unbefugte manipulieren von Computersystemen illegal
- Hacking hat auch seine Schattenseiten wenn es genutzt wird um Menschen zu schaden
Workshop
- Kali Linux
- RDP client - mit Kali System verbinden
- WebApp - DarkWeb Shop zum testen
- Seite ist extra unsicher programmiert, aber einiges davon gibt es auch "in echt"
Hacking
Code oder Daten? Der Computer entscheidet
Kommunikation im Internet
Aus der Sicht der Computer
- Wir müssen uns klar machen, dass das was der Computer sieht etwas anderes ist als das was wir sehen
- Wie baut der Computer eine Verbindung zu einer Webseite auf?
1. Wo ist das Internet?
# apt-get install net-tools # arp -a DESKTOP-ABCD123.fritz.box (192.168.178.30) at 10:bf:de:ad:be:ef [ether] on enp0s3 fritz.box (192.168.178.1) at c8:0e:de:ad:be:ef [ether] on enp0s3 kali.fritz.box (192.168.178.103) at 08:00:de:ad:be:ef [ether] on enp0s3
2. Wo sind die Gesprächspartner?
- Unter welcher Addresse findet der Computer seine Kommunikationspartner?
Das Tool "ip" zeigt uns die internen IP Addressen unserer Netzwerkinterfaces
# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:de:ad:be:ef brd ff:ff:ff:ff:ff:ff inet 192.168.178.102/24 brd 192.168.178.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:1234:dead:beef/64 scope link valid_lft forever preferred_lft forever
von der Seite ipconfig.io können wir unsere ausgehende IP abfragen
# curl ipconfig.io xxx.xxx.xxx.xxx
In manchen fällen wird Ping geblockt. Es ist also nicht immer zuverlässig. Mit Ctrl+c unter Linux abbrechen. Alternativ mit dem parameter -c 4
# ping khm.de 2 ↵ PING khm.de (194.95.160.32) 56(84) bytes of data. 64 bytes from www.khm.de (194.95.160.32): icmp_seq=1 ttl=56 time=35.5 ms 64 bytes from www.khm.de (194.95.160.32): icmp_seq=2 ttl=56 time=35.5 ms 64 bytes from www.khm.de (194.95.160.32): icmp_seq=3 ttl=56 time=35.2 ms ^C --- khm.de ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 35.206/35.435/35.585/0.164 ms
Das Tool Traceroute zeigt wie viele Knoten passiert werden bis zum Ziel
# traceroute khm.de traceroute to khm.de (194.95.160.32), 30 hops max, 60 byte packets 1 fritz.box (192.168.178.1) 0.611 ms 0.584 ms 0.667 ms 2 * * * 3 xxx.x.x.x (xxx.x.x.x) 25.533 ms 25.896 ms 26.826 ms 4 xx.xxx.xx.xx (xx.xxx.xx.xx) 29.668 ms 29.577 ms 29.442 ms 5 xx.xxx.xx.xxx (xx.xxx.xx.xxx) 38.220 ms xx.xxx.xx.xxx (xx.xxx.xx.xxx) 38.470 ms xx.xxx.xx.xxx (xx.xxx.xx.xxx) 38.323 ms 6 cr-fra2-be1.x-win.dfn.de (80.81.192.222) 40.200 ms 32.868 ms 32.887 ms 7 * * * 8 * cr-fra2-be11.x-win.dfn.de (188.1.144.222) 39.582 ms * 9 * * * 10 * * * [ ... ]
Mit dem Tool nslookup können wir manuell die Abfrage vornehmen
# nslookup khm.de Server: 192.168.178.1 Address: 192.168.178.1#53 Non-authoritative answer: Name: khm.de Address: 194.95.160.32
3. Wie heißt unser Kommunikationspartner?
- Ein Webserver ist ein Programm, dass an einem Port auf neue Nachrichten wartet
- Um mit dem Webserver zu sprechen brauchen wir die richtige Port-Nummer
Mit dem Tool netstat können die offenen Ports unseres Systems anzeigen
# netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 477/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 348/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 851/exim4 tcp6 0 0 :::80 :::* LISTEN 17526/apache2 tcp6 0 0 :::22 :::* LISTEN 348/sshd tcp6 0 0 ::1:25 :::* LISTEN 851/exim4
Mit dem Tool nc können wir manuell eine verbindung aufbauen. Die Option -v macht das sichtbar
# nc -v 194.95.160.32 80 Connection to 194.95.160.32 80 port [tcp/http] succeeded!
4. Welche Sprache sprechen wir?
-
Kurzes Resumé:
- Physische Verbindung (Kable WLAN)
- Weg ins Internet (Lokales Netz bis Router)
- Addresse des Servers (IP-Addresse)
- Port (Programm wartet dort auf unsere Nachricht)
- Damit das Programm "Webserver" auf dem Port uns versteht, müssen wir die richtige Sprache sprechen
Wir probieren einfach mal irgenwas aus, indem wir uns mit nc verbinden und "Hello World" eintippen. Mit Enter die Eingabe absenden
# nc -v 194.95.160.32 80 Connection to 194.95.160.32 80 port [tcp/http] succeeded! Hello World HTTP/1.1 400 Bad Request Server: nginx Date: Fri, 31 May 2019 22:46:40 GMT Content-Type: text/html Content-Length: 166 Connection: close [...]
- Methode: GET
- Datei: /index.html
- Sprache+Version: HTTP/1.0
GET /index.html HTTP/1.0
Mit nc können wir testen ob der Websever nun anders Reagiert. Es ist nötig zwei mal Enter zu drücken um den Request abzuschicken
# nc -v 194.95.160.32 80 Connection to 194.95.160.32 80 port [tcp/http] succeeded! GET /datei HTTP/1.0 HTTP/1.0 200 OK Server: nginx Date: Fri, 31 May 2019 22:54:27 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 04 Dec 2018 15:03:06 GMT Connection: keep-alive Keep-Alive: timeout=5 ETag: "5c06972a-264" Accept-Ranges: bytes [...]
Zusammenfassung
----------------- | | | client | | | ----------------- | | ========== Klick in der Anwendung -----> Request vom Browser -----> Kommunikations-Schicht -----> Transportschicht -----> Vermittlungsschicht -----> Sicherungsschicht -----> Physische Übertragung -----> ----------------------------------------------------------------------- INTERNET ----------------------------------------------------------------------- <----- Physische Übertragung <----- Sicherungsschicht <----- Vermittlungsschicht <----- Transportschicht <----- Kommunikations-Schicht <----- Response vom Server <----- Verarbeitung vom Request __________ | | | | | Server | | | | | | | |________|
Beispiele
Request - Response - Client - Server
- Die genutzte Funktion von dem Tool nc können wir relativ einfach nachbauen:
1. Mini nc mit Python
Wir nutzen die "Socket" Bibliothek von Python
import socket try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) """ AF_INET is an address family that is used to designate the type of addresses that your socket can communicate with (in this case, Internet Protocol v4 addresses). When you create a socket, you have to specify its address family, and then you can only use addresses of that type with the socket. The Linux kernel, for example, supports 29 other address families such as UNIX (AF_UNIX) sockets and IPX (AF_IPX), and also communications with IRDA and Bluetooth (AF_IRDA and AF_BLUETOOTH, but it is doubtful you'll use these at such a low level). For the most part, sticking with AF_INET for socket programming over a network is the safest option. There is also AF_INET6 for Internet Protocol v6 addresses. SOCK_STREAM means that it is a TCP socket. SOCK_DGRAM means that it is a UDP socket. """ except socket.error as err: print "socket creation failed with error %s" %(err) port = 80 host_ip = "194.95.160.32" s.connect((host_ip, port)) s.sendall("GET / HTTP/1.1\r\n\r\n") """ \r\n=carriage return (CR) and line feed (LF) (Zeilenumbruch) HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all protocol elements except the entity-body https://tools.ietf.org/html/rfc2616 """ print s.recv(1024) s.close()
2. Request aus Sicht des Servers
- Python3 bringt ein Modul für einen sehr kleinen aber funktionalen Webserver mit
- Wir müssen in ein Verzeichnis wechseln, dass wir "online" stellen wollen
- Alle Dateien in dem Verzeichnis können nun z.B. über den Browser abgerufen werden
- So kann jeder im lokalen Netzwerk Dateien teilen. Man braucht nur die IP-Addresse, den Port und den Dateinamen
Simple HTTP Server Modul von Python
# python3 -m http.server 1337 Serving HTTP on 0.0.0.0 port 1337 ... 192.168.178.30 - - [05/Jun/2019 23:24:38] "GET / HTTP/1.1" 200 - 192.168.178.30 - - [05/Jun/2019 23:24:38] code 404, message File not found 192.168.178.30 - - [05/Jun/2019 23:24:38] "GET /favicon.ico HTTP/1.1" 404 -
3. Logdateien
- Server speichern alle Anfragen in Logdateien
- Teilweise "komische" Anfragen
- Wir können sehen, dass die Seite ständig von Bots aufgerufen wird.
- Auffällig sind aber vor allem die Anfragen auf /wp-admin.php und /admin/
Ein Auszug der Logdaten von meinem gemieteten Webspace
111.202.101.0 - - [05/Jun/2019:00:17:54 +0200] "GET /robots.txt HTTP/1.1" 404 289 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" 111.202.101.0 - - [05/Jun/2019:00:17:54 +0200] "GET / HTTP/1.1" 200 163 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" 193.70.34.0 - - [05/Jun/2019:01:53:01 +0200] "GET /connectors/system/phpthumb.php HTTP/1.1" 404 310 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" 157.55.39.0 - - [05/Jun/2019:02:07:40 +0200] "GET /robots.txt HTTP/1.1" 404 285 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" 207.46.13.0 - - [05/Jun/2019:02:07:42 +0200] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" 79.137.20.0 - - [05/Jun/2019:02:24:32 +0200] "GET /wp-login.php HTTP/1.1" 404 287 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 178.32.136.0 - - [05/Jun/2019:04:14:12 +0200] "GET /wp-login.php HTTP/1.1" 404 287 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 157.55.39.0 - - [05/Jun/2019:04:59:02 +0200] "GET /robots.txt HTTP/1.1" 404 285 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" 66.249.76.0 - - [05/Jun/2019:08:20:57 +0200] "GET /robots.txt HTTP/1.1" 404 290 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 66.249.76.0 - - [05/Jun/2019:08:49:26 +0200] "GET /robots.txt HTTP/1.1" 404 285 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 66.249.76.0 - - [05/Jun/2019:08:49:26 +0200] "GET /ads.txt HTTP/1.1" 404 282 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 58.250.125.0 - - [05/Jun/2019:09:12:15 +0200] "GET /robots.txt HTTP/1.1" 404 285 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" 58.250.125.0 - - [05/Jun/2019:09:12:16 +0200] "GET / HTTP/1.1" 200 178 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" 209.17.96.0 - - [05/Jun/2019:10:18:40 +0200] "GET / HTTP/1.1" 200 163 "-" "Mozilla/5.0 (compatible; Nimbostratus-Bot/v1.3.2; http://cloudsystemnetworks.com)" 209.17.97.0 - - [05/Jun/2019:11:57:04 +0200] "GET / HTTP/1.1" 403 292 "-" "Mozilla/5.0 (compatible; Nimbostratus-Bot/v1.3.2; http://cloudsystemnetworks.com)" 218.30.103.0 - - [05/Jun/2019:12:10:50 +0200] "GET /robots.txt HTTP/1.1" 404 285 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" 218.30.103.0 - - [05/Jun/2019:12:10:50 +0200] "GET / HTTP/1.1" 200 178 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" 145.239.123.0 - - [05/Jun/2019:14:55:53 +0200] "GET /wp-login.php HTTP/1.1" 404 287 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 185.234.217.0 - - [05/Jun/2019:16:37:16 +0200] "GET /wp-login.php HTTP/1.1" 404 287 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 185.234.217.0 - - [05/Jun/2019:16:37:16 +0200] "GET //wp-login.php HTTP/1.1" 404 287 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 34.221.67.0 - - [05/Jun/2019:18:40:57 +0200] "GET / HTTP/1.1" 200 178 "-" "Go-http-client/1.1" 123.126.113.0 - - [05/Jun/2019:20:16:08 +0200] "GET /robots.txt HTTP/1.1" 404 289 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" 123.126.113.0 - - [05/Jun/2019:20:16:08 +0200] "GET / HTTP/1.1" 200 163 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
4. cURL und HTTP Header
- Schauen wir uns mal weitere Daten an, die bei der Kommunikation über HTTP gesendet werden
- Dafür nutzen wir curl
- Die Option -v ist für den "verbose"-Modus. So können wir einen Detaillierteren Output bekommen
Das Tool "cURL" ist ein Tool um Requests zu senden und Responses zu empfangen. Es hat sehr umpfangreiche Funktionen
# curl -v khm.de dass das tool etwas ausgereifte ist erkennt man schon daran, dass es den domain namen selbst auflösen kann die option -v ist für verbose. so können wir einen genaueren output bekommen * Trying 194.95.160.32... * TCP_NODELAY set * Expire in 200 ms for 4 (transfer 0x56414fdeddd0) * Connected to khm.de (194.95.160.32) port 80 (#0) > GET / HTTP/1.1 > Host: khm.de > User-Agent: curl/7.64.0 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Server: nginx < Date: Fri, 31 May 2019 22:59:05 GMT < Content-Type: text/html < Content-Length: 178 < Connection: keep-alive < Keep-Alive: timeout=5 < Location: https://www.khm.de/ < [...] * Connection #0 to host khm.de left intact
Abfragen der neuen Location "https://www.khm.de" mit curl
# curl -v https://www.khm.de * Rebuilt URL to: https://www.khm.de/ * Trying 194.95.160.32... * TCP_NODELAY set * Connected to www.khm.de (194.95.160.32) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Client hello (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Client hello (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=www.khm.de * start date: Jun 1 02:32:22 2019 GMT * expire date: Aug 30 02:32:22 2019 GMT * subjectAltName: host "www.khm.de" matched cert's "www.khm.de" * issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3 * SSL certificate verify ok. > GET / HTTP/1.1 > Host: www.khm.de > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 302 Found < Server: nginx < Date: Wed, 05 Jun 2019 21:43:47 GMT < Content-Type: text/html; charset=UTF-8 < Content-Length: 0 < Connection: keep-alive < Keep-Alive: timeout=5 < X-Powered-By: PHP/5.6.40 < Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 < X-Accel-Expires: 3600 < Last-Modified: Wed, 05 Jun 2019 23:00:36 GMT < Location: /home/ < X-XSS-Protection: 1; mode=block < X-Content-Type-Options: nosniff < X-Frame-Options: DENY < X-Download-Options: noopen < Access-Control-Allow-Origin: * < Access-Control-Allow-Methods: GET,POST,OPTIONS < X-Cache-Status: HIT < * Curl_http_done: called premature == 0 * Connection #0 to host www.khm.de left intact
Abfragen der neuen Location "https://www.khm.de/home/" mit curl
# curl -v https://www.khm.de/home/ * Trying 194.95.160.32... * TCP_NODELAY set * Connected to www.khm.de (194.95.160.32) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Client hello (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Client hello (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=www.khm.de * start date: Jun 1 02:32:22 2019 GMT * expire date: Aug 30 02:32:22 2019 GMT * subjectAltName: host "www.khm.de" matched cert's "www.khm.de" * issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3 * SSL certificate verify ok. > GET /home/ HTTP/1.1 > Host: www.khm.de > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx < Date: Wed, 05 Jun 2019 21:47:48 GMT < Content-Type: text/html; charset=utf-8 < Transfer-Encoding: chunked < Connection: keep-alive < Keep-Alive: timeout=5 < X-Powered-By: PHP/5.6.40 < Cache-Control: public, max-age=1800 < X-Accel-Expires: 86400 < Last-Modified: Wed, 05 Jun 2019 23:00:36 GMT < X-cellms-content-version: 226 < X-XSS-Protection: 1; mode=block < X-Content-Type-Options: nosniff < X-Frame-Options: DENY < X-Download-Options: noopen < Access-Control-Allow-Origin: * < Access-Control-Allow-Methods: GET,POST,OPTIONS < X-Cache-Status: HIT < [...]
Hacking Werkzeug Browser
Traue keinem Nutzer-Input. Nirgends!
- Schauen wir uns mal eine Seite im Browser an
- Im Browser rufen wir die Seiten prinzipiell genau sp auf, wie wir es eben mit den tools gemacht haben
- Es gibt eine Addresszeile wo wir den Namen und die gewünschte Datei eingeben können
- Nur weil die Seiten uns gerne auf den vorgegebnenen Pfaden halten wollen heißt das nciht, dass wir uns daran halten müssen.
- Manchmal bekommen wir auch unerwartete Anworten, wenn wir etwas unerwartetes fragen
1. Response - was wissen wir?
khm.de https://www.khm.de/home/asd exmediawiki.khm.de https://exmediawiki.khm.de/exmediawiki/asd
https://khm.de/home/
HTML - HEAD definiert Regeln wie der Body dargestellt wird. Body - zeigt den Inhalt
<!DOCTYPE html> <head> <style> a { color: red; } </stlye> <meta> </head> <body> <div> <p></p> <a></a> <img> <a><a/> <ul> <li></li> <li></li> </ul> </div> </body> </hmtl>
alt Specifies an alternative text for an image, when the image cannot be displayed disabled Specifies that an input element should be disabled href Specifies the URL (web address) for a link id Specifies a unique id for an element src Specifies the URL (web address) for an image style Specifies an inline CSS style for an element title Specifies extra information about an element (displayed as a tool tip)
<body> <div id="test"> <p style="color:red">red?</p> <a href="https://khm.de"></a> <img src="cool.jpg" alt="cool" width="50%"> <ul> <li title="I'm a tooltip">hello</li> <li id="li2">test</li> </ul> </div> </body>
<script> let beispiel = "yellow"; document.body.style.backgroundColor = beispiel; </script> <button onclick="myFunction()">Click me</button> <script> function myFunction() { let beispiel = "red"; document.body.style.backgroundColor = beispiel; } </script>
2. Addresszeile - was können noch finden?
- Wir können sehr viel an der Addresse manipulieren und probieren, aber dass wir so zufällig etwas finden ist eher unwahrscheinlich. Zum Glück gibt es dafür auch entsprechende Tools, die einfach der Reihe nach bekannte Dateien ausprobieren
- Wenn der Sever den Status 200 OK zurückgibt wissen wir, dass es die Datei geben muss. So kann zu Beispiel folgendes gefunden werden
- Manchmal ist es aber auch viel einfacher, da ein Hacker erstmal manuell die "Low hanging Fruits" ausprobiert.
- Ein Beipsiel wäre "/admin" an die Addresse zu hängen. Das kann sogar in meinen Logdateien beobachtet werden. Mit etwas glück kommen wir auf eine Login-Seite...
- An diesem Punkt müssen wir aber stoppen. Aus ethischen und rechtlichen Gründen
- Wir können aber mit dem login der Testumgebung weitermachen
3. Parameter - was können wir eingeben?
- Der nächste Schritt ist sich die Funktionalittäten genauer anzuschauen.
- Wir sollten uns ungefähr vorstellen können, was die Webanwendung überhaupt kann. Ein Onlinebanking wird sich in seiner Funktionalität von einem Blog zumindest in einigen Punkten unterscheiden
- Zuerst sollten wir uns also einen Überblick üpber die Funkltionen verschaffen, indem wir einfach mal ausprobielen, können wir etwas eingeben? Gibt es buttons usw.?
- Was genau können wir eingeben? Was passiert mit unserer Eingabe?
- Da wir leider oft nicht genau sagen können, was genau der Server mit unseren Daten macht, müssen wir durch sogenanntes Reverse egineering versuchen die Funktionen möglichst umfassend zu rekonstruieren.
- Reverse Engineering bedeutet durch die Eingabe von vielen Test-Daten das Verhalten eines Programms herauszufinden
- Hacker versuchen an allen möglichen Punkten Code einzuschleusen
- Die Vermischung von Code und Daten
4. Cookies
- Cookies sind kleine Text-Dateien, die eine Seite auf unserem Computer ablegt
- In der Regel werden sie vom Browser gespeichert und verwaltet.
- Sie gehören jeweils zu einer bestimmten Website und werden bei einem Request an die Seite mitgeschickt
- Durch Session-Cookies kann die Webapp den Nutzer über verschiedene Seiten hinweg verfolgen
- Andere Daten wie z.B. die Einkäufe im Einkaufswagen können ebenfalls in Cookies beim Nutzer gespeicher werden
- Wenn der Server die Cookies verarbeitet können wir versuchen das verhalten durch manipulierte Cookies zu ändern
- Javascript Source Code
- User Enumeration
- Redirect nach dem Login
- Beispiel Redirect auf: http://<meine ip>/rdr/login.php
- Führe Code im Browser deiner Opfer aus
- Beispiel XSS Angriff
- debug=true
- Debug? Admin? WTF?
- Jede seriöse Seite braucht ein Ping-Tool
- Beispiel RCE Angriff
- Gib dich als anderer User aus
- PHP Code hochladen
- RFI & LFI