#

Lazy admin 본문

3.1 THM/Linux

Lazy admin

0x470x45 2026. 6. 11. 16:47
 
TryHackMe · Writeup
PLATFORM TryHackMeOS LinuxDIFFICULTY Easy
gobuster → SweetRice CMS → mysql 백업(MD5 크랙) → 관리자 로그인 → PHP 업로드(RCE) → www-data → sudo perl/copy.sh → root
스캔: 22/ssh · 80/http(Apache 2.4.18)  |  도구: gobuster · CrackStation · php-reverse-shell
개요  gobuster로 노출된 SweetRice CMS의 /content/inc 디렉터리 리스팅에서 MySQL 백업(backup.sql)을 입수, 관리자 MD5 해시를 크랙(Password123)해 관리자 패널에 로그인한다. Media Center로 PHP 리버스 셸을 업로드해 www-data 셸을 얻고 user.txt를 획득. 권한상승은 www-data가 NOPASSWD로 실행 가능한 sudo perl backup.pl이 전역 쓰기 가능한 /etc/copy.sh를 root로 실행하는 점을 악용해 root 셸을 얻는다.
 

 

이 글은 THM의 Lazy Admin 방 기반으로 작성 하였습니다.

문제

1. user.txt

2. root.txt

 

포트스캔 결과, 22번 SSH, 80번 HTTP 포트가 활성화 되어 있는 것을 확인

22/tcp : OpenSSH 7.2p2 (Ubuntu)
80/tcp : Apache httpd 2.4.18 (Ubuntu)

 

웹 서비스가 활성화 되어 있으므로 80번 포트를 중심으로 gobuster 디렉터리 탐색 진행

/content 디렉터리(301), /server-status(403) 존재 확인

 

이어서 /cotent 경로 gobuster로 재탐색 진행

/images, /js, /inc, /as, /_themes, /attachment 등 여러 하위 디렉터리 노출 확인

 

/content/inc 접근 시 디렉터리 리스팅이 활성화되어 내부 파일이 그대로 노출되어 있는 것을 확인

mysql_backup 폴더 클릭

 

mysql_bakup_20191129023059-1.5.1.sql 백업 파일이 그대로 노출되어 있는 것을 확인

해당 .sql 파일 다운로드 실행

 

backup.sql 파일 내용 확인

파일 내부에서 관리자 계정 정보가 노출되어 있는것을 확인

username : manager

password (MD5) : 42f749ade7f9e195bf475f37a44cafcb

 

MD5 해시로 저장되어 있어 CrackStation을 통해 패스워드 크래킹 진행

크래킹 결과 비밀번호가 평문으로 Password123 인것을 확인

 

앞서 발견한 /content/as 경로 접근 시 SweetRice CMS 관리자 로그인 페이지가 노출되는 것을 확인

탈취한 관리자 계정 (manager / Password123)으로 로그인 시도

 

정상적으로 관리자 페이지에 로그인되는 것을 확인 후,

공격 머신의 ip 와 4444 포트 설정

리버스 셸 코드 .php 파일 준비

 

관리자 패널의 Media Center 메뉴에 파일 업로드 기능이 있는 것을 확인

파일 업로드 기능을 이용해 전에 작성한 리버스 셸 (lazyadmin.php) 파일 업로드 시도하였지만 

.php 확장자는 업로드 되지 않는 것을 확인

 

우회를 위해 .php 확장자를 .php5 확장자로 변경

아래 사진 참고

 

변경한 lazyadmin.php5 리버스 셸 파일 재 업로드 시 

Media Center 목록에 정상적으로 업로드 되는 것을 확인

 

Netcat 리스너를 열어 둔 뒤 업로드한 셸 파일 실행 시

정상적으로 연결되어 셸 권한 획득 

 

cd /home/itguy 경로 안에 user.txt 파일 확인

user.txt 플래그 값 출력

 

root 권한 획득을 위해 권한 상승 경로 탐색

홈 디렉터리에서 backup.pl 스크립트 발견  /etc/copy.sh 파일이 누구나 쓰기 가능한 권한으로

설정되어 있는 것을 확인

 

sudo -l 명령으로 현재 계정(www-data)이 비밀번호 없이 실행할 수 있는 명령을 확인
확인해 보면 www-data 계정은 /usr/bin/perl /home/itguy/backup.pl을 NOPASSWD로 실행할 수 있습니다. 

즉, 이 스크립트를 root 권한으로 실행할 수 있다는 의미입니다.

이어서 backup.pl의 내용을 살펴보면, 내부에서 system("sh", "/etc/copy.sh")를 호출하고 있습니다. 

그런데 앞 단계에서 

확인했듯이 /etc/copy.sh 파일은 누구나 수정할 수 있도록 설정되어 있습니다.

따라서 /etc/copy.sh에 루트 셸을 실행하는 명령을 넣은 다음, sudo로 backup.pl을 실행하면 그 명령이 root 

권한으로 실행되어 권한 상승이 가능합니다.

echo "/bin/bash -i" > /etc/copy.sh
sudo /usr/bin/perl /home/itguy/backup.pl

 

root 셸로 권한 상승되는 것을 확인 후, 

root 디렉터리 내  root.txt 플래그 값 출력

 

공격 체인 상세

  1. 정찰 — 22/ssh, 80/http(Apache 2.4.18). gobuster로 /content 발견 → SweetRice CMS 식별.
  2. 정보 노출 — /content/inc 디렉터리 리스팅 활성 → mysql_backup/backup.sql 다운로드 → 관리자 manager 계정의 MD5 해시 노출.
  3. 해시 크랙 & 로그인 — 42f749…cafcb를 CrackStation으로 크랙 → Password123 → /content/as SweetRice 관리자 로그인.
  4. RCE — 관리자 Media Center에 .php 리버스 셸 업로드·실행 → www-data 셸 → /home/itguy/user.txt.
  5. 권한 상승 — sudo -l = NOPASSWD /usr/bin/perl /home/itguy/backup.pl. backup.pl이 system("sh","/etc/copy.sh") 호출, copy.sh는 전역 쓰기 가능 → echo '/bin/bash -i' > /etc/copy.sh 후 sudo perl backup.pl → root → root.txt.

대응 방안

  • 디렉터리 리스팅 차단 — Apache Options -Indexes, 백업·SQL 파일을 웹 루트에 두지 않기.
  • 안전한 해시 & 비밀번호 — MD5 금지, bcrypt/argon2 사용. 추측 가능한 비밀번호(Password123) 금지.
  • 업로드 검증 — 확장자·콘텐츠 타입 화이트리스트, 업로드 디렉터리 실행 권한 제거.
  • sudo 최소화 — NOPASSWD 스크립트가 쓰기 가능한 파일을 실행하지 않게. 스크립트·설정은 root 소유 644로 고정.

'3.1 THM > Linux' 카테고리의 다른 글

Tomghost  (0) 2026.06.11
RootMe  (0) 2026.05.15
Thompson  (0) 2026.04.03
Overpass  (0) 2025.12.23
Anonymous  (0) 2025.12.23