# Lab 1: Remote code execution via web shell upload

- Lab này chứa lỗ hổng ở phẩn upload ảnh. Nó không validate file trước khi tải lên server.
- Để giải lab: upload web shell PHP để đọc nội dung của `/home/carlos/secret`.
Sau khi upload ảnh, .txt không thu được gì
Ta có request

Ảnh được upload có file path `/files/avatars/name`
Giờ ta upload 1 file php xem sao

Response cho thấy ta được phép thực thi các lệnh shell

Thay đổi nội dung file php để đọc file lab yêu cầu



# Lab 2: Web shell upload via Content-Type restriction bypass

- Lab này chứa lỗ hổng ở phẩn upload ảnh. Nó validate file trước khi tải lên server nhưng không xác nhận lại.
- Để giải lab: upload web shell PHP để đọc nội dung của `/home/carlos/secret`.
Ảnh vẫn được tải lên ở `/files/avatars/name`

Hệ thống chỉ cho phép upload file `image/jpeg`

Tuy nhiên ta không thấy request nào phản hồi việc hệ thống nhận đúng dạng `image/jpeg` hay chưa
Upload file php như lab trước



# Lab 3: Web shell upload via path traversal

Yêu cầu tương tự lab trên
Đoạn code PHP này không được thực thi ở server

Cỏ vẻ thư mục `avatars` không được thực thi lệnh, vì vậy ta sẽ quay lại thư mục `files` xem sao

Vẫn là path `avatars`, tức là upload không thành công, có vẻ `../` đã bị hệ thống loại bỏ
Đi mã hóa chúng

Upload thành công



# Lab 4: Web shell upload via extension blacklist bypass

Lab này đã không cho phép upload file `.php`

Đổi tên file thành `exploit.php%00.jpg` nhưng vẫn không thành công

Ta biết file `.htaccess` được dùng để cấu hình file upload nên ta sẽ tải lên 1 file `.htaccess` với nội dung `AddType application/x-httpd-php .abc`

Như vậy, bây giờ có thể upload bất cứ file nào có đuôi `.abc`



# Lab 5: Web shell upload via obfuscated file extension

Lab này cũng không cho phép tải lên các file có đuôi trong blacklist
Chỉ có các file có đuôi `.jpg` và `.png` được phép upload

Chèn thêm byte null vào cuối kèm theo đuôi `.jpg` (vì byte null bỏ qua đuôi jpg, lúc đó file php sẽ được thực thi) thì upload thành công



# Lab 6: Remote code execution via polyglot web shell upload

Lab này kiểm tra nội dung của file, nếu là ảnh mới được upload

Có vẻ nó nhận dạng bằng các ký tự header


Thay đổi script thành `<?php echo file_get_contents('/home/carlos/secret'); ?>` để đọc được nội dung file yêu cầu



# Lab 7: Web shell upload via race condition

Chỉ có các file có đuôi `.jpg` và `.png` được phép upload

Ta sửa đuôi thành `%00.jpg`

Upload thành công
Tuy nhiên, hệ thống phát hiện tệp này không thỏa mãn nên đã xóa nó

Quá trình kiểm tra này mất vài ms nhưng nó vẫn tồn tại trên server, ta sẽ tận dụng thời gian này để khai thác.
Tạo macro


Test macro

Gửi `POST /my-account/avatar` và `GET /files/avatars/exploit.php` qua Intruder
- Attack type: Sniper
- Payload: null payload, continue indefinitely
- Maximum concurrent requests: 2


Start attack đồng thời 2 yêu cầu này, status 200 tức là đã đọc thành công file upload

