Post

[HTB] StartingPoint - Fundamental exploitation 문제 풀이 모음

시작에 앞서

저번에 이어 이번주는 StartingPoint에 있는 tier1 문제인 Fundamental exploitation 문제를 풀도록 하겠다.

이번건 근데 왜 Very Easy인지 모르겠는 문제도 있네..?

이름난이도OSLink
AppointmentVery EasyLinuxLink
SequelVery EasyLinuxLink
CrocodileVery EasyLinuxLink
ResponderVery Easy?WindowsLink
ThreeVery Easy?LinuxLink

갠적으로 ?들어가 있는 문제들을 이게 Very Easy가 맞나 싶은 문제들로 내가 지금까지 풀었던 것에서 추가적으로 많이 알아봐야했던 문제들!

솔직히 아예 기초라고 보긴 좀 그런 문제인뎀…

Appointment (Linux)

Appointment

Appointment는 SQLinjection을 이용하는 문제다.

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

ap nmap

nmap을 돌려보았을 때 80번 포트에 http 아파치 서버가 작동하고 있는 것을 확인할 수 있었다.

page

웹 페이지에 접속해보니 위처럼 로그인 하는 부분이 있었고 dirsearchgobuster를 이용한 디렉토리 브루트 포싱을 통한 결과에서도 딱히 눈여겨볼 것이 없었다.

wappalyzer

혹시 Wappalyzer를 통해 버전이 오래되어 CVE가 올라온 것이 있나 확인해 보기 위해 찍어봤다만, 애초에 이걸 이용하는 문제가 아니라서 말이지.

초기 침투 (Initial Foothold / Exploitation)

login sqli

로그인을 할 때에 혹시하는 마음에 SQLi를 진행했고

1
2
ID : admin
PW : admin' OR 1 = 1 #

을 통해 로그인에 성공했다.

들어오면

들어오면 이렇게 나온다.

권한 상승 NONE (Privilege Escalation)

획득

Sequel (Linux)

Sequel

이번에도 Linux 문제고 다만 Mysql 접속하고 해야하는 문제다.

근데 이거 공식 Writeup 따라가면 ssl 때문에 안되는 부분이 있더라.

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

se nmap

nmap을 돌려보았을 때에 3306번 포트에 mysql 서비스가 감지되었고 배너 정보를 통해 MariaDB 10.3.27 버전이 구동중임을 확인할 수 있었다.

초기 침투 (Initial Foothold / Exploitation)

mysql

여기서 이제 한번 root 라는 계정을 통해 접속을 시도했지만 아까도 말했듯 SSL 관련 에러가 발생하며 접속이 거부됬었다.

분명 공식에서는 된다고 했는데!

ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it

읽어보면 알 수 있듯 SSL이 없으니 오류가 발생하는 것인데, 최신 버전의 칼리 리눅스(MySQL 클라이언트)는 보안을 위해 기본적으로 SSL 암호화 연결을 강제하게 된다. 그런데 타겟인 상대 서버의 MariaDB에 SSL이 설정되어있지 않거나 지원하지 않는 구버전일 때에 위처럼 내 쪽에서 “음음 저거 나쁜거 가지 말자” 하고 거부를 한 상황이라고 볼 수 있다.

mariadb 접속

이 때 할 수 있는 것이 바로 --skip-ssl 이라는 명령어를 넣어주는 것이다.

table

접속을 해보니 DB에 htb, information_schema, mysql, performance_schema 가 존재하는걸 확인했다.

딱 봐도 htb라는 데이터베이스가 가장 이상해보이니 접속해서 들어가보면 config, users 라는 테이블을 볼 수 있다.

select

일단 궁금하니까 다 열어보면 위처럼 유저들에 대한 정보와 설정값들을 볼 수 있다.

그리고 여기엔 플래그도 있고.

권한 상승 NONE (Privilege Escalation)

sequel done

Crocodile (Linux)

Crocodile

이번엔 FTP 관련 문제.

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

nmap

nmap 스캔 결과 ftp 서비스가 돌고있는 것을 확인했고 이번에도 anonymous FTP login allowed가 있는 것을 볼 수 있다.

