스캔: 22/ssh · 80/http(Apache 2.4.18) | 도구: gobuster · CrackStation · php-reverse-shell
이 글은 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 플래그 값 출력