Pages

DVWA CSRF Tutorial (Low Security)



Trong phần này chúng ta sẽ tỉm hiểu làm thế nào khai thác lỗ hổng CSRF trên DVWA ở mức độ thấp.

I. Tổng quan


Vậy lỗ hổng CSRF là gì ?

CSRF ( Cross Site Request Forgery) là kỹ thuật tấn công bằng cách sử dụng quyền chứng thực của người dùng đối với một website. CSRF là kỹ thuật tấn công vào người dùng, dựa vào đó hacker có thể thực thi những thao tác phải yêu cầu sự chứng thực. Hiểu một cách nôm na, đây là kỹ thuật tấn công dựa vào mượn quyền trái phép.

CSRF còn được gọi là "session riding", "XSRF"

Cách thực tấn công CSRF như thế nào ?

(phần này tham khảo trên Internet)
Các ứng dụng web hoạt động theo cơ chế nhận các câu lệnh HTTP từ người sử dụng, sau đó thực thi các câu lệnh này. Hacker sử dụng phương pháp CSRF để lừa trình duyệt của người dùng gửi đi các câu lệnh http đến các ứng dụng web. Điều đó có thể thực hiện bằng cách chèn mã độc hay link đến trang web mà người dùng đã được chứng thực.
Trong trường hợp phiên làm việc của người dùng chưa hết hiệu lực thì các câu lệnh trên sẽ được thực hiện với quyền chứng thực của người sử dụng. Ta có thể xét ví dụ sau:
  • Người dùng Alie truy cập 1 diễn đàn yêu thích của mình như thường lệ. Một người dùng khác, Bob đăng tải 1 thông điệp lên diễn đàn. Giả sử rằng Bob có ý đồ không tốt và anh ta muốn xóa đi một dự án quan trọng nào đó mà Alice đang làm.
  • Bob sẽ tạo 1 bài viết, trong đó có chèn thêm 1 đoạn code như sau:
<img height="0" width="0" src="http://www.webapp.com/project/1/destroy">
Để tăng hiệu quả che dấu, đoạn mã trên có thể được thêm các thông điệp bình thường để người dùng không chú ý. Thêm vào đó thẻ
img sử dụng trong trường hợp này có kích thước 0x0 pixel và người dùng sẽ không thể thấy được.
  • Giả sử Alie đang truy cập vào tài khoản của mình ở www.webapp.com và chưa thực hiện logout để kết thúc.
    Bằng việc xem bài post, trình duyệt của Alice sẽ đọc thẻ img và cố gắng load ảnh từ www.webapp.com, do đó sẽ gửi câu lệnh xóa đến địa chỉ này.
  • Ứng dụng web ở www.webapp.com sẽ chứng thực Alice và sẽ xóa project với ID là 1. Nó sẽ trả về trang kết quả mà không phải là ảnh, do đó trình duyệt sẽ không hiển thị ảnh.
Ngoài thẻ img, các thẻ html có thể sử dụng kĩ thuật trên có thể là:
<iframe height="0" width="0" src="http://www.webapp.com/project/1/destroy">
<link ref="stylesheet" href="http://www.webapp.com/project/1/destroy" type="text/css"/>
<bgsound src="http://www.webapp.com/project/1/destroy"/>
<background src="http://www.webapp.com/project/1/destroy"/>
<script type="text/javascript" src="http://www.webapp.com/project/1/destroy"/>
Các kĩ thuật CSRF rất đa dạng, lừa người dùng click vào link, gửi email chứa các đoạn mã độc đến người dùng…
Hacker còn có thể che giấu các link ở trên rất khéo léo. Ví dụ trong trường hợp thẻ img, người dùng có thể nhận ra nếu vào đường link chứa trong
<ing src="http://www.webapp.com/project/1/destroy"/>
Tuy nhiên, người dùng sẽ rất có phát hiện nếu hacker dùng đường link như sau:
<img height="0" width="0" src="http://www.ahackersite.com/abc.jpg"/>
và cấu hình lại máy chủ:
Redirect 302/abc.jpg http://www.webapp.com/project/1/destroy"/>
Như vậy người dùng sẽ rất khó để có thể phát hiện, vấn đề trách nhiệm phần lớn thuộc về các website của các nhà cung cấp.
II. Thực hành với DVWA
Vì đây là mức độ bảo mật thấp nên việc tấn công cũng khá đơn giản. 
Trước tiên, chúng ta khi gửi 1 yêu cầu thay dổi password và click submit. Sau đó chúng ta kiểm tra gói HTTP .
 => Chúng ta thấy 1 GET request và các tham số được gửi.
* Kịch bản tấn công là tôi (1 hacker) sẽ tạo ra 1 trang web để nạn nhân truy cập vào. Và đây là 1 website đơn giản tôi tạo để làm LAB. (sử dụng simpleHTTPServer)

Ồ, thoạt nhìn thì như trang web này có vẻ vô hại. Nhưng các bạn hãy nhìn vào source code bên dưới xem thế nào nhé.

Các bạn hãy chú ý vào thẻ img

Thay vì thuộc tính src trỏ tới 1 nội dung hình ảnh (ví dụ .jpeg hoặc png ...) thì tôi lại cho nó trỏ tới điểm thay đổi mật khẩu trên DVWA và thay đổi mật khẩu thành "pwned"
Vì vậy, khi nạn nhân truy cập 1 trang web mà tôi tấn công. Họ không biết bất cứ điều gì đã xảy ra
Nhưng chúng ta nhìn vào Network request dưới đây:

Như vậy, trong thẻ img tôi đã làm cho đã làm cho trình duyệt gửi 1 yêu cầu GET đến điểm thay đổi password. Bởi vì GET request được đến từ trình duyệt của nạn nhân và nạn nhân đã xác thực và nó đã gửi PHPSESSID trong cookie HTTP.
Và bây giờ chúng ta có thể đăng nhập với 1 password mới đó là "pwned"

thudinh Network and Security

No comments:

Adsense

Translate