Post

[HTB] Hack The Box의 시작과 CAP (Easy)

Hack The Box 시작

이번에 동아리에서 하던 프로젝트들도 끝났겠다. 슬슬 또 할 것을 찾아나선 나는 레드라쿤 커뮤니티에서 스터디를 모집한다는 글을 보고 바로 Saturnx Operators에 지원하게 되었다.

그렇게 이번주에 풀어야 하는 문제는 Hack The Box의 초보자 단계 문제인 Cap이다.

htbcap

그리고 필자는 일단 HTB에서 머신을 풀어보는 것은 처음이기도 하고 다른 문제들 풀때 매번 그러했듯 시작부터 뭔가 샛길로 새는 경향이 있었기에 이번에는 Guided Mode로 설정하고 진행하려고 한다.

select

위 사진처럼 설정하면 각 순서를 알려주기에 진행하기 쉽달까?

정 못 풀겠거나 문제를 푼 뒤 이게 맞게 푼건지 확인하고 싶다면 Official Writeup을 보는 것도 좋은 생각이다.

cap is offline

일단 머신이 꺼져있으니 켜보자.

machine online

이렇게 IP 주소가 나오게 되었고. 이 머신에 접속하기 위해서(?)는 vpn에 접속할 필요가 있다. 특히 HTB는 openvpn을 사용하니 인터넷에 들어가 검색해 보면 바로 연결할 수 있다.

connect

처음 connect to HTB를 눌러 들어가보면 이렇게 MachinesStarting Point라는 것이 보일텐데 둘의 차이는 다음과 같다.

  1. Machines (US FREE 2 서버)
    • 접속 목적: Cap 머신과 같은 일반적인 실전 해킹 챌린지를 풀기 위한 메인 랩.

    • 설명: 이 네트워크에 접속해야만 Machines 목록에 있는 다양한 난이도의 머신들과 통신하고 해킹을 시도할 수 있다.

  2. Starting Point (US STARTINGPOINT 1 서버)
    • 접속 목적: HTB 입문자들을 위한 튜토리얼용 머신을 풀기 위한 전용 랩.

    • 설명: 이 네트워크는 완전히 분리되어 있으며, 오직 Starting Point 섹션에 있는 가이드 머신들에만 접근할 수 있다.

고로 필자가 풀려는 CAP 머신에 접속하기 위해서는 Machines에 접속해야한다.

openvpnvspwnbox

들어가보면 이렇게 OpenVPN을 이용하여 머신에 접속할지 Pwnbox를 이용하여 접속할지에 대해 선택하게 한다.

OpenVPN은 말 그대로 openvpn을 이용하여 cli로 접속하여 문제를 푸는거고 PwnboxHTB에서 제공하는 Parrot Linux를 이용하여 웹페이지에서 문제를 풀 수 있게 해주는 방식이다.

Pwnbox

필자는 openvpn을 사용하는걸 선호하지만 일단 한번 Pwnbox의 사용법을 보도록 하자.

Pwnbox를 선택하여 들어가면 위와 같이 몇 시간동안 사용할 수 있는지 (Hours Left), 서버를 어디로 사용할건지 (Server)에 대해 나와있고 PWNBOX LOCATION에서 핑이 얼마나 되는지도 나와있다. 사진에서는 United States East로 잡혔고 26ms정도의 핑차이가 있다고 한다.

이 때 시간 제한 없이 사용하거나 커스터마이징을 맘대로 하고 싶다면 VIP 구독을 해야한다.

VIP

구독하면 본래 여러 사람이 사용하는 머신(문제) 인스턴스를 개인만 사용 할 수 있게 돌릴 수도 있고 그 외의 플랫폼에서 올라온 문제들이나 곧 나온 HTB 랩들을 플레이 해볼 수 있다고 한다.

필요하다면 월 23,482원 정도이니 구독 해보는 것도 나쁘지 않을수도?

