
Black-box penetration test against HackSudo Thor : CVE-2014-6271 Shellshock RCE through Apache mod_cgi, chained with sudo misconfiguration and bash eval injection for full privilege escalation. Includes custom CSRF-aware brute force tooling and Metasploit RPC automation.
대상: HackSudo Thor (VulnHub)
목표: 루트 액세스 권한을 획득하고/root/proof.txt읽기
환경: pfSense 방화벽으로 분할된 격리된 VirtualBox 랩
이 저장소는 VulnHub에서 Vishal Waghmare가 게시한 의도적으로 취약하게 설계된 가상 머신 HackSudo Thor에 대해 수행된 부분 블랙박스 침투 테스트를 문서화합니다. 목표는 외부 공격자가 격리된 내부 시스템을 손상시키려는 실제 공격을 시뮬레이션하는 것이었으며, 주요 목표는 루트 액세스 권한을 획득하고 /root/proof.txt의 내용을 읽는 것이었습니다.
평가는 전체 침투 테스트 라이프사이클(수동 정찰, 네트워크 발견, 열거, 취약점 평가, 악용, 권한 상승, 사후 침투, 흔적 제거)을 따릅니다.
주요 사용 도구로는 네트워크 스캐닝을 위한 Nmap, 취약점 평가를 위한 Nessus, 주요 악용 및 사후 침투 플랫폼으로 Metasploit Framework가 사용되었습니다. John the Ripper, Hashcat, 온라인 Rainbow Table은 암호 크래킹 단계에서 사용되었지만, 모든 시도는 사용된 해싱 알고리즘의 강력함으로 인해 결국 실패했습니다.
가상 랩은 VirtualBox에서 전적으로 구축되었으며, pfSense 2.7.2 방화벽이 관리하는 세 개의 개별 보안 영역을 갖춘 현실적인 엔터프라이즈 네트워크를 시뮬레이션하도록 설계되었습니다. 세 개의 NAT 네트워크는 다음과 같이 구성되었습니다. Kali 공격자 머신이 있는 공용 인터넷을 시뮬레이션하는 WAN 영역, 대상 머신을 호스팅하는 DMZ 영역, 그리고 범위 외 머신이 포함된 내부 LAN 영역입니다.``` Internet Zone — NatNetwork (10.0.2.0/24) │ │ Kali Linux 2025.4 [attacker] — 10.0.2.9 │ pfSense WAN interface — 10.0.2.8 │ ├── pfSense Firewall (boundary device) │ ├── DMZ Zone — DMZnat (10.0.4.0/24) │ ├── HackSudo Thor [TARGET] — 10.0.4.3 │ └── DVWA — 10.0.4.4 (out of scope) │ └── LAN Zone — LANnat (10.0.3.0/24) ├── Metasploitable 2 — 10.0.3.5 (out of scope) └── Windows XP Cyberlab — 10.0.3.4 (out of scope)

*pfSense에서 관리하는 논리적 네트워크 토폴로지 보안 영역*
WAN 인터페이스는 DHCP에 의해 `10.0.2.8/24`로 할당되었고, LAN 인터페이스는 `10.0.3.1/24`로 설정되었으며, OPT1(DMZ) 인터페이스는 `10.0.4.1/24`로 설정되었습니다. 실습 환경에 의도적인 오구성을 도입하기 위해 pfSense WAN 인터페이스에 포트 80을 의도적으로 노출시켜, 내부 네트워크의 주요 진입점 역할을 하는 일반적인 실제 운영 관리자 패널 노출을 시뮬레이션했습니다.
---
## 공격 체인 요약```
[Kali Linux — 10.0.2.9]
│
│ CSRF-aware Python brute force → admin / pfsense
▼
[pfSense webConfigurator — 10.0.2.8:80]
│
│ Firewall rules disabled → DMZ and LAN now reachable
▼
[HackSudo Thor — 10.0.4.3]
│
│ Shellshock RCE (CVE-2014-6271)
│ Apache mod_cgi → /cgi-bin/shell.sh
▼
[Meterpreter shell — www-data]
│
│ sudo -u thor /home/thor/hammer.sh
│ Command injection via eval → bash -i payload
▼
[Interactive shell — thor]
│
│ GTFOBins: sudo service ../../bin/bash
▼
[Root shell]
│
├── /root/proof.txt captured ✅
├── /etc/shadow + /etc/passwd exfiltrated
└── SSH RSA backdoor planted
표적 환경과 접촉하기 전에 공개 출처에서만 정보를 수집했습니다. 두 가지 주요 출처는 HackSudo Thor의 공식 VulnHub 등록 페이지와 작성자의 공개 GitHub 프로필이었습니다.
VulnHub 페이지에서는 표적이 Linux 기반 시스템이며 난이도가 쉬움~중간 정도이고 proof.txt 플래그를 찾는 것이 목표임을 확인했습니다. 작성자의 GitHub 프로필을 검토하여 추가 정보를 얻었습니다. Vishal Waghmare는 전체 HackSudo 시리즈에서 권한 상승을 핵심 과제로 하는 Linux 부트-투-루트 시스템을 일관되게 설계합니다. 이는 능동 단계에 진입하기 전의 위협 모델을 형성했습니다. HTTP와 SSH 서비스가 가장 유력한 공격 표면이었고, 권한 상승 경로는 sudo 설정 오류, SUID 바이너리 남용 또는 맞춤형 서비스 악용을 포함할 것으로 예측되었습니다.
이러한 작성자 패턴 분석은 실제 작업에서도 중요합니다. 시스템이 어떻게 설계되었을 가능성이 있는지, 관리자가 어떤 유형의 약점을 반복할 가능성이 있는지 이해하면 패킷을 하나도 보내지 않고도 방향을 잡을 수 있습니다.
이 단계에서는 환경과 직접적으로 능동적인 접촉을 시작했습니다. 목표는 모든 활성 호스트를 식별하고, 네트워크 경계를 이해하며, 주요 표적으로 초점을 좁히기 전에 전체 공격 표면을 파악하는 것이었습니다.
먼저 WAN 서브넷(10.0.2.0/24)에 대해 최소한의 소음을 발생시키는 Nmap 핑 스캔(-sn)을 실행하여 활성 호스트를 발견했습니다. 세 개의 호스트가 식별되었습니다. 10.0.2.1과 10.0.2.2는 표준 VirtualBox 인프라 주소였으므로, 10.0.2.8만이 유일한 비인프라 호스트로 남았습니다. 그 시스템이 즉시 초점이 되었습니다.
10.0.2.8에 대한 전체 SYN 은밀 스캔은 전혀 결과를 반환하지 않았습니다. 이는 오류가 아닌 예상된 동작이었습니다. 엔터프라이즈 방화벽은 포트 스캔에 응답하지 않도록 설계되어 있으며, 패킷을 응답하지 않고 자동으로 삭제합니다. 결과가 없다는 것은 그 자체로 이 시스템이 트래픽을 능동적으로 필터링하는 네트워크 경계 장치임을 확인시켜 주었습니다.
패킷 스캔에 의존하지 않고 실제 실행 중인 서비스를 확인하기 위해 curl을 사용하여 직접 HTTP 요청을 보냈습니다. 이 접근 방식을 선택한 이유는 일반 웹 요청이 스캐닝 도구보다 필터링될 가능성이 훨씬 낮기 때문입니다. 응답은 HTTP/1.1 200 OK와 Server: nginx 헤더, 그리고 pfSense라는 페이지 제목으로 돌아왔으며, 이는 WAN 인터페이스에서 웹 구성기가 포트 80에서 직접 접근 가능함을 확인시켜 주었습니다.
로그인 페이지가 확인되면 다음 단계는 자격 증명을 복구하는 것이었습니다. 처음에는 Hydra가 무차별 대입 도구로 선택되었으나, 두 가지 이유로 실패했습니다. 첫 번째는 실용적인 문제로 rockyou.txt에는 1400만 개 이상의 항목이 포함되어 있어 이 평가의 시간 범위 내에서는 비현실적이었습니다. 두 번째는 기술적이며 더 중요한 문제였습니다. pfSense 2.7.2는 CSRF 토큰 보호를 구현하여 모든 페이지 로드 시 고유한 암호화 토큰을 생성하며, 이 토큰은 자격 증명과 함께 제출되어야 합니다. Hydra의 HTTP POST 모듈은 정적 요청 본문을 제출하며 시도마다 새로운 토큰을 동적으로 가져오는 메커니즘이 없기 때문에 비밀번호를 확인하기 전에 모든 제출이 거부되었습니다.
이를 해결하기 위해 브라우저의 전체 로그인 프로세스를 재현하는 사용자 정의 Python 스크립트를 작성했습니다. 각 비밀번호 시도마다 스크립트는 새 세션을 열고 로그인 페이지를 로드한 후 HTML 양식에서 현재 CSRF 토큰을 추출하고 브라우저가 하는 것처럼 해당 토큰과 함께 자격 증명을 제출합니다. CeWL을 사용하여 pfSense 로그인 페이지를 크롤링하고 관련 용어를 추출한 후 fasttrack.txt로 보완하여 알려진 기본 자격 증명을 포함하는 사용자 정의 단어 목록을 구축했습니다.
스크립트는 자격 증명 admin / pfsense (변경되지 않은 기본값)을 복구했습니다.
pfSense 자격 증명을 복구하는 사용자 정의 Python 스크립트
대시보드 접근이 설정되면 pfSense 인터페이스 구성을 검토하여 전체 내부 토폴로지를 이해했습니다. 이를 통해 WAN에서는 보이지 않았던 두 개의 서브넷이 드러났습니다. LAN(10.0.3.0/24)과 DMZ(10.0.4.0/24)입니다. 그런 다음 웹 인터페이스를 통해 WAN 방화벽 규칙을 비활성화하고 공격자의 IP에서 두 서브넷으로의 트래픽을 허용하는 두 개의 통과 규칙을 추가했습니다.
두 서브넷에 대한 Nmap 핑 스캔으로 6개의 활성 호스트가 식별되었습니다. 그중 4개는 더 자세히 열거되었으며, 10.0.4.1과 10.0.3.1(pfSense 게이트웨이 인터페이스에 속함)은 제외되었습니다. 버전 탐지, 기본 NSE 스크립트, OS 핑거프린팅을 포함한 결합 서비스 열거 스캔이 4개 호스트 모두에 대해 동시에 실행되었습니다. 결과를 수동 정찰과 교차 참조하여 토폴로지의 모든 시스템이 식별되었습니다.
표적은 10.0.4.3으로 확인되었습니다. 이후의 모든 활동은 이 시스템에만 집중되었습니다.
표적이 식별되면, 공격 표면을 매핑하고 실행 가능한 익스플로잇 경로를 결정하기 위해 해당 서비스에 대한 심층 분석이 수행되었습니다. 이 단계에서는 Metasploit Framework가 주요 플랫폼으로 사용되었으며, 특히 PostgreSQL 백엔드가 모든 스캔 결과(호스트, 서비스, 취약점)를 세션 간에 유지하여 이후 단계에서 다시 스캔하지 않고 참조할 수 있기 때문입니다.
시작하기 전에 msfdb init으로 Metasploit을 초기화하고, db_status로 데이터베이스 연결을 확인했으며, 이후 모든 작업은 msfconsole 내에서 수행되었습니다.
db_nmap 명령을 사용하여 10.0.4.3에 대한 전체 스캔(SYN 은밀 스캔, 서비스 버전 탐지, 기본 NSE 스크립트, OS 핑거프린팅, 모든 65,535 TCP 포트)이 실행되었습니다. 결과는 데이터베이스에 자동으로 저장되었고 hosts 및 services 명령으로 검색되었습니다. FTP(포트 21, Pure-FTPd), SSH(포트 22, OpenSSH 7.9p1), HTTP(포트 80, Apache 2.4.38)의 세 가지 서비스가 열려 있는 것으로 확인되었습니다.
그런 다음 각 서비스는 대상 Metasploit 보조 모듈을 사용하여 더 자세히 열거되었습니다. HTTP 서비스가 가장 많은 주목을 받았습니다. dir_scanner 및 http_crawler 모듈을 사용하여 웹 서버의 모든 접근 가능한 경로와 엔드포인트를 매핑했습니다. 여기서 가장 중요한 발견은 /cgi-bin/ 디렉토리와 shell.sh라는 스크립트였습니다. 별도로 news.php의 HTML 소스 코드를 수동으로 검토한 결과 작성자가 /cgi-bin/ 디렉토리를 참조하는 숨겨진 주석을 발견했으며, 이는 CGI 기반 취약점을 암시하는 의도적인 힌트였습니다. FTP 서비스는 익명 접근이 비활성화되어 있는지 확인되었고, 버전 문자열은 CVE 교차 참조를 위해 기록되었습니다. SSH 배너도 같은 목적으로 검색되었습니다.
공격 표면이 완전히 매핑되면 두 가지 접근 방식, 즉 자동화된 Nessus 스캔과 각 서비스에 대한 수동 공격자 추론을 사용하여 구조화된 취약점 평가가 수행되었습니다.
CGI 스캔 및 웹 애플리케이션 테스트를 명시적으로 활성화하고 포트 21, 22, 80을 대상으로 하는 사용자 정의 Nessus 정책이 생성되었습니다. 이러한 설정은 기본적으로 활성화되어 있지 않으며 여기서 중요했습니다. 활성화하지 않으면 CGI 엔드포인트가 테스트되지 않았을 것입니다. 스캔은 약 11분 동안 실행되었으며 총 41개의 결과를 반환했습니다. 실행 가능한 결과는 다음과 같습니다.
/cgi-bin/shell.sh에 대한 두 개의 Shellshock 발견 항목이 즉시 우선순위가 되었습니다. CVE-2014-6271은 CVSS 점수 9.8로 인증되지 않은 원격 코드 실행을 가능하게 하며, 이는 스캔에서 가장 높은 영향을 미치는 발견입니다. CVE-2014-6278은 동일한 취약점의 불완전한 패치를 나타내므로 부분적으로 패치된 시스템도 여전히 익스플로잇 가능합니다. SSH Terrapin 약점은 중간자(MITM) 위치 없이는 익스플로잇이 불가능한 것으로 평가되었습니다. 나머지 발견은 이 작업에서 의미 있는 익스플로잇 가치가 없었습니다.
익스플로잇으로 이동하기 전에 Shellshock 발견은 Nmap의 http-shellshock NSE 스크립트를 /cgi-bin/shell.sh에 직접 대상으로 지정하여 독립적으로 확인되었습니다. 익스플로잇 전 독립적 확인은 방법론에서 중요한 단계입니다. 이는 취약점이 실제이며 스캐너의 오탐(false positive)이 아님을 확인하고, 작동하지 않는 익스플로잇을 시도하는 데 시간을 낭비하지 않도록 합니다. NSE 스크립트는 엔드포인트가 취약함을 확인했으며, CVE-2014-6271이 기본 공격 벡터로 선택되었습니다.
Shellshock이 확인되면서 익스플로잇 단계가 시작되었습니다. 이 취약점은 Apache mod_cgi가 CGI 스크립트가 호출될 때 HTTP 요청 헤더를 환경 변수로 Bash에 전달하기 때문에 존재합니다. 패치되지 않은 Bash 버전에서는 환경 변수에 특수하게 조작된 함수 정의가 포함되어 있으면 정의 뒤에 추가된 모든 명령이 즉시 실행됩니다. /cgi-bin/shell.sh에 대한 요청의 User-Agent 헤더에 이 페이로드를 삽입함으로써 인증 없이 서버에서 임의의 명령을 실행할 수 있습니다.
Metasploit 모듈 exploit/multi/http/apache_mod_cgi_bash_env_exec는 이 작업을 완전히 자동화합니다. 모듈은 RHOSTS를 10.0.4.3으로, TARGETURI를 /cgi-bin/shell.sh로, 페이로드를 linux/x86/meterpreter/reverse_tcp로 설정하고 리스너를 포트 4444의 Kali 시스템으로 지정하여 구성되었습니다. 모듈을 실행하면 악의적인 요청이 전송되고 서버가 페이로드를 실행했으며, Metasploit이 들어오는 연결을 수신하여 www-data로 Meterpreter 세션을 설정했습니다.
Shellshock 익스플로잇이 실행되고 www-data로 Meterpreter 리버스 셸이 설정됨
www-data에서 시작하여 시스템에 대한 접근 범위는 처음에 알려지지 않았습니다. 즉각적인 우선 순위는 현재 위치(현재 활성 사용자, 존재하는 다른 계정, 더 높은 권한으로 가는 경로)를 이해하는 것이었습니다.
Meterpreter 세션을 원시 시스템 셸로 내리고 Python의 pty 모듈을 사용하여 적절한 대화형 터미널인 의사 터미널을 생성했습니다. /etc/passwd를 읽고 /home/을 나열하여 시스템에 thor라는 사용자가 있음을 확인했습니다. 초기 ls -la /home/thor/는 권한 거부를 반환했으므로 디렉토리 권한에 관계없이 thor가 소유한 모든 파일을 찾기 위해 find / -user thor 2>/dev/null을 사용하여 파일 시스템을 검색했습니다. 이를 통해 /usr/local/sbin/ls에 비정상적인 바이너리가 발견되었습니다. 표준 시스템 바이너리가 아닌 ls라는 파일이었습니다. 그 내용은 Thor가 소유한 사용자 정의 스크립트임을 보여주었으며, 이는 나중에 조사하기 위해 기록되었습니다.
현재 사용자의 sudo 권한을 확인하는 표준 사후 익스플로잇 단계인 sudo -l이 수행되었습니다. 이를 통해 www-data가 thor 사용자로 비밀번호 없이 /home/thor/hammer.sh를 실행할 수 있음이 드러났으며, 이는 정당한 운영상의 정당성이 없는 NOPASSWD 규칙이었습니다.
sudo -l이 www-data가 비밀번호 없이 thor로 hammer.sh를 실행할 수 있음을 확인함
hammer.sh에 대한 직접 읽기 접근은 디렉토리 권한으로 인해 차단되었으므로 먼저 sudo -u thor /home/thor/./hammer.sh로 실행하여 동작을 관찰했습니다. 스크립트는 두 개의 대화형 프롬프트("Secret Key" 및 "Secret Message")를 제시했습니다. 첫 번째 프롬프트는 입력을 인사말로 다시 출력했습니다. 두 번째 프롬프트는 입력을 처리한 후 종료되었습니다. 이 두 동작의 차이는 중요했습니다. 두 프롬프트 모두 단순히 입력을 출력한다면 둘 다 흥미롭지 않을 것입니다. 두 번째 프롬프트가 응답하기 전에 입력을 처리했다는 사실은 셸 명령에 값을 전달하고 있음을 시사했으며, 이는 잘 문서화된 명령 삽입 공격 표면인 eval 문과 일치하는 패턴이었습니다.
두 번째 실행에서는 첫 번째 프롬프트에 빈 입력을 전달했습니다. 두 번째 프롬프트에는 bash -i라는 삽입 페이로드를 제공했습니다. 이렇게 하면 thor로 대화형 셸이 생성되었습니다.
bash -i 페이로드가 hammer.sh에 삽입됨
thor로 sudo -l이 다시 실행되었습니다. 이를 통해 /usr/bin/cat 및 service에 대해 root로 제한 없는 NOPASSWD 접근 권한이 드러났습니다. service 규칙이 가장 중요했습니다. GTFOBins의 sudo service 기술은 서비스 이름 인수로 경로 순회 문자열을 전달할 수 있도록 합니다. ../../bin/bash를 제공하면 service 바이너리가 순회를 해결하고 root 권한으로 /bin/bash를 호출합니다.```bash
sudo service ../../bin/bash
이로 인해 전체 루트 셸이 생성되었습니다.

*GTFOBins sudo service 경로 탐색을 통해 획득한 루트 셸 확인됨*
## 7단계: 사후 침투
루트 신원이 확인됨에 따라, 사후 침투 단계는 시스템 환경 이해, 민감 데이터 추출, 지속적 접근 확보의 세 가지 영역에 초점을 맞췄습니다.
### 시스템 정보 및 플래그
대상의 신원을 확인하고 조치 권장 사항에 대한 맥락을 구축하기 위해 먼저 기본 시스템 열거가 수행되었습니다(커널 버전, OS 릴리스, 네트워크 구성 포함). 시스템은 `10.0.4.3`에서 커널 4.19.0-17-686-pae를 실행하는 Debian GNU/Linux 10 (Buster)으로 확인되었습니다.
루트 홈 디렉터리가 나열되어 `proof.txt`와 `root.txt`가 발견되었습니다. `proof.txt` 파일을 읽어 이번 작업의 명시된 목표인 기본 플래그를 획득했습니다.

*proof.txt 내용 - 기본 플래그 획득*
### 자격 증명 추출 및 비밀번호 크래킹
`/etc/shadow` 및 `/etc/passwd` 파일을 `/tmp`에 복사하고 Meterpreter를 통해 공격자 머신으로 다운로드했습니다. 이 두 파일은 오프라인 크래킹에 필요한 시스템 사용자 계정과 비밀번호 해시를 함께 제공합니다.
여러 크래킹 접근 방식이 시도되었습니다. John the Ripper는 두 해시 모두 SHA-512crypt이며 반복 비용 요소가 5,000임을 식별했습니다. `rockyou.txt`를 사용한 첫 번째 시도는 몇 시간 동안 실행된 후 결과 없이 중단되었습니다. SHA-512crypt의 계산 비용으로 인해 GPU 가속 없이는 무차별 사전 공격이 매우 느려집니다. 정찰 중 수집된 정보를 바탕으로 구축된 맞춤형 타겟 단어 목록을 사용한 두 번째 시도는 빠르게 완료되었지만 일치 항목이 없었습니다.
다음으로 온라인 레인보우 테이블 서비스인 CrackStation이 시도되었지만 두 항목 모두에 대해 인식되지 않는 해시 형식을 반환했습니다. 이는 예상된 결과였습니다. SHA-512crypt는 해싱 전에 각 해시에 고유한 무작위 솔트를 추가하므로, 동일한 비밀번호가 계정마다 다른 해시를 생성합니다. 레인보우 테이블은 알려진 비밀번호에 대한 해시를 미리 계산하여 작동하지만, 가능한 모든 솔트 값에 대해 별도의 테이블이 필요하므로 솔트 처리된 해시에 대해 이 접근 방식이 완전히 비실용적입니다.
최종 시도에는 Hashcat이 사용되었으며, 세 가지 단어 목록이 연속적으로 사용되었습니다: `fasttrack.txt`(4초 만에 소진), 맞춤형 타겟 목록(일치 항목 없이 소진), `rockyou.txt`의 상위 100,000개 항목(3분 후 실패). 모든 비밀번호 크래킹 시도는 성공하지 못했습니다. 높은 반복 횟수를 가진 솔트 처리된 SHA-512crypt의 사용이 그 이유입니다. 이 알고리즘은 정확히 이러한 오프라인 공격에 저항하도록 계산 비용이 많이 들도록 설계되었습니다.
### SSH 키 검색
`find`를 사용하여 RSA 개인 키 파일 및 PEM 인증서에 대한 파일 시스템 검색도 수행되었습니다. 발견된 개인 키는 해당 공개 키를 신뢰하는 다른 시스템에 대한 액세스 권한을 부여할 수 있으며, 이는 귀중한 측면 이동 기회입니다. 다른 시스템에 속한 개인 키는 발견되지 않았습니다.
### 백도어 배포
지속적인 접근은 루트 계정의 `authorized_keys` 파일에 RSA 공개 키를 주입하여 구현되었습니다. SSH 키 기반 인증이 선택된 이유는 비밀번호에 의존하지 않으며 `authorized_keys` 파일이 특별히 감사되지 않는 한 탐지하기 어렵기 때문입니다. Kali 머신에서 4096비트 RSA 키 쌍이 생성되었고, 올바른 디렉터리 및 파일 권한이 설정된 상태에서 공개 키가 대상의 `/root/.ssh/authorized_keys`에 추가되었습니다. 개인 키를 사용하여 대상에 다시 연결하여 백도어가 작동하는지 확인했습니다.

*개인 키 인증을 통해 지속적인 루트 액세스 확인됨*
### 자동화
전체 사후 침투 체인을 자동화하기 위해 맞춤형 Metasploit RPC Python 스크립트(`thor_full_chain.py`)도 개발되었습니다. 이 스크립트는 라이브 Metasploit RPC 세션에 연결하여 `www-data` 셸 안정화, thor로 권한 상승을 위한 hammer.sh 주입, GTFOBins를 통한 root로의 권한 상승, 플래그 캡처, 자격 증명 추출, 로컬 파일에 타임스탬프가 기록된 백도어 배포의 전체 시퀀스를 처리합니다. 이는 Metasploit RPC API를 사용한 공격 체인 자동화 기능을 보여주는 추가 인도물이었습니다. 전체 구현은 `scripts/thor_full_chain.py`를 참조하십시오.
## 8단계: 흔적 은폐
최종 단계에서는 대상 시스템과 Kali 공격자 머신 모두에서 침입 증거를 제거하는 작업이 포함되었습니다. 대상에서 Apache 액세스 로그는 초기 익스플로잇을 트리거한 원시 Shellshock HTTP 요청을 포함하고 있기 때문에 지워야 할 가장 중요한 파일이었습니다. 인증 로그는 권한 상승 단계에서 사용된 모든 sudo 명령을 저장하고 있었기 때문에 지워졌습니다. syslog, 바이너리 로그인 레코드(`wtmp`, `btmp`, `lastlog`), 그리고 `root`와 `www-data`의 bash 기록이 모두 덮어쓰여지고 비어 있는지 확인되었습니다.
Kali에서는 `workspace -d default`로 Metasploit 작업 공간이 삭제되었고, 다운로드된 자격 증명 파일이 제거되었으며, SSH 키 쌍이 삭제되고 bash 기록이 지워졌습니다. 각 단계는 다음 단계로 넘어가기 전에 확인되었습니다.
SSH 백도어에 대해 의도적으로 하나의 예외가 적용되었으며, 관련 키 파일은 평가 프레젠테이션에서 데모 목적으로 필요했기 때문에 이 단계에서 대상에 유지되고 제거되지 않았습니다.
## 악용된 취약점
| 취약점 | CVE | CVSS | 구성 요소 | 방법 |
|--------------|-----|------|-----------|--------|
| Shellshock RCE | CVE-2014-6271 | 9.8 | Apache mod\_cgi + 패치되지 않은 Bash | 악의적인 User-Agent 헤더를 사용한 Metasploit |
| 기본 자격 증명 | — | — | pfSense webConfigurator | 설치 후 변경되지 않은 `admin / pfsense` |
| Sudo 잘못된 구성 (www-data) | — | — | `/etc/sudoers` | thor로 실행 가능한 NOPASSWD `hammer.sh` |
| hammer.sh의 명령 주입 | — | — | 사용자 정의 bash 스크립트 | `bash -i` 페이로드를 통한 `eval` 주입 |
| Sudo 잘못된 구성 (thor) | — | — | `/etc/sudoers` | root로 제한 없는 NOPASSWD `service` |
---
## 사용된 도구
| 도구 | 목적 |
|------|---------|
| Nmap | 호스트 발견, 포트 스캐닝, OS 핑거프린팅, NSE Shellshock 확인 |
| Metasploit Framework | 데이터베이스 기반 열거, 익스플로잇, Meterpreter, 사후 침투 |
| Nessus Essentials | CGI 및 웹 애플리케이션 스캐닝을 통한 구조화된 취약점 평가 |
| Hydra | CSRF 보호로 인해 실패한 초기 pfSense 무차별 대입 시도 |
| CeWL | pfSense 로그인 페이지 크롤링을 통한 맞춤형 단어 목록 생성 |
| Python 3 + BeautifulSoup | CSRF 인식 pfSense 무차별 대입 스크립트 |
| pymetasploit3 | 전체 공격 체인 자동화를 위한 Metasploit RPC API 클라이언트 |
| John the Ripper | 오프라인 SHA-512crypt 해시 크래킹 |
| Hashcat | GPU 가속 SHA-512crypt 크래킹 시도 |
| CrackStation | 온라인 레인보우 테이블 조회 |
| GTFOBins | sudo service 권한 상승 기술 참조 |
| curl | pfSense WAN에 대한 HTTP 서비스 확인 |
---
## 권장 사항
**Bash를 즉시 패치하십시오.** Shellshock 취약점은 이 Debian 10 시스템에서 Bash가 한 번도 업데이트되지 않았기 때문에 존재합니다. `apt-get update && apt-get upgrade bash`를 실행하면 취약점이 제거됩니다. 패치 외에도 CGI 스크립트가 운영상 필요하지 않은 경우 Apache 구성에서 `/cgi-bin/` 디렉터리를 완전히 비활성화하여 Bash 버전에 관계없이 공격 표면을 제거해야 합니다.
**sudo 규칙을 감사하고 강화하십시오.** 두 개의 NOPASSWD sudo 규칙이 전체 권한 상승 체인을 구성했습니다. 두 규칙 모두 정당한 근거가 없습니다. `/etc/sudoers` 파일을 검토하고 두 항목을 모두 제거해야 합니다. 향후 sudo 구성에는 최소 권한 원칙이 적용되어야 하며, 계정은 실제로 필요한 특정 액세스 권한만 가져야 하며 그 이상은 안 됩니다.
**셸 스크립트에서 eval을 제거하십시오.** `hammer.sh` 스크립트는 사용자 입력을 검증이나 정화 없이 `eval` 문에 직접 전달했습니다. 이것이 명령 주입을 가능하게 한 원인이었습니다. 사용자 입력을 받는 셸 스크립트에서는 `eval` 사용을 완전히 피해야 합니다. 이는 거의 항상 공격 표면이기 때문입니다. 입력은 처리 전에 엄격한 허용 목록에 대해 검증되어야 합니다.
**pfSense 기본 자격 증명을 변경하고 액세스를 제한하십시오.** webConfigurator가 변경되지 않은 기본 자격 증명 `admin / pfsense`를 사용하여 WAN 인터페이스에 노출되었습니다. 설치 직후 기본 자격 증명을 변경해야 합니다. webConfigurator는 WAN에서 절대 접근 가능해서는 안 됩니다. 액세스는 LAN 또는 전용 관리 인터페이스로만 제한되어야 합니다.
**중앙 집중식 로깅을 구현하십시오.** 8단계에서 모든 로컬 로그가 몇 분 안에 지워져 대상 시스템에 침입 흔적이 남지 않았습니다. 이는 대상에 중앙 집중식 로그 관리가 없음을 보여주었습니다. 프로덕션 환경에서는 로그를 실시간으로 원격 SIEM으로 전달해야 합니다. 이렇게 하면 공격자가 로컬에서 로그를 지우더라도 증거가 이미 시스템 외부에 보존되어 변조될 수 없습니다.
---
## 저장소 구조```
hacksudo-thor-pentest/
│
├── README.md
├── report.pdf ← Full penetration testing report
│
├── scripts/
│ ├── pfsense_brute.py ← CSRF-aware pfSense brute force script
│ └── thor_full_chain.py ← Metasploit RPC attack chain automation
│
└── screenshots/
├── network.PNG
│
├── Discovery/
│ └── pfsenselogin.png
│
└── exploit/
├── sheellockexploit.PNG
├── sudol.PNG
├── hammer.bash-i.PNG
├── privilage escaltiontoroot.PNG
├── proof.PNG
└── backdoor.PNG
본 침투 테스트는 Oracle VirtualBox로 구축된 자체 포함된 격리된 가상 실험실 환경에서만 수행되었습니다. HackSudo Thor는 보안 교육 및 실습을 명시적 목적으로 VulnHub에 게시된 의도적으로 취약한 CTF 머신입니다.
| 필드 | 세부 정보 |
|---|
| 표적 | HackSudo Thor |
| 작성자 | Vishal Waghmare (@hacksudo) |
| 출시일 | 2021년 8월 3일 |
| 난이도 | 쉬움~중간 |
| OS | Linux (Debian) |
| 형식 | VirtualBox OVA |
| DHCP | 활성화됨 |
| 예상 공격 표면 | HTTP, SSH, sudo 설정 오류 가능성 |
| IP 주소 | 주요 서비스 | OS | 식별된 시스템 |
|---|
| 10.0.4.3 | SSH 7.9p1, Apache 2.4.38, FTP | Linux (Debian) | HackSudo Thor |
| 10.0.4.4 | Apache 2.4.29, DVWA v1.10 | Linux (Ubuntu) | DVWA |
| 10.0.3.4 | Microsoft IIS 5.1 | Windows XP/2003 | WinXP Cyberlab |
| 10.0.3.5 | vsftpd 2.3.4, SSH, Apache 2.2.8 | Linux (Ubuntu) | Metasploitable 2 |
| 심각도 | 발견 | CVE | CVSS v3 |
|---|
| 심각 | Shellshock RCE | CVE-2014-6271 | 9.8 |
| 심각 | Shellshock Incomplete Fix | CVE-2014-6278 | 8.8 |
| 중간 | SSH Terrapin Weakness | CVE-2023-48795 | 5.9 |
| 중간 | 탐색 가능한 웹 디렉토리 | — | 5.3 |
| 중간 | 클릭재킹 / X-Frame-Options 없음 | CWE-693 | 4.3 |
| 낮음 | ICMP 타임스탬프 공개 | CVE-1999-0524 | 2.1 |