[HTB] Hack The Box의 시작과 CAP (Easy)
Hack The Box 시작
이번에 동아리에서 하던 프로젝트들도 끝났겠다. 슬슬 또 할 것을 찾아나선 나는 레드라쿤 커뮤니티에서 스터디를 모집한다는 글을 보고 바로 Saturnx Operators
에 지원하게 되었다.
그렇게 이번주에 풀어야 하는 문제는 Hack The Box
의 초보자 단계 문제인 Cap이다.
그리고 필자는 일단 HTB에서 머신을 풀어보는 것은 처음이기도 하고 다른 문제들 풀때 매번 그러했듯 시작부터 뭔가 샛길로 새는 경향이 있었기에 이번에는 Guided Mode
로 설정하고 진행하려고 한다.
위 사진처럼 설정하면 각 순서를 알려주기에 진행하기 쉽달까?
정 못 풀겠거나 문제를 푼 뒤 이게 맞게 푼건지 확인하고 싶다면 Official Writeup
을 보는 것도 좋은 생각이다.
일단 머신이 꺼져있으니 켜보자.
이렇게 IP 주소가 나오게 되었고. 이 머신에 접속하기 위해서(?)는 vpn에 접속할 필요가 있다. 특히 HTB는 openvpn
을 사용하니 인터넷에 들어가 검색해 보면 바로 연결할 수 있다.
처음 connect to HTB
를 눌러 들어가보면 이렇게 Machines
와 Starting Point
라는 것이 보일텐데 둘의 차이는 다음과 같다.
- Machines (US FREE 2 서버)
접속 목적: Cap 머신과 같은 일반적인 실전 해킹 챌린지를 풀기 위한 메인 랩.
설명: 이 네트워크에 접속해야만
Machines
목록에 있는 다양한 난이도의 머신들과 통신하고 해킹을 시도할 수 있다.
- Starting Point (US STARTINGPOINT 1 서버)
접속 목적: HTB 입문자들을 위한 튜토리얼용 머신을 풀기 위한 전용 랩.
설명: 이 네트워크는 완전히 분리되어 있으며, 오직
Starting Point
섹션에 있는 가이드 머신들에만 접근할 수 있다.
고로 필자가 풀려는 CAP
머신에 접속하기 위해서는 Machines
에 접속해야한다.
들어가보면 이렇게 OpenVPN
을 이용하여 머신에 접속할지 Pwnbox
를 이용하여 접속할지에 대해 선택하게 한다.
OpenVPN
은 말 그대로 openvpn을 이용하여 cli로 접속하여 문제를 푸는거고 Pwnbox
는 HTB
에서 제공하는 Parrot Linux
를 이용하여 웹페이지에서 문제를 풀 수 있게 해주는 방식이다.
필자는 openvpn을 사용하는걸 선호하지만 일단 한번 Pwnbox의 사용법을 보도록 하자.
Pwnbox
를 선택하여 들어가면 위와 같이 몇 시간동안 사용할 수 있는지 (Hours Left), 서버를 어디로 사용할건지 (Server)에 대해 나와있고 PWNBOX LOCATION
에서 핑이 얼마나 되는지도 나와있다. 사진에서는 United States East
로 잡혔고 26ms정도의 핑차이가 있다고 한다.
이 때 시간 제한 없이 사용하거나 커스터마이징을 맘대로 하고 싶다면 VIP 구독을 해야한다.
구독하면 본래 여러 사람이 사용하는 머신(문제) 인스턴스를 개인만 사용 할 수 있게 돌릴 수도 있고 그 외의 플랫폼에서 올라온 문제들이나 곧 나온 HTB 랩들을 플레이 해볼 수 있다고 한다.
필요하다면 월 23,482원
정도이니 구독 해보는 것도 나쁘지 않을수도?
필자는 일단은 OpenVPN을 이용할 생각이라 일단 무료로 진행해 보고 훗날 필요하다면 그 때 구독하여 사용하겠다.
아 그리고 필자도 처음 써보다 보니 알아낸건데 Pwnbox
에 접속 하려 할 때 위와 같은 오류가 생기기에 뭣이 문제인가 하여 알아보니.
VPN ACCESS
라는 부분을 보면 지금은 US Free 2
라고 적혀있다. 근데 접속이 안되네?
그러면 F5를 눌러 다시 들어와 머신을 열고 다시 Pwnbox를 눌러보자.
이렇게 성공적으로 online 되면 성공이다.
하지만 필자는 느린 것도 그렇고 뭐랄까.. 어쩌피 칼리를 사용하거나 다른 linux를 사용하게 될텐데 그렇다면 이미 필요한 툴들이 깔려있는 칼리를 직접 사용하는 것이 더 좋지 않을까 하여 VMware에 kali를 설치한 뒤 Openvpn을 이용해 접속하는 방식을 사용하도록 하겠다.
참고로 Pwnbox
를 켰다면 Openvpn을 켜기 전 종료시켜야 한다. 연결 관련 문서에도 나와있듯 둘을 동시에 켜면 충돌이나 문제가 생길 수 있다 하니 TERMINATE CONNECTION
으로 연결을 끊고 시도하자.
이제 Openvpn
을 이용해 연결할 때 먼저 Download VPN
을 눌러 VPN을 다운로드 해주자.
그러고 나면 위와 같이 vpn연결을 기다리고 있다고 하니 창을 띄워놓고 우리는 vmware로 들어가자.
아 물론 vmware뿐 아니라 ventoy를 이용한 liveusb나 듀얼 부팅을 통한 kali, 혹은 직접 툴을 다 깔겠다 하면 ubuntu나 윈도우의 wsl 등을 이용하여도 좋다. 필자는 이렇게 기록을 같이 하게 되기에 아무래도 노트북을 또 켤 수는 없는 노릇이라 vmware를 이용하도록 하겠다.
이렇게 접속하고 나면 음… 일단 필자는 배경이 눈에 아파 바꾸도록 하겠다.
물론 그 전에 기본 세팅인 apt update, apt upgrade
등은 다 하고..
편안~
openvpn 파일을 옮기기 위해 ssh 서버를 열고
scp
명령어를 이용해서 넘겨주면 된다.
이렇게 칼리에서 확인할 수 있고 그럼 이제 접속해보자.
자 이제 ONLINE
이 되었고 이제부터 드디어 박스를 풀 세팅이 끝났다.
그럼 이제 다시 Join Machine
을 눌러 시작해보자.
HTB Cap 시작
처음이기에 Guided Mode
를 따라가겠다.
정찰 및 정보 수집 (Reconnaissance & Enumeration)
Task 1
보아하니 21, 22, 80번 포트가 열려있다. 게다가 22번 포트의 결과를 토대로 서버는 리눅스 중 ubuntu로 구성되어있다는 것을 알 수 있다.
고로 정답은 3
Task 2
Security Snapshot
을 실행하고 어떤 주소를 찾으라는데 이걸 위해서는 일단 CAP 머신 스캔에서 보았듯 열려있는 http 서버에 접속할 필요가 있어 보인다.
아하 역시나 여기에 Security Snapshot
이라는 페이지가 있다.
접속하고보니 문제에서 말했던 /[something]/[id]
가 /data/10
이라는 것을 알 수 이다.
Task 3
음… 그니까 지금 Nathan
이라는 사람 계정으로 접속해서 /data/8
(나갔다 들어오니 10에서 바뀜)을 볼 수 있는데 다른 저 [id]
를 변경해서 다른 사람의 페이지를 볼 수 있는지 물어보는건가?
힌트 내용을 보니 맞는거 같다. URL 값을 변경해가며 알 수 있다고 하고 ffuf
나 wfuzz
와 같은 툴을 이용할 수 있다고 한다.
이번에는 한번 ffuf를 이용해보았는데 음… 아무래도 gemini가 추천해준 ffuf -c -u http://10.10.10.245/data/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
명령어를 썼으나 너무 오래 걸리기도 하고 지금은 딱 봐도 /data/id
이렇게 들어가니까 id
에는 숫자가 들어갈 텐데 굳이 이렇게 큰 워드 리스트를 쓸 이유가 없다.
실제로 id
값에 8
이 아닌 다른 값들을 넣어보면 다른 pcap파일을 다운받을 수 있는 페이지가 나온다 고로 답은 yes
Task 4
중요한 정보가 담긴 pcap파일이 들어있는 페이지의 id
는 무엇이냐고 묻는다.
어.. 다 찾아봐야하네?
일단 당연하겠지만 바로 보이는 8번은 아니고..
아까 첨에 봤던 10번은 아예 비어있으니..
한번 가장 첫번째 일 것 같은 0번을 봐보자.
오?? 이건가?
읽어보니 FTP 서버에 접속을 하는데 nathan
이라는 이름과 비밀번호로 Buck3tH4TF0RM3!
라고 한다. 아니 뭔 비번이 이렇게 어려워…
일단 문제는 풀었다.
초기 침투 (Initial Foothold / Exploitation)
Task 5
pcap 파일에서 민감한 데이터가 보이는게 어떤 프로토콜 사용할 때냐고 묻는다.
FTP
Task 6
nathan의 FTP 비밀번호를 알아냈습니다. 이 비밀번호가 어떤 다른 서비스에서도 작동하나요?
라는데 우리가 nmap을 이용해 스캔해 보았을 때 현재 비밀번호가 잡힌 21/ftp
가 있었고 22/ssh
, 88/http
가 있었다.
그렇다면 혹시 ssh 에서도 같은 비밀번호를?
이게 되네.
Task 7
home
디렉토리에 있는 파일의 플래그를 읽어서 넣으라고 한다.
권한 상승 (Privilege Escalation)
Task 8
이 머신에서 루트 권한을 얻기 위해 악용될 수 있는 특별한 기능(capabilities)을 가진 바이너리(실행 파일)의 전체 경로는 무엇인가요?
라는데… 일단 capabilities
를 찾기 위한 명령어는 기본적으로 getcap
이 있다.
그리고 이전 사진에서 보았듯 linpeas
라는 자동화 스크립트도 있다. linPEAS
일단은 자동화 스크립트보다는 기본 명령어를 사용해서 찾아보자.
이렇게 결과가 나오게 되었고 이 중 우리가 눈여겨 볼 수 있는 것은 /usr/bin/python3.8
이다.
cap_setuid
: 이 권한이 있는 프로그램은 프로세스의 사용자 ID를 변경할 수 있다. 즉, 일반 사용자로 실행되었더라도 스스로를 루트(UID 0)로 바꿀 수 있는 잠재력을 가지고 있는 것이다. 그리고 그 행위가 바로 권한 상승이다.cap_net_bind_service
: 원래 0번부터 1023번까지의 포트(예:20번 ssh, 80번 HTTP, 443번 HTTPS)는 루트 권한으로만 열 수 있는데, 이 capability가 있으면 일반 사용자도 해당 포트를 사용할 수 있게 된다.
그럼 이번에는 linePeas를 사용해보자. 게다가 이미 누군가 쉘 스크립트를 만들어놨으니 오히려 좋아.
엄… 뭔가 엄청나게 뜨고 그 과정에서 이 머신에 있을 수 있는 CVE나 권한들에 관한 것들도 싹 다 스캔해주는거 좋기는 한데…
이렇게 찾아야한다. 그래도 찾았으니 좋았으.
Task 9
Cap의 마지막 문제, root로 읽을 수 있는 파일을 읽어서 플래그를 가져다 달라고 한다.
그럼 우리는 python을 이용하면 권한을 상승시킬 수 있다는 것을 알았으니 해보자.
CAP 끝!