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.

Στιγμιότυπο τερματικού: Επιβεβαίωση εμβέλειας — ip & ping
cmd-01 — Επιβεβαίωση εμβέλειας — ip & ping

Ακολουθεί full-range TCP SYN scan ολόκληρου του εύρους θυρών (1-65535). Ο στόχος εκθέτει μία και μόνο μία υπηρεσία.

Στιγμιότυπο τερματικού: Full TCP port scan με nmap
cmd-02 — Full TCP port scan με nmap

Service / version / default-script scan στην εντοπισμένη θύρα 80 και UDP top-50 για συμπληρωματική κάλυψη. Η MAC address δείχνει VirtualBox NIC, συνεπές με το lab profile.

Στιγμιότυπο τερματικού: Service detection & UDP top-50
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.

Στιγμιότυπο τερματικού: Web fingerprinting — whatweb & headers
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.

Στιγμιότυπο τερματικού: Αρχική σελίδα /index.html — δομή
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 είναι μηδενικού μεγέθους.

Στιγμιότυπο τερματικού: Gobuster — directory enumeration
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 στον επιτιθέμενο.

Στιγμιότυπο τερματικού: exploit.html — Burp CSRF PoC artifact
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.

Στιγμιότυπο τερματικού: profile.phps — 403 vs 404 source leak
cmd-08 — profile.phps — 403 vs 404 source leak

Επιπρόσθετα, ο έλεγχος για PHP cgi.fix_pathinfo setting δίνει θετικό αποτέλεσμα — ο PHP handler δέχεται PATH_INFO μετά την κατάληξη .php:

Στιγμιότυπο τερματικού: cgi.fix_pathinfo — PATH_INFO accepted
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 εκτελείται με επιτυχία.

Στιγμιότυπο τερματικού: Επιβεβαίωση upload — POST file= → FLAG{N7
cmd-10 — Επιβεβαίωση upload — POST file= → FLAG{N7

Διαφορικό testing επιβεβαιώνει ότι το FLAG{N7 εμφανίζεται μόνο όταν παρέχεται multipart με field file= · διαφορετικά field names (upload=, userfile=, image=) ή απλό POST body αγνοούνται. Σύγκριση μεταξύ GET και POST:

Στιγμιότυπο τερματικού: Diff GET vs POST — απομονωμένο marker flag
cmd-11 — Diff GET vs POST — απομονωμένο marker flag

Επιπρόσθετα παρατηρούμε ότι όταν το payload υπερβαίνει το post_max_size του PHP (π.χ. 10 MB), το marker εξαφανίζεται — υποδεικνύοντας ότι το FLAG{N7 εκτυπώνεται από το upload-success branch και όχι από κάποιον bypass μηχανισμό.

Στιγμιότυπο τερματικού: Large payload (10 MB) — marker απουσιάζει
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:

Στιγμιότυπο τερματικού: Post-exploitation — Linux enumeration template
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=Strict cookie attribute για συμπληρωματική προστασία στα session cookies.
  • Remove development artifacts: Καθιερωμένο pre-deployment check για αφαίρεση Burp PoC files, .bak / .swp / .git directories και 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 μέσω global mod_headers directive ή 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 και field file= από εξωτερική 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

Το engagement εκτελέστηκε σε πλήρως απομονωμένο εργαστηριακό περιβάλλον με ρητή εξουσιοδότηση. Όλες οι ενέργειες ήταν μη-καταστροφικές, αναπαραγωγίσιμες και τηρήθηκαν αυστηρά εντός του ορισμένου scope (172.10.0.20). Καμία πρόσβαση σε πραγματικά production assets ή προσωπικά δεδομένα δεν πραγματοποιήθηκε. Το παρόν άρθρο τίθεται σε public availability αποκλειστικά για εκπαιδευτικούς και αμυντικούς σκοπούς, ώστε οι blue team αναγνώστες να εμπεδώσουν τις τεχνικές του αντιπάλου και να ενισχύσουν την αμυντική στάση των οργανισμών τους.