Hệ điều hành | Độ khó |
---|---|
Linux | Medium |
Giới thiệu
Bài viết này sẽ phân tích máy Zipping thuộc Hackthebox, có độ khó medium. Trái ngược với các bài dễ, những bài trung bình yêu cầu người thực hiện cần có kiến thức vững vàng về các lỗ hổng bảo mật cũng như cách vượt qua các bộ lọc mà đề bài đưa ra. Qua bài Zipping, chúng ta sẽ học được về symlink, cách vượt qua regex, SQL Injection và Local File Inclusion (LFI).
1. Recon
Đầu tiên, chúng ta thực hiện quét cổng mở trên máy chủ mục tiêu bằng nmap:
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sC -sV 10.10.11.229
Starting Nmap 7.92 ( https://nmap.org ) at 2023-12-25 02:33 EST
Nmap scan report for 10.10.11.229
Host is up (2.2s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.0p1 Ubuntu 1ubuntu7.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.54 ((Ubuntu))
Chúng ta thấy có cổng SSH và HTTP đang mở. Server chạy trên ngôn ngữ PHP và Apache.
2. Enum
Tiếp theo, chúng ta thực hiện quét thư mục trên server:
┌──(kali㉿kali)-[~/hackthebox/zipping]
└─$ ffuf -c -ic -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -u http://10.10.11.229/FUZZ
Kiểm tra giao diện web, ta phát hiện ra chức năng Work with Us
, cho phép upload cv với định dạng file .pdf. Các file sẽ được lưu tại thư mục /uploads
.
3. Khai thác
Chúng ta quay lại chức năng upload cv. Đầu vào yêu cầu upload file phải là file .zip nén từ file .pdf. Để thực hiện, chúng ta sẽ sử dụng kỹ thuật upload symlink. Cụ thể, ta thực hiện tạo một symlink với đuôi .pdf trỏ tới file cần xem trên server:
ln -s ../../../../../../../../etc/passwd passwd.pdf
Sau đó nén lại thành file zip:
zip --symlinks passwd.zip passwd.pdf
Khi upload thành công, ta sẽ đọc file /etc/passwd
để kiểm tra thông tin user hiện có, ví dụ user rektsu
với thư mục tại /home/rektsu
.
Để đạt được RCE, ta cần tìm các file PHP có sẵn trên server để khai thác LFI. Dưới đây là danh sách file PHP tìm thấy:
- index.php
- upload.php
- shop (folder)
- home.php
- products.php
- product.php
- cart.php
- function.php
Điểm khai thác đầu tiên là trong file index.php
, nơi có biến page
nhận input từ người dùng và sử dụng include
để gọi file. Điều này tạo ra nguy cơ LFI, bởi nó cho phép input từ người dùng bao gồm các file hệ thống.
Sau đó, chúng ta tiếp tục kiểm tra file product.php
. Trong file này, có một biến id
, và mặc dù có sử dụng regex để kiểm tra, chúng ta vẫn có khả năng thực hiện SQL Injection bằng cách gửi payload vừa qua được bộ lọc, từ đó ghi file PHP vào /var/lib/mysql/
.
Cuối cùng, chúng ta sử dụng LFI để include file shell đã tạo, thực hiện reverse shell để đạt được RCE.
4. Khuyến nghị
- Không cho dữ liệu không được tin cậy lọt vào hàm include.
- Hiểu và sử dụng regex một cách hiệu quả.
source: viblo