# I. Symlink
Symlink hay còn gọi là Symbolic links, là một file đặc biệt trỏ đến một file hoặc thư mục khác trong hệ điều hành Linux .
Để tạo 1 symlink ta sẽ sử dụng command `ln` với option `-s`.

**Tính chất :**
Với 1 symlink ta hoàn toàn có thể thao tác trực tiếp đến file hoặc thư mục gốc, ví dụ khi mình thay đổi nội dung của file link thì file /etc/passwd của mình cũng sẽ bị thay đổi theo. Hoặc khi xóa 1 file hay thư mục nào đó trong đường dẫn thì đường dẫn /etc của mình cũng sẽ bị như vậy.
## 1. Symlink attack
**Symlink attack chỉ thực hiện được ở webserver trên linux**
Để tấn công trong trường hợp này, trang web bị lỗi sẽ thỏa 2 điều kiện sau:
1. Cho upload file tar, zip hay bất cứ định dạng file nén nào
2. Webserver giải nén file đó (và in nội dung file bên trong ra?)
Bước 1 : Tạo một symlink
Bước 2 : Nén nó lại
Ta cần sử dụng option đó là `-y` hoặc `--symlink`

Đối với thư mục

## 2. Demo Labs
### a. Đọc file tùy ý
Web có tính năng giải nén file zip được upload lên như sau

Bây giờ mình sẽ thử tấn công để đọc file `/etc/passwd`
Đầu tiên tạo một symlink trỏ đến /etc/passwd

Tiếp theo tiến hành zip nó lại

Cuối cùng upload lên server
Kết quả :

Truy cập

### b. RCE
Như ta đã biết tính chất của một symlink là : khi thao tác đến symlink thì giá trị của file hoặc thư mục gốc cũng sẽ bị thay đổi.
Sẽ ra sao nếu như upload lên một symlink trỏ đến thử mục `/var/www/html`
Sau đó một tiếp tục upload lên một một thư mục có cùng tên , nhưng bên trong đó sẽ chứa một file shell.php
**Giả thuyết** : Lúc này 2 thư mục sẽ được ghi đè lại với nhau , như vậy symlink sẽ bị thay đổi là add thêm file shell.php (`link/shell.php`) -> dẫn đến thư mục (gốc) `/var/www/html` cũng sẽ thay đổi theo -> `/var/www/html/shell.php`
**Kiểm chứng** :
Bước 1 :

Sau đó upload lên server

Bước 2 :

Tiếp tục upload lên server

Bước 3 : Truy cập


# II. Zip Slip
## 1. Zip Slip attack
Trường hợp Path Traversal liên quan đến việc **thay đổi name file** bên trong file nén (zip), đó chính là lỗi Zip Slip
**Khai thác lỗ hổng Zip Slip**
- Để exploit lỗi Zip Slip này, người ta thường dùng công cụ cho phép thay đổi tên file sao cho có chứa `../`
- Một trong các công cụ nổi tiếng là [evilarc](https://github.com/ptoomey3/evilarc/blob/master/evilarc.py)
- Sau khi download file [evilarc.py](https://github.com/ptoomey3/evilarc/blob/master/evilarc.py) ta thực hiện lệnh
`python3 evilarc.py -d 2 -o unix shell.php`
- Trong đó:
`-d`: số lượng `../` ta muốn thêm vào tên file
`-o`: tạo file theo tiêu chuẩn của hệ điều hành nào
- File nén được tạo ra có tên là evil.zip
## 2. Demo Labs
Trang web có chức năng upload file


Mục tiêu của ta là upload shell được vào thư mục `/var/www/html`
Có 2 trường hợp xử lý

- Nếu là file ảnh thì sẽ thực hiện upload lên server
- Nếu là file zip thì sẽ gọi hàm unzip để giải nén

Nhận thấy đoạn code giải nén bị lỗi path traversal
Để ý ở dòng 52 thì biến `$info['name']` chứa name_file bên trong thư mục zip được nối thẳng vào để tạo đường dẫn .
Do name_file ta có thể kiểm soát được nên ta có thể thêm `../` vào name_file để thực hiện path traversal ra ngoài `/var/www/html`
Thực hành exploit zip slip :
Bước 1 : Tải công cụ [evilarc.py](https://github.com/ptoomey3/evilarc/blob/master/evilarc.py)
Bước 3 : Tạo một file info.php và thực hiện lệnh
`python3 evilarc.py -d 2 -o unix info.php`

Bước 4 : Upload và truy cập

# Trí tuệ

# Tham Khảo
https://tsublogs.wordpress.com/2017/04/05/pentest-qa-cung-tsu-2-symlink-attack/
https://www.youtube.com/watch?v=hB7BzU0iTnY
https://clbuezzz.wordpress.com/2022/04/27/symlink-attack/
https://youtu.be/5mapJQ7TFyc?si=2SvL797y5qpT6mWj