---
# System prepended metadata

title: "FileUpload \U0001F4BE"

---

# FileUpload 💾
## Lý thuyết

![image](https://hackmd.io/_uploads/BJOgpgycC.png)

$\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ệ 


![image](https://hackmd.io/_uploads/B1oZ1Z1cA.png)

![image](https://hackmd.io/_uploads/SJUFZby5R.png)

**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**

-
![image](https://hackmd.io/_uploads/S11AZb15A.png)

**đọc file conf**

-

![image](https://hackmd.io/_uploads/S1PpWsJc0.png)

![image](https://hackmd.io/_uploads/H1xggdii0.png)

 
##  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 
-    ![image](https://hackmd.io/_uploads/rkUwtg7cR.png)

-    đổi đuôi ở cả hai phương thức sau đó send 
-    ![image](https://hackmd.io/_uploads/BkFiYxm50.png)

$\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
-    ![image](https://hackmd.io/_uploads/H1-DqgmqR.png)

-    ![image](https://hackmd.io/_uploads/HkB-olXqR.png)

-      + hoặc %20 cũng được 
-    phần Respone sẽ hiện ra như sau 
![image](https://hackmd.io/_uploads/BJlDog790.png)

-    cat file secret là được 

![image](https://hackmd.io/_uploads/Bywjog7qA.png)

![image](https://hackmd.io/_uploads/HyeholXc0.png)

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

![image](https://hackmd.io/_uploads/S1a-heX5R.png)

$\to$ ![image](https://hackmd.io/_uploads/SkkQng7cC.png)
 
 
## level 2

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

![image](https://hackmd.io/_uploads/Bk_6gI7q0.png)

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

![image](https://hackmd.io/_uploads/ryf--UQc0.png)
**kết quả đã upload thành công với đuôi .php**
 ![image](https://hackmd.io/_uploads/rJazZLQ5A.png)

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

![image](https://hackmd.io/_uploads/SkKBMU79A.png)

![image](https://hackmd.io/_uploads/rk_UfLQqA.png)

**kết quả**

![image](https://hackmd.io/_uploads/rJ_wGIXc0.png)


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

![image](https://hackmd.io/_uploads/HkXjMImc0.png)

**FLAG**![image](https://hackmd.io/_uploads/Byx3zUmcA.png)


## 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 

![image](https://hackmd.io/_uploads/B1tx3Pm9A.png)

**ở đâ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 

![image](https://hackmd.io/_uploads/BJb32PQc0.png)

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

![image](https://hackmd.io/_uploads/ryFJaDmc0.png)

$\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 

![image](https://hackmd.io/_uploads/ryx-EeDcR.png)

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



![image](https://hackmd.io/_uploads/r1Ng4lv5R.png)

## level 5 
![image](https://hackmd.io/_uploads/SJ4GclwqC.png)
$\to$ sau khi var_dump mime_type thì ta thấy có thể kiểm soát được type 

![image](https://hackmd.io/_uploads/BycD5ew90.png)


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

   
![image](https://hackmd.io/_uploads/Syh1oeDqA.png)
-    
$\to$ vậy sau khi đổi đuôi ta đã upload thành công 

![image](https://hackmd.io/_uploads/SyzQjgv5R.png)

$\to$ viết php ngay trong file ảnh luôn
**FLAG**
![image](https://hackmd.io/_uploads/HycSogvcR.png)

## level 6

**chèn php vào gif**

1. vượt qua filter bằng đuôi gif
2. thực thi php

![image](https://hackmd.io/_uploads/B1-iDqw5R.png)
**GET**
![image](https://hackmd.io/_uploads/H10PDcD5C.png)

# Tổng kết bí kíp 

1. tại sai chỉ có php, asp,jsp bị fileupload . vì nó file-base web

![image](https://hackmd.io/_uploads/BJ7k7iqsA.png)

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

![image](https://hackmd.io/_uploads/Hk1G7sqi0.png)

## 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

![image](https://hackmd.io/_uploads/SkULpTqoC.png)

- ở đâ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 đó 

![image](https://hackmd.io/_uploads/HyNsAa9iC.png)

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














































