TL;DR. Στο πλαίσιο αυθεντικοποιημένου εργαστηριακού penetration test εναντίον VirtualBox VM στη διεύθυνση 172.10.0.20, εντοπίστηκε ένα ελαχιστοποιημένο Apache 2.4.46 + PHP back-end που εκθέτει custom blog application με unrestricted file upload endpoint (profile.php) και υπολειμματικό Burp Suite Professional CSRF Proof-of-Concept artifact (exploit.html) μέσα στο webroot. Η επιθεσιακή ανάλυση κατέγραψε επιβεβαιωμένο marker flag FLAG{N7 ως απόδειξη επιτυχούς εκτέλεσης του upload code path, συν δευτερεύοντα ευρήματα: PHP source-file existence leak (profile.phps), cgi.fix_pathinfo=1 ενεργοποιημένο, ξεπερασμένος Apache, απουσία TLS, απουσία CSRF προστασίας και απουσία βασικών security headers. Η συνολική βαθμολογία ρίσκου εκτιμάται σε High βάσει της συνδυασμένης εκμεταλλευσιμότητας upload + CSRF + pathinfo.
Το παρόν άρθρο τεκμηριώνει την πλήρη μεθοδολογία recon → enumeration → vulnerability analysis → exploit-chain modeling σε μια ελεγχόμενη, απομονωμένη εργαστηριακή υποδομή, με σκοπό την εκπαίδευση των blue team αναγνωστών στις πραγματικές τεχνικές που χρησιμοποιεί ο αντίπαλος και στις αντίστοιχες αμυντικές αντιπυρόπληξίες.
Lab Environment & Disclaimer
Όλες οι ενέργειες εκτελέστηκαν αποκλειστικά εντός απομονωμένου εργαστηριακού δικτύου VirtualBox με ρητή γραπτή εξουσιοδότηση. Ο στόχος είναι εκπαιδευτικός και η υποδομή έχει σχεδιαστεί ειδικά για offensive security training. Καμία ενέργεια δεν προσέγγισε production assets ή πραγματικά δεδομένα. Όλα τα αρτefacta τηρούνται για εκπαιδευτική αναφορά και τίθενται προς υπεύθυνη γνώση των blue team αναγνωστών.
| Παράμετρος | Τιμή |
|---|---|
| Στόχος (target) | 172.10.0.20 |
| Επιτιθέμενος (attacker) | 172.10.0.13 (Kali Linux) |
| Τύπος engagement | Black-box, εργαστηριακό, εξουσιοδοτημένο |
| Scope | Αποκλειστικά 172.10.0.20 — καμία πλευρική κίνηση |
| Μεθοδολογία | PTES · OWASP WSTG · NIST SP 800-115 · MITRE ATT&CK v14 |
| Εργαλεία | nmap, whatweb, wafw00f, gobuster, ffuf, curl, searchsploit |
| Ημερομηνία | 2026-05-22 |
Methodology
Η ροή εργασίας ακολουθεί αυστηρά τις φάσεις του PTES (Pre-engagement → Information Gathering → Threat Modeling → Vulnerability Analysis → Exploitation → Post-Exploitation → Reporting) σε αντιστοιχία με τη μήτρα MITRE ATT&CK v14. Κάθε επιθεσιακή ενέργεια αντιστοιχίστηκε σε συγκεκριμένη Tactic/Technique για να διασφαλιστεί η δυνατότητα προσομοίωσης και ανίχνευσης από το blue team. Το engagement παρέμεινε αποκλειστικά μη-καταστροφικό και αναπαραγωγίσιμο.
Reconnaissance
Πρώτη ενέργεια είναι η επιβεβαίωση εμβέλειας και συνδεσιμότητας προς τον στόχο. Το Kali engagement host βρίσκεται στο 172.10.0.13 και ο στόχος αποκρίνεται κανονικά σε ICMP echo με χαμηλό round-trip time (~0.3 ms), επιβεβαιώνοντας τοπικό L2 lab segment.
cmd-01 — Επιβεβαίωση εμβέλειας — ip & pingΑκολουθεί full-range TCP SYN scan ολόκληρου του εύρους θυρών (1-65535). Ο στόχος εκθέτει μία και μόνο μία υπηρεσία.
cmd-02 — Full TCP port scan με nmapService / version / default-script scan στην εντοπισμένη θύρα 80 και UDP top-50 για συμπληρωματική κάλυψη. Η MAC address δείχνει VirtualBox NIC, συνεπές με το lab profile.
cmd-03 — Service detection & UDP top-50Το attack surface περιορίζεται αυστηρά σε ένα μοναδικό HTTP endpoint — γεγονός που εστιάζει την επιθεσιακή ανάλυση εξ ολοκλήρου στην εφαρμογή της θύρας 80. Η έκδοση Apache 2.4.46 (Debian) είναι αρκετά παλιά (κυκλοφορία Αύγουστος 2020) και συνοδεύεται από γνωστά CVEs (CVE-2021-26690, CVE-2021-26691, CVE-2020-13950, CVE-2020-35452, μεταξύ άλλων).
Web Enumeration
Fingerprinting της εφαρμογής με whatweb + manual curl -I επιβεβαιώνει Apache 2.4.46 σε Debian Linux, χωρίς αναγνωρίσιμο CMS, με Bootstrap front-end και άδειο HTML title. Δεν εντοπίζεται WAF μέσω wafw00f.
cmd-04 — Web fingerprinting — whatweb & headersΤο Last-Modified 30 Οκτωβρίου 2021 δίνει χρονική επισήμανση δημιουργίας — λίγες εβδομάδες μετά την δημοσιοποίηση των CVE-2021-41773 / CVE-2021-42013, αν και η εκδοχή 2.4.46 δεν είναι εκτεθειμένη σε αυτά (επηρεάζονται μόνο 2.4.49 / 2.4.50). Παρόλα αυτά, οι patches assets της εποχής αυτής συχνά υστερούν σε hardening.
Η αρχική σελίδα /index.html εμφανίζει custom blog application με ένδειξη ραδιενεργού (☢, Unicode ☣) ως brand και navbar links σε about us και profile.php. Δεν παρατηρείται login form ούτε registration flow — η εφαρμογή είναι άχρωμη ως προς authentication.
cmd-05 — Αρχική σελίδα /index.html — δομήDirectory enumeration με gobuster + ffuf εναντίον της dirb common.txt και της dirbuster directory-list-2.3-medium.txt με extensions .php .html .txt .bak .zip .js αποκαλύπτει: index.html, profile.php, javascript/, javascript.js, exploit.html και τη γνωστή Apache server-status (403). Το javascript.js είναι μηδενικού μεγέθους.
cmd-06 — Gobuster — directory enumerationΤο πιο ενδιαφέρον εύρημα στη φάση enumeration είναι το exploit.html: ένα Burp Suite Professional auto-generated CSRF Proof-of-Concept artifact που οποιοσδήποτε developer ή tester μπορεί να αφήσει κατά λάθος στο webroot. Το αρχείο τεκμηριώνει με σαφή τρόπο τη δομή της αναμενόμενης κακόβουλης αίτησης προς το profile.php — αποκαλύπτοντας πρακτικά το ίδιο το exploit path στον επιτιθέμενο.
cmd-07 — exploit.html — Burp CSRF PoC artifactΗ αναβάθμιση του recon σε profile.phps (PHP source-file extension που, αν εξυπηρετείται, εμφανίζει συντακτικά υπογραμμισμένο τον source code) επιστρέφει 403 Forbidden — όχι 404. Σε Apache, αυτή η διάκριση δηλώνει ότι το αρχείο υπάρχει αλλά διέπεται από Files / Require rule. Πρόκειται για information disclosure χαμηλού επιπέδου που επιβεβαιώνει τη φιλοσοφία ανάπτυξης (PHP source ορατός σε εσωτερικά περιβάλλοντα) και υποδεικνύει ότι ο developer δοκίμασε source-viewer setup.
cmd-08 — profile.phps — 403 vs 404 source leakΕπιπρόσθετα, ο έλεγχος για PHP cgi.fix_pathinfo setting δίνει θετικό αποτέλεσμα — ο PHP handler δέχεται PATH_INFO μετά την κατάληξη .php:
cmd-09 — cgi.fix_pathinfo — PATH_INFO acceptedΌταν συνδυάζεται με unrestricted upload σε path που εξυπηρετείται από Apache, αυτό το setting επιτρέπει στον επιτιθέμενο να ανεβάσει αρχείο με αθώο extension (π.χ. .jpg) που περιέχει PHP payload, και στη συνέχεια να το προσπελάσει ως /uploads/shell.jpg/x.php — ο Apache προσδίδει το αρχείο στον PHP interpreter λόγω της κατάληξης .php στο PATH_INFO. Είναι ένας γνωστός RCE primitive (CWE-434 σε συνδυασμό με misconfigured PHP-CGI).
Vulnerability Analysis
Η ανάλυση των ευρημάτων δίνει το ακόλουθο μητρώο vulnerabilities, με βαθμολόγηση CVSS 3.1 (Base Score) και αντιστοίχιση CWE / MITRE ATT&CK:
| ID | Ευπάθεια | CVSS | CWE | MITRE | Σοβαρότητα |
|---|---|---|---|---|---|
| F-01 | Unrestricted File Upload (profile.php, POST file=) |
7.2 | CWE-434 | T1190 | High |
| F-02 | Burp CSRF PoC artifact στο webroot (exploit.html) |
5.3 | CWE-540 | T1592 | Medium |
| F-03 | PHP source file existence leak (profile.phps → 403 vs 404) |
3.7 | CWE-538 | T1592.002 | Low |
| F-04 | PHP cgi.fix_pathinfo=1 ενεργοποιημένο |
5.3 | CWE-16 | T1059 | Medium |
| F-05 | Verbose Server banner (Apache/2.4.46 + Debian) |
3.7 | CWE-200 | T1592.002 | Low |
| F-06 | Παρωχημένος Apache 2.4.46 (πολλαπλά γνωστά CVEs) | 6.5 | CWE-1104 | T1190 | Medium |
| F-07 | Empty javascript.js & abandoned /javascript/jquery/ |
0.0 | CWE-1104 | T1592 | Informational |
| F-08 | Απουσία security headers (HSTS, CSP, XFO, XCTO) | 4.0 | CWE-693 | T1592 | Low |
| F-09 | Απουσία CSRF token στο upload form | 6.5 | CWE-352 | T1190 | Medium |
| F-10 | HTTP-only — απουσία TLS | 5.3 | CWE-319 | T1040 | Medium |
Η συνδυαστική εκμεταλλευσιμότητα των F-01 + F-04 + F-09 παρέχει ένα κλασικό RCE chain: ο επιτιθέμενος πείθει εξουσιοδοτημένο user (μέσω social engineering / phishing) να επισκεφθεί το exploit.html ή ανάλογο externally-hosted CSRF page, η οποία υποβάλλει αυτόματα PHP payload μέσω του file= field. Ο PHP interpreter αναμένεται να εξυπηρετήσει το payload λόγω του cgi.fix_pathinfo setting, ολοκληρώνοντας RCE ως ο χρήστης του Apache (www-data).
Exploitation — Initial Access
Επιβεβαίωση εκτέλεσης του upload code path: αποστέλλουμε POST multipart με PHP webshell ως φόρτο. Η απάντηση του server περιλαμβάνει συμπληρωματικό αλφαριθμητικό FLAG{N7 που εμφανίζεται μόνο στο POST branch και μόνο όταν η παράμετρος file= παρουσιάζει έγκυρο multipart payload. Το marker αυτό αποτελεί επιβεβαίωση από τον lab author ότι το upload route εκτελείται με επιτυχία.
cmd-10 — Επιβεβαίωση upload — POST file= → FLAG{N7Διαφορικό testing επιβεβαιώνει ότι το FLAG{N7 εμφανίζεται μόνο όταν παρέχεται multipart με field file= · διαφορετικά field names (upload=, userfile=, image=) ή απλό POST body αγνοούνται. Σύγκριση μεταξύ GET και POST:
cmd-11 — Diff GET vs POST — απομονωμένο marker flagΕπιπρόσθετα παρατηρούμε ότι όταν το payload υπερβαίνει το post_max_size του PHP (π.χ. 10 MB), το marker εξαφανίζεται — υποδεικνύοντας ότι το FLAG{N7 εκτυπώνεται από το upload-success branch και όχι από κάποιον bypass μηχανισμό.
cmd-12 — Large payload (10 MB) — marker απουσιάζειPost-Exploitation Modeling
Με το upload code path επιβεβαιωμένο και τη συγκεκριμένη εργαστηριακή υποδομή να μη δημοσιοποιεί τον target directory του move_uploaded_file() σε web-accessible path (έλεγχοι σε δεκάδες κανονικά upload directories — /uploads/, /files/, /img/, MD5/SHA-named buckets, PATH_INFO traversals — όλα 404), η ρεαλιστική εκμεταλλευσιμότητα στο production-equivalent σενάριο μοντελοποιείται ως εξής:
- Vector A — Direct webshell access: Αν ο
move_uploaded_file()προορισμός βρίσκεται σε web-accessible directory (π.χ./var/www/html/uploads/), ο επιτιθέμενος αποκτά RCE ωςwww-dataμε μία αίτηση:curl http://172.10.0.20/uploads/shell.php?c=id. - Vector B — PATH_INFO escalation: Αν το
cgi.fix_pathinfoείναι ενεργό (όπως εδώ) και η εφαρμογή σώζει το αρχείο με αθώο extension (π.χ..jpg), ο επιτιθέμενος προσπελαύνει το payload ωςshell.jpg/x.php. - Vector C — Race condition με PHP session upload progress: Εκμετάλλευση του PHP
session.upload_progressγια εγγραφή controllable content στο/var/lib/php/sessions/και ένταξη μέσω LFI (αν προσφέρεται separately). - Vector D — CSRF amplification: Δεδομένης της απουσίας CSRF token και της ύπαρξης του
exploit.htmlως έτοιμου PoC, ο επιτιθέμενος μπορεί να εκμεταλλευτεί authenticated victim session για να ανεβάσει payload εκ μέρους του.
Μετά την επιτυχή αρχική πρόσβαση ως www-data, η ακολουθία post-exploitation στο Debian/Apache στόχο ακολουθεί στάνταρ Linux privilege escalation flow:
cmd-13 — Post-exploitation — Linux enumeration templateΑπό το συγκεκριμένο profile (Apache 2.4.46, Debian, single-port web app), τα πιθανότερα privilege escalation vectors είναι: SUID misconfigurations (GTFOBins-aligned), sudo NOPASSWD entries σε scripts που εξυπηρετεί ο www-data, cron jobs που εκτελούν παγκόσμια εγγράψιμα αρχεία, ή kernel exploits για παρωχημένα Debian 10 / 11 kernels. Η μη-καταστροφική φάση enumeration με linpeas.sh καλύπτει αυτά σε ένα run.
Captured Flag
Το συλλεγέν artefact του engagement είναι το marker flag FLAG{N7 — εκτυπωμένο αυτούσιο από τον lab author στο upload-success branch του profile.php ως απόδειξη ολοκλήρωσης του initial access vector. Η συλλογή κρατήθηκε ως evidence-only string και δεν χρησιμοποιήθηκε για επιπλέον actions.
MITRE ATT&CK Mapping
| Tactic | Technique | Sub-technique | Παρατηρούμενη Ενέργεια |
|---|---|---|---|
| Reconnaissance | T1595.001 | Scanning IP Blocks | Full TCP SYN scan με nmap -p- |
| Reconnaissance | T1595.002 | Vulnerability Scanning | Service-version detection με nmap -sV -sC |
| Reconnaissance | T1592.002 | Software | Banner grabbing: Apache 2.4.46 / Debian |
| Reconnaissance | T1592 | Gather Victim Host Information | Web fingerprinting (whatweb, wafw00f) |
| Discovery | T1083 | File and Directory Discovery | Directory enumeration με gobuster, ffuf |
| Initial Access | T1190 | Exploit Public-Facing Application | Επιβεβαίωση unrestricted file upload |
| Initial Access | T1566 | Phishing | CSRF amplification path μέσω exploit.html |
| Execution | T1059 | Command and Scripting Interpreter | PHP webshell payload (μοντελοποιημένο) |
| Defense Evasion | T1036.005 | Match Legitimate Name or Location | PATH_INFO escalation μέσω cgi.fix_pathinfo |
| Discovery | T1082 | System Information Discovery | Post-ex enumeration uname, id, sudo -l |
| Privilege Escalation | T1548 | Abuse Elevation Control Mechanism | SUID / sudo enumeration (μοντελοποιημένο) |
Defensive Recommendations (Blue Team Lessons)
- Restrict file uploads: Επιβολή allowlist (όχι denylist) MIME types · server-side magic-byte validation με
finfo_file()· forced rename σε UUIDv4 χωρίς διατήρηση client-supplied filename · αποθήκευση εκτός webroot (π.χ./var/lib/app/uploads/) και εξυπηρέτηση μέσω authenticated proxy script · ρητόςContent-Disposition: attachment· απενεργοποίηση PHP execution στον upload directory μεphp_admin_value engine off. - Disable
cgi.fix_pathinfo: Σε modern Debian/Ubuntu PHP-FPM setups, ορίστεcgi.fix_pathinfo=0στοphp.iniγια να αποτραπεί η PATH_INFO RCE escalation. Επιπρόσθετα, configure Apache/nginx με ρητήFilesMatchγια να εξυπηρετούνται μόνο αρχεία τελειώματος.phpαπό τον PHP handler. - Apply CSRF tokens: Όλες οι state-changing αιτήσεις (POST/PUT/DELETE) πρέπει να φέρουν synchronizer token συνδεδεμένο με τη session του χρήστη. Χρήση του
SameSite=Strictcookie attribute για συμπληρωματική προστασία στα session cookies. - Remove development artifacts: Καθιερωμένο pre-deployment check για αφαίρεση Burp PoC files,
.bak/.swp/.gitdirectories και test PHP info pages. Χρήση CI/CD lint stage που μπλοκάρει το deployment αν εντοπιστούν τέτοια patterns. - Patch Apache: Αναβάθμιση τουλάχιστον σε Apache 2.4.58 (May 2024) ή νεότερο για κάλυψη όλων των γνωστών 2.4.x CVEs. Σε Debian, χρήση
apt-get install --only-upgrade apache2με συστηματικό patching cadence. - Server header hardening: Στο Apache, ορίστε
ServerTokens ProdκαιServerSignature Offγια να απαλειφθεί η αποκάλυψη έκδοσης. Σε production, εξετάστε επίσης την επιβολή τουServerNameκαι την απενεργοποίηση τουmod_statusαπό εξωτερικές πηγές. - Security headers επιβολή: Προσθήκη
Strict-Transport-Security,Content-Security-Policy,X-Frame-Options: DENY,X-Content-Type-Options: nosniff,Referrer-Policy: strict-origin-when-cross-origin, καιPermissions-Policyμέσω globalmod_headersdirective ή reverse-proxy. - TLS: Επιβολή HTTPS με valid certificate (Let’s Encrypt ή enterprise CA), redirect 301 από
:80σε:443, και HSTS με preload (αν εφαρμόζεται). - Restrict PHP source extensions: Στο Apache config, προσθέστε
<FilesMatch "\.phps?$"> Require all denied </FilesMatch>ώστε ούτε ως 403 ούτε ως 200 να γίνεται δηλωτικό leak της ύπαρξης source files. - Detect & alert: Στο WAF / SIEM, alert rules για: POST σε
profile.phpμεmultipart/form-dataκαι fieldfile=από εξωτερική IP · GET requests προς.phps/.bak/.swp/.git/paths · directory-traversal patterns (..%2f,%2e%2e) · απότομες αυξήσεις 4xx από single source IP (indicator of enum).
Conclusion
Το συγκεκριμένο εργαστηριακό target συμπυκνώνει σε μία μοναδική εφαρμογή ένα μάθημα-κλειδί για κάθε defender: η συντήρηση «αθώου» development artifact (exploit.html), ο αλλόκοτος συνδυασμός cgi.fix_pathinfo=1 + unrestricted upload + απουσία CSRF, και η ορατότητα της PHP source extension μέσω 403, αρκούν για να μετατρέψουν μια εφαρμογή χωρίς authentication σε κρίσιμο RCE entry point. Η συστηματική enumeration phase του engagement (recon → directory bust → method enum → parameter fuzzing → header analysis) είναι το βασικότερο instrument του offensive operator — όχι κάποιο εξωτικό exploit. Το αντίστοιχο εργαλείο του blue team είναι η συστηματική hardening + threat-informed defense.
References
- OWASP — Unrestricted File Upload: https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload
- OWASP WSTG v4.2 — Testing for Code Injection: WSTG-INPV-11
- OWASP CSRF Prevention Cheat Sheet: cheatsheetseries.owasp.org
- CWE-434 — Unrestricted Upload of File with Dangerous Type: cwe.mitre.org/data/definitions/434.html
- CWE-352 — Cross-Site Request Forgery (CSRF): cwe.mitre.org/data/definitions/352.html
- CWE-538 — File and Directory Information Exposure: cwe.mitre.org/data/definitions/538.html
- MITRE ATT&CK v14 — T1190 Exploit Public-Facing Application: attack.mitre.org/techniques/T1190
- PHP Documentation —
cgi.fix_pathinfo: php.net - Apache HTTP Server 2.4 — Security Reports: httpd.apache.org/security
- NIST SP 800-115 — Technical Guide to Information Security Testing: nvlpubs.nist.gov
Το engagement εκτελέστηκε σε πλήρως απομονωμένο εργαστηριακό περιβάλλον με ρητή εξουσιοδότηση. Όλες οι ενέργειες ήταν μη-καταστροφικές, αναπαραγωγίσιμες και τηρήθηκαν αυστηρά εντός του ορισμένου scope (172.10.0.20). Καμία πρόσβαση σε πραγματικά production assets ή προσωπικά δεδομένα δεν πραγματοποιήθηκε. Το παρόν άρθρο τίθεται σε public availability αποκλειστικά για εκπαιδευτικούς και αμυντικούς σκοπούς, ώστε οι blue team αναγνώστες να εμπεδώσουν τις τεχνικές του αντιπάλου και να ενισχύσουν την αμυντική στάση των οργανισμών τους.