[WebSec] Level 28
Information Gathering
Thôi, bài này mình không test kiểu BlackBox nữa… Vì test có ra lỗi đâu =))
Vào đọc source code thôi. Các challenge CTF thường thì họ đều cho mình source để đọc.
Các bạn có thể theo dõi đoạn code bên dưới.
Source code
1 |
|
Phân tích về source code:
Từ dòng 1 - 5: Hàm
if()
kiểm tra mình đã submit hay không? Nếu có thì file upload của mình lên có nặng quá4096 kb
hay không? Nếu nặng quá4096 kb
thì sẽ báo lỗi làYour file is too heavy.
vàdie
chương trình.Dòng 6:
$file_name
sẽ được gán bằng giá trị như trên source code, vớimd5($_SERVER['REMOTE_ADDR'])
sẽ là giá trị IP mình đang truy cập đượcencrypt md5
../tmp/ae018b12db79741c0b9026378e0be6d5.php
Dòng 12: nội dung trong file được upload sẽ được gán cho
$file_name
.Dòng 13: Trong hàm
if()
kiểm tramd5($file_upload
) phải trùng với nội dung trong file flagmd5(flag.php)
. Kết hợp việc việcloose compare
giữachecksum
mình nhập vào vàcrc32('checksum')
.Để bypass qua được
loose compare
của checksum thì mình sẽ dùngarray()
để so sánh.
Exploit
Upload file flag.php
với nội dung như sau:
1 |
|
Để ý thấy khi upload file lên, file sẽ được gán bằng tmp_name
ở server. Và chỉ được tồn tại sau 1 giây (dòng 17 sleep(1)
). Nên không thể nào truy cập vào file mới gọi được.
Để có thể truy cập được file flag.php vừa upload lên, mình sẽ cho chạy 150 reuqests trong intruder Burp Suite, với thời gian giữa các request là 900 mili giây.
Sau khi Start, mình upload lại file flag.php và có thể truy cập được file. Nhưng không hiện ra flag :(
Stuffing …