Virtual Host Fuzzing là phương pháp giúp tìm kiếm các subdomain hoạt động trên một địa chỉ IP (máy chủ) khi thực hiện Web Penetration Testing
Trong một số trường hợp, bạn cần xác định địa chỉ IP thật đức sau Firewall bằng các kỹ thuật OSINT. Sau đó, bạn cần thực hiện Virtual Host Fuzzing để tìm kiếm các domain hoặc subdomain nào hoạt động trên IP đó, như một cách verify lại.
Mục lục
Virtual Host là gì
Để nắm được bản chất của Virtual Host Fuzzing, mình sẽ hướng dẫn các Virtual Host hoạt động trên máy chủ Web Server như thế nào. Đồng thời sẽ hướng dẫn bạn từng bước thiết lập Virtual Host trong Web Server Apache.
Virtual Host giúp bạn chạy nhiều website trên một máy chủ duy nhất. Khi đã hiểu về kỹ thuật này, bạn dễ dàng thực hiện Virtual Host Fuzzing, phương pháp giúp tìm kiếm các subdomain hoạt động trên một địa chỉ IP (máy chủ). một kỹ thuật hữu ích cho việc kiểm tra bảo mật.
Kỹ thuật Virtual Host Fuzzing này cũng hay phải thực hiện để kiểm tra lỗ hổng Password Reset via Host Header Poisoning
Cài đặt Web Server Apache trên Kali Linux
Bạn cần đăng nhập vào hệ thống Kali Linux. Sau đó, sử dụng lệnh sudo để chuyển sang tài khoản root, giúp bạn có đủ quyền để cài đặt và cấu hình các dịch vụ. Trước khi bắt đầu cài đặt, hãy cập nhật danh sách các ứng dụng và phiên bản của chúng trong kho ứng dụng của Kali Linux bằng lệnh apt update
sudo -s
apt update
Apache là một phần mềm máy chủ web miễn phí và mã nguồn mở. Cài đặt Apache trên Distro Kali bằng lệnh apt install
apt install apache2
Sau khi cài đặt, bạn có thể quản lý dịch vụ Apache bằng các lệnh sau. Hãy nhớ rằng, cứ mỗi khi thay đổi cấu hình Apache, bạn cần khởi động lại dịch vụ để áp dụng cấu hình mới.
# Để khởi động Apache.
service apache2 start
# Để dừng Apache.
service apache2 stop
#Để khởi động lại Apache sau mỗi lần cập nhật cấu hình.
service apache2 restart
Thiết Lập Cấu Hình Virtual Host
Cấu hình Virtual Host cho phép bạn chạy nhiều website trên một máy chủ duy nhất. Ví dụ, để tạo Virtual Host cho hatrunghieu.com, hãy tạo một file cấu hình mới tại đường dẫn /etc/apache2/sites-enabled/hatrunghieu.com.conf với nội dung như sau
<VirtualHost *:80>
ServerName hatrunghieu.com
DocumentRoot /var/www/hatrunghieu.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Nếu bạn chưa quen sử dụng hệ điều hành Linux, bạn có thể cài đặt công cụ soạn thảo gedit bằng lệnh apt và tạo file mới
# Cài đặt công cụ soạn thảo gedit trên Kali
sudo apt install gedit
# Tạo hoặc sửa một file
sudo gedit /etc/apache2/sites-enabled/hatrunghieu.com.conf
Làm tương tự cho admin.hatrunghieu.com với một file cấu hình admin.hatrunghieu.com.conf tuơng tự .
<VirtualHost *:80>
ServerName admin.hatrunghieu.com
DocumentRoot /var/www/admin.hatrunghieu.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>s
Nhớ Restart lại dịch vụ Apache sau mỗi lần thay đổi cấu hình
Tạo Thư Mục Và Nội Dung Web Cho Virtual Host Fuzzing
Mỗi Virtual Host sẽ nằm ở một thư mục riêng khác nhau, và có những nội dung mã nguồn khác nhau. Để mô phỏng việc này, chúng ta tạo thư mục chứa mã nguồn và nội dung tĩnh chúng
mkdir -p /var/www/hatrunghieu.com
mkdir -p /var/www/admin.hatrunghieu.com
Sau đó, tạo một trang web đơn giản cho mỗi site
echo "Welcome to hatrunghieu.com" > /var/www/hatrunghieu.com/hello.html
echo "Welcome to admin.hatrunghieu.com" > /var/www/admin.hatrunghieu.com/admin.html
Để Apache có thể truy cập các thư mục này, bạn cần đổi quyền sở hữu từ root sang www-data. Vì theo thiết kế mặc định, Apache2 sẽ sử dụng quyền www-data để xử lý các HTTP Request của các Virtual Host
chown -R www-data:www-data /var/www/hatrunghieu.com /var/www/admin.hatrunghieu.com
Virtual Host Fuzzing
Header Host trong HTTP Request là một phần quan trọng của giao thức HTTP. Header này được sử dụng để chỉ định tên miền sẽ xử lý HTTP Request của người dùng. Điều này rất quan trọng trong môi trường mà một máy chủ web duy nhất phục vụ nhiều tên miền hoặc các trang web khác nhau (Virtual Host)
Khi một trình duyệt gửi yêu cầu đến máy chủ, nó sẽ tự thay đổi Header Host thành tên miền mà người dùng nhập vào thanh địa chỉ.
Ví dụ, nếu bạn muốn truy cập hatrunghieu.com, trình duyệt sẽ gửi yêu cầu HTTP với header Host được thiết lập là hatrunghieu.com.
Để thay đổi Header Host trong HTTP Request, bạn có thể sử dụng công cụ curl với tham số -H. Từ đó sẽ kiểm tra Virtual Host đã được thiết lập đúng chưa. Chúng ta cũng dùng cách thay đổi Host này để thực hiện Virtual Host Fuzzing
curl -v http://127.0.0.1:80/hello.html -H "Host: hatrunghieu.com"
* Trying 127.0.0.1:80...
* Connected to 127.0.0.1 (127.0.0.1) port 80
> GET /hello.html HTTP/1.1
> Host: hatrunghieu.com
> User-Agent: curl/8.4.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 11 Mar 2024 07:47:18 GMT
< Server: Apache/2.4.58 (Debian)
< Last-Modified: Mon, 11 Mar 2024 07:46:57 GMT
< ETag: "1b-6135dbef8d809"
< Accept-Ranges: bytes
< Content-Length: 27
< Content-Type: text/html
<
Welcome to hatrunghieu.com
* Connection #0 to host 127.0.0.1 left intact
└─# curl -v http://127.0.0.1:80/admin.html -H "Host: admin.hatrunghieu.com"
* Trying 127.0.0.1:80...
* Connected to 127.0.0.1 (127.0.0.1) port 80
> GET /admin.html HTTP/1.1
> Host: admin.hatrunghieu.com
> User-Agent: curl/8.4.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 11 Mar 2024 07:47:55 GMT
< Server: Apache/2.4.58 (Debian)
< Last-Modified: Mon, 11 Mar 2024 07:47:03 GMT
< ETag: "1e-6135dbf59862e"
< Accept-Ranges: bytes
< Content-Length: 30
< Content-Type: text/html
<
Welcome admin.hatrunghieu.com
* Connection #0 to host 127.0.0.1 left intact
Nếu chúng ta thử truy cập /admin.html trên Virtualhost hatrunghieu.com, Web Server Apache sẽ trả về mã lỗi 404 Not Found. Vì thực sự file /admin.html chỉ nằm ở thư mục /var/www/admin.hatrunghieu.com/, và thư mục này được truy cập từ admin.hatrunghieu.com
└─# curl -v http://127.0.0.1:80/admin.html -H "Host: hatrunghieu.com"
* Trying 127.0.0.1:80...
* Connected to 127.0.0.1 (127.0.0.1) port 80
> GET /admin.html HTTP/1.1
> Host: hatrunghieu.com
> User-Agent: curl/8.4.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Date: Mon, 11 Mar 2024 07:47:39 GMT
< Server: Apache/2.4.58 (Debian)
< Content-Length: 277
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.58 (Debian) Server at hatrunghieu.com Port 80</address>
</body></html>
* Connection #0 to host 127.0.0.1 left intact
What do you think?
It is nice to know your opinion. Leave a comment.