필자는 일단은 OpenVPN을 이용할 생각이라 일단 무료로 진행해 보고 훗날 필요하다면 그 때 구독하여 사용하겠다.

you ar not assigned to this vpn server

아 그리고 필자도 처음 써보다 보니 알아낸건데 Pwnbox에 접속 하려 할 때 위와 같은 오류가 생기기에 뭣이 문제인가 하여 알아보니.

VPN ACCESS라는 부분을 보면 지금은 US Free 2라고 적혀있다. 근데 접속이 안되네?

그러면 F5를 눌러 다시 들어와 머신을 열고 다시 Pwnbox를 눌러보자.

Pwnbox online

이렇게 성공적으로 online 되면 성공이다.

inside desktop

하지만 필자는 느린 것도 그렇고 뭐랄까.. 어쩌피 칼리를 사용하거나 다른 linux를 사용하게 될텐데 그렇다면 이미 필요한 툴들이 깔려있는 칼리를 직접 사용하는 것이 더 좋지 않을까 하여 VMware에 kali를 설치한 뒤 Openvpn을 이용해 접속하는 방식을 사용하도록 하겠다.

참고로 Pwnbox를 켰다면 Openvpn을 켜기 전 종료시켜야 한다. 연결 관련 문서에도 나와있듯 둘을 동시에 켜면 충돌이나 문제가 생길 수 있다 하니 TERMINATE CONNECTION으로 연결을 끊고 시도하자.

OPenVPN

이제 Openvpn을 이용해 연결할 때 먼저 Download VPN을 눌러 VPN을 다운로드 해주자.

Pending connection

그러고 나면 위와 같이 vpn연결을 기다리고 있다고 하니 창을 띄워놓고 우리는 vmware로 들어가자.

아 물론 vmware뿐 아니라 ventoy를 이용한 liveusb나 듀얼 부팅을 통한 kali, 혹은 직접 툴을 다 깔겠다 하면 ubuntu나 윈도우의 wsl 등을 이용하여도 좋다. 필자는 이렇게 기록을 같이 하게 되기에 아무래도 노트북을 또 켤 수는 없는 노릇이라 vmware를 이용하도록 하겠다.

kali linux

이렇게 접속하고 나면 음… 일단 필자는 배경이 눈에 아파 바꾸도록 하겠다.

물론 그 전에 기본 세팅인 apt update, apt upgrade 등은 다 하고..

background

편안~

start ssh

openvpn 파일을 옮기기 위해 ssh 서버를 열고

scp

scp 명령어를 이용해서 넘겨주면 된다.

openvpn

이렇게 칼리에서 확인할 수 있고 그럼 이제 접속해보자.

openvpn connect

connect to openvpn

자 이제 ONLINE이 되었고 이제부터 드디어 박스를 풀 세팅이 끝났다.

그럼 이제 다시 Join Machine을 눌러 시작해보자.

HTB Cap 시작

CAP

처음이기에 Guided Mode를 따라가겠다.

정찰 및 정보 수집 (Reconnaissance & Enumeration)

Task 1

Task1

nmap 스캔 결과

보아하니 21, 22, 80번 포트가 열려있다. 게다가 22번 포트의 결과를 토대로 서버는 리눅스 중 ubuntu로 구성되어있다는 것을 알 수 있다.

고로 정답은 3

Task 2

Task2

Security Snapshot을 실행하고 어떤 주소를 찾으라는데 이걸 위해서는 일단 CAP 머신 스캔에서 보았듯 열려있는 http 서버에 접속할 필요가 있어 보인다.

접속

아하 역시나 여기에 Security Snapshot 이라는 페이지가 있다.

Security Snapshot

접속하고보니 문제에서 말했던 /[something]/[id]/data/10 이라는 것을 알 수 이다.

Task 3

Task3

음… 그니까 지금 Nathan 이라는 사람 계정으로 접속해서 /data/8(나갔다 들어오니 10에서 바뀜)을 볼 수 있는데 다른 저 [id]를 변경해서 다른 사람의 페이지를 볼 수 있는지 물어보는건가?