또한 80번 포트에는 http 서비스가 열려있다.

초기 침투 (Initial Foothold / Exploitation)

ftp

고로 즉시 anonymous로 로그인을 시도해 비밀번호 없이 접근 가능하였고

ftp re

결과 내부에서 allowed.userlistallowed.userlist.passwd를 발견할 수 있었다.

download

다운받아 확인해보니 여러 계정과 비밀번호가 보였고.

사이트 접속

사이트에 접속해 로그인을 시도하려 했는데.. 어래? 없네?

dirbrute forcing

바로 gobuster를 돌려 스캔을 진행했고, 그 결과 /login.php가 존재함을 확인할 수 있었다.

login

login.php에 아까 찾았던 비밀번호들을 조합해 admin의 계정으로 로그인에 성공했고 플래그를 획득할 수 있었다.

권한 상승 NONE (Privilege Escalation)

Crocodile Done

Responder (Windows)

responder

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

nmap

nmap 스캔 결과 5985번 포트에 http가 열려있다고 하고 Windows 머신이라는 것을 확인할 수 있었다만.

winrm

여기서 해깔리면 안되는 것이, 이 포트는 http이지만 웹 서비스가 아니라 WinRM 서비스 라는 점이다.

초기 침투 (Initial Foothold / Exploitation)

사이트 없음

그러니 이렇게 사이트에 접속이 안 되어도 매우 정상이라는 이야기.

nmap 다시

그래도 이것만으론 우리가 어디를 건들여야할지 알 수 없으니 좀 더 넓은 범위에서 포트를 스캔해보니 서버가 켜지는데 오래 걸려서 그랬던 것인지 위처럼 80번 포트가 열려있음을 확인할 수 있었다.

이건 내가 포트를 넓혀서 찾은게 아니라 그냥 서버가 늦게 켜져서 생긴 문제였던 것…

다시 접속

다시 접속하니 UNIKA 라고 한느 사이트로 접속할 수 있었고

그에 따라 /etc/hosts 파일을 추가해주었다.

LFI

페이지 URL을 변경해가며 돌아다니다 언어 설정을 변경할 수 있는 부분인 page=english.html과 같은 부분을 확인할 수 있었고 만약 프랑스어로 바꾼다면 french.html 이렇게 바뀌게 되는데 이 주소를 윈도우 hosts 폴더인 /windows/system32/drivers/etc/hosts로 바꾸었더니 윈도우 시스템 파일의 내용을 확인할 수 있었다!

이건 바로 LFI(Local File Inclusion)취약점을 성공시켰다는 의미가 되겠다.

LFI

그리고 사실 여기 나오니까 알 수 있었다 ㅎ, 뭔가 혼자 이거 풀려고 하면 좀 많이 해맸을듯한?

아아 이게 script kiddie라는 것이다.

그런데 여기서 우리가 생각해 볼 수 있는 것은

  1. Windows 서버다
  2. 윈도우에서 파일 경로를 쓸 때에 로컬 경로 뿐 아니라 UNC경로도 가능하지 않을까?
  3. 그럼 내 주소를 넣으면 나한테 오겠네?

ready for get hash

위 간단한 추론 과정을 통해 문제의 제목처럼 responder를 켜 가짜 서버들을 켜고

RFI

주소에 내 칼리 ip를 입력하게 되면?

gethash

이렇게 NTLM 해시를 얻을 수 있다!

hashtxt

그리고 그 결과를 저장한 후

john

john the ripper를 이용해 rockyou.txt를 이용해 해시 크래킹을 하면 badminton이라는 비밀번호를 얻을 수 있다!

winrm

얻어낸 비밀번호를 토대로 winRM포트가 열려있으니 evil-winrm을 실행하게 되면, 위처럼 Admin의 계정으로 접속할 수 있게 된다.

ssh는 리눅스계의 원격접속이고 winRM은 윈도우계의 원격 접속인 샘.

find flag

그리고 이번엔 플래그를 Admin이 아니라 mike라는 유저의 바탕화면에 숨겨뒀더군요?

권한 상승 NONE (Privilege Escalation)

Responder DONE

