WHAT IS XXE Vulnerability?

 


1. Khái niệm về file XML

XML (eXtensible Markup Language) là một định dạng tài liệu sử dụng các thẻ (tags) để mô tả dữ liệu theo cách có cấu trúc, có thể mở rộng và dễ dàng trao đổi giữa các hệ thống. XML được thiết kế để lưu trữ và vận chuyển dữ liệu và có thể đọc được bởi cả con người lẫn máy tính.

2. Cấu trúc
  • Khai báo XML
  • Thẻ gốc (root element)
  • Các phần tử (elements)
  • Thuộc tính (attributes)
  • Nội dung
3. Ví dụ File XML
<?xml version="1.0" encoding="UTF-8"?> ---> khai báo XML
<bookstore>  ---> phần tử gốc (root element)
<book category="fiction" > ---> phần thử con (elements) và thuộc tính category
<title lang="en">The great book</title> ---> phần tử con của book
<author>Don't Root Me</author>           ---> phần tử con của book
<year>2020</year>                                 ---> phần tử con của book
</book> ---> Kết thúc thẻ book
</bookstore> ---> Kết thúc thẻ root element

4. XML Vulnerability là gì?
Là một lỗ hổng trong các ứng dụng xử lý file XML. Xảy ra khi trong file XML có khai báo một thực thể bên ngoài (external entities). Attacker có thể lợi dụng tính năng này để truy cập các tài nguyên nhạy cảm trên hệ thống như file passwd (/etc/passwd)

5. Cách thức hoạt động
XXE lợi dụng tính năng khai báo các thực thể bên ngoài để tham chiếu đến các tài nguyên bên ngoài server.
Ví dụ file xml:

<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>
Trong ví dụ trên thì xxe là một thực thể bên ngoài được định nghĩa bằng SYSTEM và tham chiếu đến 1 file /etc/passwd.
Khi parser XML xử lý file xml trên thì nó sẽ đọc &xee và lấy nội dung trong file /etc/passwd rồi xuất ra màn hình

6. Mối đe dọa mang lại
  • Local File Disclosure (truy xuất thông tin hệ thống): /etc/passwd hoặc C:\Windows\System32\drivers\etc\hosts 
  • Dos Attack: Tạo ra một vòng lặp thực thể đệ quy hoặc request các tài nguyên lớn, gây quá tải dẫn đến tấn công từ chối dịch vụ
  • SSRF Attack: XXE lợi dụng hệ thống gửi các request nội bộ hoặc bên ngoài
  • RCE: có thể kết hợp với các kĩ thuật tấn công khác để thực hiện RCE lên target
7. Example XXE
- DoS
<!DOCTYPE lolz [
  <!ENTITY lol "lol">
  <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
  <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
  <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
]>
<lolz>&lol9;</lolz>

- SSRF
<!DOCTYPE test [
  <!ENTITY xxe SYSTEM "http://malicious.com/data">
]>
<test>&xxe;</test>

8. Nguyên nhân
  • Parser XML mặc định cho phép xử lý các thực thể bên ngoài, dẫn đến lỗ hổng nếu input data không được kiểm tra trước khi xử lý
  • Chấp nhận đầu vào từ các nguồn không đáng tin cậy (untrusted data)
9. XXE Payload


10. Thực hiện bài lab CTF (source: PICOCTF)
target
scan url thì không ra gì..
Mở burpsuite và kiểm tra request


Ta thấy khi click vào details thì sẽ tạo 1 request POST như burpsuite bắt
Trong request chứa một file XML yêu cầu ID nào đó trên server
Ta thử thay ID khác như là 10 chẳng hạn

Ta có thể dự đoán rằng có thể Injection vào file XML này. Và ta cũng dự đoán rằng đây là một lỗ hổng XXE
Ta thay payload như dưới

Flag đã xuất hiện ở dòng cuối

Author: Zero







Nhận xét

Đăng nhận xét