---
# System prepended metadata

title: DIRECTORY TRAVERSAL WRITE UP
tags: [PortSwigger, Writeup]

---

# DIRECTORY TRAVERSAL WRITE UP
---
###### tags: `PortSwigger` `Writeup`

## 1. Lab: File path traversal, simple case
![](https://i.imgur.com/oPTDedN.png)
- Lab này có chứa lỗ hổng file path traverval trong phần giao diện ở mục ảnh sản phẩm, để solve lab thì em cần lấy thông từ file /etc/passwd
- Đầu tiên, em đưa trang web này BurpSuite để xem xét
- Đưa tab view detail của một sản phẩm bất kỳ vào tab Repeater để tiến hành thay đổi đường dẫn
- Thì em thấy đường dẫn của 1 ảnh thường sẽ như này
    ![](https://i.imgur.com/BSJ79q1.png)
- Ở tab Repeater, em thay đổi đường dẫn, không phải là `GET product?productID= ` nữa mà là `GET image?filename= `, thì nếu em để địa chỉ là `3.jpg`, nó sẽ trả về cho em ảnh trên
![](https://i.imgur.com/JZgI1Gr.png)
- Em sẽ tiến hành đọc file /etc/passwd bằng cách sử dụng `../`, nó có nghĩa là trở về thư mục cha của thư mục hiện tại, thì em đã thử dùng 1 lần, 2 lần, rồi đến lần thứ 3 là đã trả về được thư mục root, em đã có thể xem được file
![](https://i.imgur.com/oANn4xw.png)
- Như vậy, em đã solve được lab

## 2. Lab: File path traversal, traversal sequences blocked with absolute path bypass
![](https://i.imgur.com/Pf0PXW8.png)
- Lab này có chứa lỗ hổng file path traversal trong cơ chế hiện ảnh sản phẩm.
- Trang web trên đã chặn những dấu `../` nên em không thể dùng cách như lab trước, nên em phải tìm cách khác. Để solve được lab trên em cần phải xem được nội dung của file etc/passwd
- Đầu tiên em vẫn sẽ đưa trang web này vào BurpSuite rồi đưa vào tab Repeater để xem xét
- Vì trang web đã block cách sử dụng `../` nên em đã nghĩ đến việc sử dụng đường dẫn tuyệt đối:
- Bằng cách trỏ thẳng filename đến etc/passwd: 
```
/image?filename=/etc/passwd
```
- Em đã có thể xem được file etc/passwd luôn mà không cần phải dùng traversal sequences
![](https://i.imgur.com/JMT2p08.png)
- Như vậy, em đã solve được lab trên
![](https://i.imgur.com/HpVslZ0.png)

## 3. Lab: File path traversal, traversal sequences stripped non-recursively
![](https://i.imgur.com/NVIohHY.png)
- Lab này có chứa lỗ hổng File Traversal trong cơ chế hiện hình ảnh của sản phẩm
- Khi sử dụng dãy `../` để truyền vào filename thì trang web sẽ gỡ rối ra trước khi thực thi. Để solve được lab em cần phải xem được thông tin của file /etc/passwd
- Vì trang web có cơ chế sẽ gỡ 1 lần `../` nên em đã nghĩ đến sử dụng cách là sử dụng `...//` thay vì chỉ 1 lần `../`, khi đó trang web sẽ gỡ rối ra và em vẫn còn `../`, sử dụng 3 lần, em đã duyệt đến thư mục root và xem được file /etc/passwd
![](https://i.imgur.com/lypyI7E.png)
- Như vậy, em đã solve được lab 
![](https://i.imgur.com/bbv5Pma.png)

## 4. Lab: File path traversal, traversal sequences stripped with superfluous URL-decode
![](https://i.imgur.com/j9iwWrX.png)
- Lab này có chứa lỗ hổng file path traversan ở cơ chế hiện hình ảnh sản phẩm
- Trang web này đã chặn tất cả những input có chứa ký tự duyệt qua `../`. Trang web sẽ biến về dạng URL-Decode input trước khi thực thi
- Để solve được lab, em cần phải xem được nội dung của file /etc/passwd
- Vì lab bảo rằng trang web sẽ URL-Decode input của em trước khi thực thi, nên em đã tiến hành URL-Encode `../../../` 2 lần rồi đưa vào input, cụ thể là:
![](https://i.imgur.com/S28Bw39.png)
- Sử dụng nó vào câu request, em đã xem được nội dung của file /etc/passwd
```!
GET /image?filename=%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66%25%32%65%25%32%65%25%32%66/etc/passwd
```
![](https://i.imgur.com/QRL3mce.png)
- Như vậy, em đã solve được lab
![](https://i.imgur.com/GeDcVaA.png)

## 5. Lab: File path traversal, validation of start of path
![](https://i.imgur.com/qLBgNYh.png)
- Trang web này sẽ chuyển toàn bộ đường dẫn đến file như một tham số yêu cầu, và sẽ thực thi nếu đường dẫn đó có thư mục ban đầu(base folder)
- Giờ em sẽ thay đổi trong tab Repeater, thay vì chỉ dùng `../` thì em sẽ gán thêm folder đầu tiên mà em chọn để lấy thông tin, cụ thể là lấy ảnh, đó là: `/var/www/images`, đây là thư mục gốc để có thể trỏ đến các ảnh, nên em bắt đầu thực hiện qua folder từ đó:
![](https://i.imgur.com/eaId4qs.png)
- Như vậy, em đã solve được lab:
![](https://i.imgur.com/Ff6S2HL.png)

## 6. Lab: File path traversal, validation of file extension with null byte bypass
![](https://i.imgur.com/Jsv5rks.png)
- Trang web này sẽ chỉ duyệt những những đường dẫn filename mà có định dạng đuôi file đúng với định dạng được qui định
- Ở đây em bypass từ chỗ tìm kiếm ảnh, nên hiện tại đường dẫn filename của em cần phải kết thúc bằng đuôi .jpg
![](https://i.imgur.com/RnNKSxh.png)
(Em nghĩ đấy là jpg vì ấn vào ảnh của các sản phẩm đều có đuôi là jpg)
- Vấn đề là, làm sao để em biến đường dẫn thành 1 file.jpg để bypass được trang web?
- Em đã nghĩ đến việc sử dụng byte NULL để bypass được đuôi file này, việc cần làm chỉ là thêm %00 vào cuối đường dẫn và thêm .jpg là em đã thực hiện bypass thành công, vì sau ký tự null thì đoạn .jpg ở đằng sau sẽ không có ý nghĩa nữa, vì bản chất của ký tự NULL là để kết thúc một chuỗi
![](https://i.imgur.com/gPKbkvV.png)
- Em đã solve được lab bằng cách đó: 
![](https://i.imgur.com/9Mw3aFV.png)
 