# FileUpload 💾
## Lý thuyết

$\to$ User phải giao tiếp với WEB SERVER thông qua trình duyệt
$\to$ cần có nhà kho (database) để lưu trữ dữ liệu
$\to$ có cơ chế bảo vệ


**khi nhận được request httpd sẽ đi đọc file config đến thư mục root và trả về file home cho người dùng**
-

**đọc file conf**
-


## Level 1
1. kiểm tra thực hiện đuôi php
- đổi tên đuôi file submit bằng php
- lấy ra hai phương thức POST GET cho vào Repeat
- 
- đổi đuôi ở cả hai phương thức sau đó send
- 
$\to$ Render hiện như trên ở phương thức GET là trình duyệt đã chạy php thành công
2. Remote Code Execution để lấy flag
- thực thi lệch sau ở POST
- 
- 
- + hoặc %20 cũng được
- phần Respone sẽ hiện ra như sau

- cat file secret là được


**phải decode bằng + hoặc %20 nếu không thì**

$\to$ 
## level 2
**ở level 2 ta thấy có hàm filter để ngăn chặn việc thực thi php khi upload**

$\to$ để né filter được thì ta vẫn thực thi đuôi php nhưng sẽ không ở vị trí 1

**kết quả đã upload thành công với đuôi .php**

sau khi vượt qua thì thực thi như sau


**kết quả**

$\to$ như vậy đã thực hiện id thành công

**FLAG**
## level 3
**làm thế nào để nhận dạng đuôi php vậy liệu còn đuôi nào khác cũng có thể thực thi được câu lệnh trong php không**
**ta có regular expression(biểu thức chính quy)** : dùng để định nghĩa các quy chuẩn thành các kí tự đặc biệt

**ở đây ta không thể vượt qua filter được như bài hai bởi đã gắn giá trị ở cuối cùng chứ không xác định vị trí 1 cụ thể như bài 2**
$\to$ như vậy phải thay đổi đuôi của file

ta sẽ tìm hiểu về [biểu thức hậu tố](https://regex101.com/)

$\to$ ta đã tìm thấy ngoài đuôi php còn đuôi phtml hoặc phar
$\to$ đổi thành đuôi phtml là có thể thực thi được php và làm như level 1
## level 4
**chúng ta sẽ thao túng lại hành vi của apache2**
$\to$ upload file .htaccess lên cùng với file txt để nó có thể thực thi php ngay trong file txt

**chỉnh đuôi tùy theo ý muốn.Ngoài txt ta có thể dùng txtml hoặc txar**

## level 5

$\to$ sau khi var_dump mime_type thì ta thấy có thể kiểm soát được type

**chỉ cần thay đổi content type**

-
$\to$ vậy sau khi đổi đuôi ta đã upload thành công

$\to$ viết php ngay trong file ảnh luôn
**FLAG**

## level 6
**chèn php vào gif**
1. vượt qua filter bằng đuôi gif
2. thực thi php

**GET**

# Tổng kết bí kíp
1. tại sai chỉ có php, asp,jsp bị fileupload . vì nó file-base web

2. python, NodeJS, Golang là Route-base

## XSS nâng cao
[lab](https://inloop.github.io/sqlite-viewer/)
đăng file lên như bình thường để .html
thực thi javascript trên html dựa vào tag script

- ở đây dùng hình ảnh để lấy cú request đến server
- tuy nhiên thêm vào cú request đó là extension thêm cả cookie
- để lấy được request ta có [webhook](https://webhook.site/#!/view/d9299ba6-ba0e-498c-9d62-9cf92ba2edd1/12fdf6bc-0c9b-46cf-a8a3-ef2bee179424/1)
- script sẽ chứa đường dẫn dến URL mà webhook cấp riêng cho bạn
**khi người dùng click vào link**
đồng nghĩa với việc truy cập đến webhook và cũng trả về cookie của phiên đó

vậy là đã lấy được cookie của người dùng bên phía client