이게 왜 Very Easy? Easy는 되어야할거 같은데.. RFI를 하는건 또 첨 해본 거기도 해서 나에겐 이건 Not Easy!

Three (Linux)

Three

Responder랑 Three는 평가에서만 봐도 이미 Medium이 걸려있다. 진짜 이게 왜 Very Easy임?

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

시작 전에

이 문제는 아예 문제 시작 전에 s3.thetoppers.htb에 접속해 실행 중이면 문제 풀기 시작하라고 알려준다. 전 것도 이랬다면 참 좋았을 텐데.

etc

일단 저 사이트에 바로 접속하면 당연지사 안되고 아이피와 도메인을 연결시켜준 후에 접속해야한다.

s3

그렇게 사이트에 접속해보다 실행이 되고있다면 이제 진행 가능.

근데 사실 이 s3가 문제푸는데 중요한 부분이라 사실 이 도메인이 없어야 했을텐데, Easy니까 한잔해.

nmap

그럼 이제 nmap 스캐닝을 통해 22번 ssh 서비스 포트와 80번 http 서비스를 확인했다.

사이트

더 할 수 있는게 없으니 사이트에 방문해보았고 보아하니 The Toppers라는 밴드의 공연 예약 사이트였다.

사이트2

사이트3

사이트4

그리고 마지막에 Contact에서 보이듯 서버의 도메인이 thetoppers.htb라는걸 알 수 있으니 /etc/hosts에 추가해주자.

etc2

이후 gobuster를 이용해 서브 도메인을 스캔했는데

gobuster bad

위 사진처럼 --append-domain을 추가해주지 않은 상태로 스캔을 진행하게되면 워드리스트에 있는 단어 자체를 헤더에 넣어 보내서 우리가 찾고자 하는 s3.toppers.htb가 아니라 s3만 전송해서 살았니 죽었니 하기에 당연히 400이 돌아올 수 밖에 없다.

gobuster well

그렇기에 위처럼 --append-domain까지 다 추가하여 시도하면 400이 아닌 404가 뜨며 s3.thetoppers.htb를 찾아낼 수 있었다.

다만 이번 문제는 처음에 이걸 알려주서 우리는 찾을 필요가? 없기도 했다는 이야기.

초기 침투 (Initial Foothold / Exploitation)

awscli

그리고 이 s3는 바로 aws s3를 의미하는데 이것에 접속해 통신을 하기 위해선 awscli라는 툴을 설치해 사용하기로 했다.

사실 이 때에 aws를 연결하기 위해 s3fs, aws-shell, s3cmd 등의 툴이 존재하지만 나는 aws를 다뤄본 적이 없기도 하거니와 처음 해보는데 공식 Writeup을 따라가기로 했다. 애초에 문제 푸는데 Guided mode에서 이거 쓰라고 하니까.

aws

awscli를 이용하기 위해선 처음에 설정을 해줘야 하기에 aws configure을 입력해 설정을 해줘야하는데 일단 난 aws서버를 갖고있지 않기에 그냥 none이라고 입력했다.

보내기

aws에 옮겨줄 cmd 명령어 실행을 위한 php파일을 만들고 위와같이 명령어를 입력해 만든 reverse.php를 업로드하자.

업로드후

업로드 후 올린 php파일에 접속해 cmd 옆에 입력하고 싶은 명령어를 입력하면 위처럼 명령어의 결과를 볼 수 있다.

그럼

그럼 아예 리버스 쉘을 받아갈 수 있게 하면 어떻까?

접속

이렇게 내 서버에 접속하면?

서버

리버스쉘을 받아가게되고,

리버스쉘

리버스쉘이 싱행된다!

flag갯

그렇게 플래그를 얻을 수 있었다.

권한 상승 NONE(Privilege Escalation)

Three pwned

마무리

이번에는 Starting Point의 Tier1 문제를 풀어봤는데 이거 원 Tier0과 난이도가 확 높아진 듯 하기도 하고 어째 내가 처음 보는 툴들을 사용해야 할 때도 있는 듯 하다. 역시 알면 알수록 공부할게 많다니까.

뭐 그게 즐거운거기도 하지.

Happy Hacking!

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