0
0
Lập trình
Admin Team
Admin Teamtechmely

[Phân tích] Hackthebox: Zipping - Từ SQL Injection đến Local File Inclusion

Đăng vào 3 ngày trước

• 2 phút đọc

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:

Copy
┌──(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:

Copy
┌──(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:

Copy
ln -s ../../../../../../../../etc/passwd passwd.pdf

Sau đó nén lại thành file zip:

Copy
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
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào