NỘI DUNG
Tiếp theo nội dung Penetration Testing Step 3 – Các đường chấm mút với DOM based Cross-Site Scripting (Part 2), kỳ này tôi sẽ tiếp tục và dứt điểm câu chuyện demo chấm mút với DOM based Cross-Site Scripting. Hiển nhiên, cũng giống như các kỳ trước, tôi cũng sẽ nhờ cậy vào ông PortSwigger để demo làm rõ mà không phải hì hục dàn cảnh.
Trong nội dung kỳ này, tôi sẽ bàn về khả năng song kiếm hợp bích của DOM based XSS với đám relected/stored data.
#1. Ăn DOM XSS với stored data như nào?
Với trường hợp này, website khi nhận dữ liệu từ resquest sẽ lưu lại vào server sau đó đẩy dữ liệu ra ở các response sau đó. Nếu trong đám response có chứa script xử lý dữ liệu ẩu tả thì nạn nhân sẽ vỡ mồm. Rồi, tôi bay vô phần demo luôn cho rõ với trang blog của bài lab.

Sau đó bạn chọn View post đại một bài nào đó.

Tiếp đến, bạn có thể thử nghiệm đâm thọt vô phần Comment như sau rồi bấm Post Comment.

Lưu ý:
- Phần comment scr=1 để phát sinh lỗi dẫn đến onerror event chạy script (minh họa với alert(1)) tương tự như mấy kỳ trước. Ở đây chỉ có một điểm lưu ý là cái angle bracket (<>) sẽ bị ứng dụng encode với replace() function của JavaScript. Vấn đề phát sinh từ việc replace() function này chỉ xử lý đối tượng xuất hiện đầu tiên. Do vậy, với việc bổ sung thêm angle bracket vào đầu nội dung comment sẽ vô hiệu hóa quá trình encode cái angle bracket thứ hai có chứa hàng độc hại;
- Phần Name và Email thì để cho đủ đội hình thôi.

Sau khi Post Comment, bạn bấm thử Back to blog mà ứng dụng hiện pop up như sau là ngon ăn.

#2. Rồi chấm mút với reflected DOM XSS ra sao?
Với thể loại này, server sẽ xử lý dữ liệu bốc từ request để đẩy vô response. Dữ liệu có thể chui vô dạng JavaScript string đơn thuần hoặc dữ liệu của các thành phần DOM như form field. Nếu sau đó ứng dụng xử lý đám dữ liệu “phản damage” kiểu bẩn bựa thì có thể gây hậu quả nghiêm trọng.
Trước khi vô chọc ngoáy, tôi cần nhắc lại phần Burp Suite Proxy. Nếu bạn muốn kiểm soát từng request thì cần di chuyển đến phần Intercept và bật Intercept is on như sau.

Lưu ý:
- Nếu chưa biết thiết lập Burp Suite thì bạn có thể xem nội dung Penetration Testing Step 3 – 6 điều bạn nên biết trước khi xài tool khủng Burp Suite;
- Bạn có thể xem thêm về Burp Suite Proxy trong nội dung Penetration Testing Step 3 – Chi tiết về Proxy tab, trái tim của Burp Suite.
Rồi, giờ bay vô trang Blog của bài lab demo để chấm mút với Search function. Bạn có thể quất thử một cái string test vớ vẩn như sau để thăm dò dư luận.

Phần request tương ứng quan sát từ Burp Suite Proxy sẽ kiểu như sau.

Lưu ý: Với thiết lập Intercept is on, bạn sẽ cần chọn Forward để đẩy hàng đi trước khi nhận Response về.
Sau đó quan sát hàng về phía Response thì bạn sẽ có thể thấy cái string vớ vẩn tôi đút vào ở trên xuất hiện trong JSON response như sau (Chỗ này thông tin khá ít nên bạn nhìn vô sẽ thấy ngay. Trường hợp nhiều thông tin quá thì bạn có thể sử dụng tính năng search bên phía Response cho tiện).

Quan sát HTTP history của Burp Suite Proxy, bạn cũng sẽ thấy có xuất hiện con hàng searchResult.js chịu trách nhiệm xử lý phần Search ở trên. Soi kèo kỹ hơn, bạn sẽ thấy cái script này có eval() function xử lý phần responseText như bên dưới.

Tiếp tục mưu đồ đen tối, bạn có thể thử nghiệm đút đám search string độc hại vào thử.

Lưu ý:
- Double quote (“) ở đầu để đóng cái string của search term lại;
- Subtraction operator (dấu “-”) dùng để tách biệt cái expression trước khi alert() function được gọi;
- Curly bracket (}) và 2 cái forward slash (/) ở cuối dùng để đóng cái JSON object lại và comment hết đống tả pí lù phía sau (nếu có).
Sau khi đẩy request đi bạn sẽ thấy response trả về kiểu như sau.

Lúc này bạn có thể thấy cái quotation mark (“) bị escape với backflash (\) trong JSON response và dập tắt luôn mưu đồ đen tối của bạn. Bạn có thể thử nghiệm nhiều lần và rồi cuối cùng nhận ra cái backflash (\) sẽ không bị escapse. Với thông tin đắt giá này, bạn có thể tung ra đòn quyết định là thêm một cái backflash (\) vào phía trước với mục tiêu vô hiệu hóa cái backflash (\) dùng để escape (móa, gì mà rối nùi thế này?!).

Lúc này quan sát cái respone bạn sẽ thấy cái searchTerm kiểu như sau.

Và kết quả tương ứng dẫn đến là xuất hiện cái pop up cho biết mưu đồ đã thực hiện thành công.

Phù, đến đây tin xin tạm kết với cái vũng lầy XSS. Như bạn thấy, phần lớn các bài lab đều đã được đơn giản hóa cho bạn dễ ăn nhằm minh họa ý tưởng tấn công. Tuy nhiên, trong thực tế, để “ăn” được XSS đôi khi bạn phải vã mồ hôi, sôi bọt mép chứ không đùa. Có thể tôi sẽ sắp xếp quay lại với chủ đề XSS này sau. Còn bây giờ xin chào và hẹn gặp lại bạn vào năm sau.
P/S: Happy New Year!!!
1 thought on “Penetration Testing Step 3 – Các đường chấm mút với DOM based Cross-Site Scripting (tiếp theo và hết)”