힌트3

힌트 내용을 보니 맞는거 같다. URL 값을 변경해가며 알 수 있다고 하고 ffufwfuzz와 같은 툴을 이용할 수 있다고 한다.

ffuf

이번에는 한번 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

Task4

중요한 정보가 담긴 pcap파일이 들어있는 페이지의 id는 무엇이냐고 묻는다.

어.. 다 찾아봐야하네?

8pcap

일단 당연하겠지만 바로 보이는 8번은 아니고..

10pcap

아까 첨에 봤던 10번은 아예 비어있으니..

한번 가장 첫번째 일 것 같은 0번을 봐보자.

0pcap

오?? 이건가?

find

읽어보니 FTP 서버에 접속을 하는데 nathan이라는 이름과 비밀번호로 Buck3tH4TF0RM3! 라고 한다. 아니 뭔 비번이 이렇게 어려워…

일단 문제는 풀었다.

초기 침투 (Initial Foothold / Exploitation)

Task 5

Task5

pcap 파일에서 민감한 데이터가 보이는게 어떤 프로토콜 사용할 때냐고 묻는다.

FTP

Task 6

Task6

nathan의 FTP 비밀번호를 알아냈습니다. 이 비밀번호가 어떤 다른 서비스에서도 작동하나요? 라는데 우리가 nmap을 이용해 스캔해 보았을 때 현재 비밀번호가 잡힌 21/ftp가 있었고 22/ssh, 88/http가 있었다.

그렇다면 혹시 ssh 에서도 같은 비밀번호를?

Task6

이게 되네.

Task 7

Task7

home 디렉토리에 있는 파일의 플래그를 읽어서 넣으라고 한다.

flag

권한 상승 (Privilege Escalation)

Task 8

Task8

이 머신에서 루트 권한을 얻기 위해 악용될 수 있는 특별한 기능(capabilities)을 가진 바이너리(실행 파일)의 전체 경로는 무엇인가요?

라는데… 일단 capabilities를 찾기 위한 명령어는 기본적으로 getcap이 있다.

그리고 이전 사진에서 보았듯 linpeas라는 자동화 스크립트도 있다. linPEAS

일단은 자동화 스크립트보다는 기본 명령어를 사용해서 찾아보자.

getcap

이렇게 결과가 나오게 되었고 이 중 우리가 눈여겨 볼 수 있는 것은 /usr/bin/python3.8이다.

  • cap_setuid : 이 권한이 있는 프로그램은 프로세스의 사용자 ID를 변경할 수 있다. 즉, 일반 사용자로 실행되었더라도 스스로를 루트(UID 0)로 바꿀 수 있는 잠재력을 가지고 있는 것이다. 그리고 그 행위가 바로 권한 상승이다.

  • cap_net_bind_service : 원래 0번부터 1023번까지의 포트(예:20번 ssh, 80번 HTTP, 443번 HTTPS)는 루트 권한으로만 열 수 있는데, 이 capability가 있으면 일반 사용자도 해당 포트를 사용할 수 있게 된다.

그럼 이번에는 linePeas를 사용해보자. 게다가 이미 누군가 쉘 스크립트를 만들어놨으니 오히려 좋아.

linpeas

엄… 뭔가 엄청나게 뜨고 그 과정에서 이 머신에 있을 수 있는 CVE나 권한들에 관한 것들도 싹 다 스캔해주는거 좋기는 한데…

linpeascap

이렇게 찾아야한다. 그래도 찾았으니 좋았으.

Task 9

task9

Cap의 마지막 문제, root로 읽을 수 있는 파일을 읽어서 플래그를 가져다 달라고 한다.

그럼 우리는 python을 이용하면 권한을 상승시킬 수 있다는 것을 알았으니 해보자.

root

CAP 끝!

Ending

Rmx

This post is licensed under CC BY 4.0 by the author.