Trình bao bọc php là gì?

Lỗ hổng File Inclusion cho phép kẻ tấn công File Inclusion, thường khai thác cơ chế “Dynamic File Inclusion” được phát triển trong ứng dụng đích. Lỗ hổng bảo mật xảy ra do việc sử dụng dữ liệu đầu vào do người dùng cung cấp mà không được giải thích hợp lý

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

  • Kiểm tra lỗi tiêm mật mã
  • Kiểm tra lỗi bảo mật IMAP SMTP Injection
  • Kiểm tra lỗi bảo mật XPath Injection
  • Kiểm tra lỗi bảo mật SSI Injection
  • Kiểm tra lỗi tiêm bảo mật XML injection

Điều này có thể dẫn đến việc xuất ra nội dung của tệp, nhưng tùy thuộc vào mức độ quan trọng, nó cũng có thể dẫn đến

  • Thực thi mã trên máy chủ web
  • Thực thi mã ở phía máy khách, giả sử như JavaScript có thể dẫn đến các cuộc tấn công khác, giả sử như tập lệnh trang web chéo (XSS)
  • Từ chối dịch vụ (DoS)
  • Lộ thông tin cảm ứng

Bao gồm tệp cục bộ (còn được gọi là LFI) là quá trình bao gồm các tệp, đã có mặt cục bộ trên máy chủ, thông qua công việc khai thác các thủ tục được đưa vào dễ bị tổn thương được triển khai trong ứng dụng. Lỗi này xảy ra, ví dụ. khi một trang nhận, bắt đầu vào, đường dẫn đến tệp phải được bao gồm và đầu vào này không được làm sạch đúng cách, cho phép các ký tự duyệt thư mục (không hạn chế như dấu chấm-chấm-gạch chéo) được đưa ra . Mặc dù hầu hết các ví dụ đều chỉ ra các tập lệnh PHP dễ bị tấn công, chúng ta nên nhớ rằng nó cũng phổ biến trong các công nghệ khác như JSP, ASP và các công nghệ khác

Tóm tắt nội dung

  • Làm thế nào để kiểm tra
    • Tiêm Null Byte
    • Cắt bỏ đường dẫn và dấu chấm
    • Trình bao bọc PHP
    • PHP filter
    • PHP ZIP
    • Data PHP
    • Kỳ vọng PHP
  • Biện pháp giải quyết hậu quả
  • tool

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

Vì LFI xảy ra khi các đường dẫn được truyền để bao gồm các câu lệnh không được làm sạch đúng cách, trong cách tiếp cận hộp kiểm tra màu đen, chúng ta nên tìm kiếm các lệnh lấy tên tệp làm tham số

Hãy xem xét ví dụ sau

http: //vulnerable_host/preview.php? file = example.html

Có vẻ như đây là một nơi hoàn hảo để thử LFI. Nếu kẻ tấn công đủ may mắn và thay vì chọn trang thích hợp từ mảng theo tên của nó, tập lệnh bao gồm trực tiếp tham số đầu vào, thì có thể bao gồm các tùy chọn tệp trên máy chủ

Ý niệm bằng chứng từ điển hình sẽ được tải xuống tệp mật khẩu

http: //vulnerable_host/preview.php? file = . / . / . / . / etc / passwd

Nếu các điều kiện được đề cập ở trên câu trả lời, kẻ tấn công sẽ thấy một cái gì đó giống như sau

  • nguồn gốc. x. 0. 0. nguồn gốc. / nguồn gốc. /bin/vỡ vụn
  • thùng rác. x. 1. 1. thùng rác. / thùng rác. /sbin/nologin
  • yêu tinh. x. 2. 2. yêu tinh. /sbin. /sbin/nologin
  • alex. x. 500. 500. alex. /nhà/ alex. /bin/vỡ vụn
  • margo. x. 501. 501. / nhà / margo. /bin/vỡ vụn

Ngay cả khi có lỗi như vậy tồn tại, việc khai thác của nó có thể phức tạp hơn trong điều kiện thực tế. Vui lòng xem xét đoạn mã sau

Thay thế đơn giản bằng một tên tệp ngẫu nhiên sẽ không hoạt động vì postfix. php was add on the head to be supply. Để vượt qua nó, người thử nghiệm có thể sử dụng một số kỹ thuật để có khả năng khai thác như mong đợi

Tiêm Null Byte

Ký tự null (còn được gọi là ký tự kết thúc null hoặc byte rỗng) là ký tự điều khiển có giá trị bằng không trong nhiều bộ ký tự đang được sử dụng như một ký tự dành riêng để đánh dấu phần cuối của . Sau khi được sử dụng, bất kỳ ký tự nào sau byte đặc biệt này sẽ bị loại bỏ. Thông thường, cách đưa ký tự này vào chuỗi mã hóa URL %00 bằng cách thêm nó vào đường dẫn được yêu cầu. Trong mẫu trước của chúng tôi, việc thực hiện yêu cầu truy cập http. //vulnerable_host/xem trước. php? . /. /. /. /etc/passwd% 00 sẽ bỏ qua phần mở rộng. php được thêm vào tên tệp đầu vào , trả lại cho những kẻ tấn công danh sách những người sử dụng cơ bản để khai thác thành công

Cắt bỏ đường dẫn và dấu chấm

Hầu hết các bản cài đặt PHP có giới hạn tên tệp là 4096 byte. Nếu bất kỳ tên tệp định dạng nào dài hơn độ dài đó, thì PHP chỉ cần cắt bớt tên tệp đó, loại bỏ bất kỳ ký tự bổ sung nào. This action used to make up the PHP tool remove over extension section. php by way to move it out khỏi giới hạn 4096 byte. Khi điều này xảy ra, không có lỗi nào được kích hoạt;

Loại bỏ qua này thường được kết hợp với các chiến lược lược bỏ qua logic khác như mã hóa một phần đường dẫn tệp bằng mã hóa Unicode, giới thiệu mã hóa kép hoặc bất kỳ đầu vào nào khác vẫn đại diện cho tên tệp mong muốn hợp lệ

Trình bao bọc PHP

Lỗ hổng bao gồm tệp cục bộ thường được coi là lỗi chỉ đọc mà kẻ tấn công có thể sử dụng để đọc dữ liệu nhạy cảm từ máy chủ lưu trữ ứng dụng dễ dàng bị tấn công. Tuy nhiên, trong một số công cụ phát triển có thể khai thác, lỗ hổng này có thể được sử dụng để nâng cao cuộc tấn công từ LFI thành lỗ hổng Thực thi mã từ xa có khả năng xâm phạm hoàn toàn máy chủ

Quá trình cải tiến này trở nên phổ biến khi kẻ tấn công có thể kết hợp lỗ hổng LFI với một số trình bao bọc PHP nhất định

Trình bao bọc là một mã bao quanh mã khác để thực hiện một số chức năng bổ sung. PHP triển khai nhiều trình bao bọc tích hợp để được sử dụng với các chức năng của tệp hệ thống. Khi việc sử dụng chúng được phát hiện trong quá trình thử nghiệm ứng dụng, bạn nên thử sử dụng nó để xác định nguyên nhân thực sự của (các) điểm yếu được phát hiện. Dưới đây, bạn có thể nhận được danh sách với các trình bao bọc được sử dụng phổ biến nhất, mặc dù bạn nên xem xét rằng nó chưa đầy đủ và đồng thời có thể đăng ký các trình bao bọc tùy chỉnh mà nếu được mục

PHP filter

Có thể sử dụng để truy cập hệ thống tệp cục bộ; . Trình bao bọc này có thể được sử dụng để lấy nội dung của tệp ngăn máy chủ thực thi tệp đó. Ví dụ. cho phép kẻ tấn công đọc nội dung của tệp PHP để lấy mã nguồn xác thực dự kiến ​​thông tin nhạy cảm như thông tin xác thực hoặc các lỗ hổng có thể khai thác khác

Trình bao bọc có thể được sử dụng như php. // lọc/chuyển đổi. base64-encode/resource=FILE trong đó FILE là file cần truy xuất. Do công việc sử dụng quá trình thực thi này, nội dung của tệp đích sẽ được đọc, được mã hóa thành base64 (ở đây là bước ngăn chặn máy chủ thực thi) và được trả lại cho Tác nhân người dùng

PHP ZIP

Trên PHP 7. 2. 0, nén. // trình bao bọc đã được giới thiệu để thao tác với các tệp nén zip. Trình bao bọc này mong đợi cấu trúc tham số sau. khóa kéo. /// filename_path # internal_filename trong đó filename_path là đường dẫn đến tệp độc hại và internal_filename là đường dẫn chứa tệp độc hại bên trong tệp ZIP đã xử lý. Trong quá trình khai thác, thông thường # sẽ được mã hóa bằng URL của nó Giá trị được mã hóa % 23

Việc sử dụng trình bao bọc này có thể cho phép kẻ tấn công thiết kế một tệp ZIP độc hại có thể tải lên máy chủ, chẳng hạn như ảnh đại diện hoặc sử dụng bất kỳ hệ thống tải lên tệp nào có sẵn trên đó . khóa kéo. // trình bao bọc thì không yêu cầu tệp zip có bất kỳ phần mở rộng tiện ích nào) được thực thi do lỗi theo dõi LFI

Để kiểm tra lỗi này, quy trình sau có thể được thực hiện để tấn công ví dụ mã trước đó đã cung cấp

  • Tạo tệp PHP sẽ được thực thi, có giới hạn với nội dung
  • Nén nó dưới dạng tệp ZIP mới có tên mục tiêu. khóa kéo
  • Đổi tên tệp mục tiêu. zip to target. jpg để bỏ qua việc xác thực phần mở rộng và tải tệp đó lên trang web mục tiêu làm ảnh đại diện của bạn
  • Giả sử rằng mục tiêu tập tin. jpg được lưu trữ bộ cục bộ trên máy chủ theo đường dẫn. /hình đại diện/mục tiêu. jpg, hãy khai thác lỗi khám phá với trình bao bọc ZIP PHP bằng cách chèn tải trọng sau vào URL dễ dàng bị tấn công. khóa kéo. //. /hình đại diện/mục tiêu. jpg%23code (hãy nhớ rằng%23 tương ứng với #)

Vì trên mẫu của chúng tôi, phần mở rộng. php được kết nối với tải trọng của chúng tôi, nên yêu cầu truy cập http. //vulnerable_host/xem trước. php? . //. /hình đại diện/mục tiêu. jpg%23code sẽ dẫn đến việc thực thi mã tệp. php tồn tại trong tệp ZIP độc hại

Data PHP

Có sẵn kể từ PHP 5. 2. 0, this bao bọc mong muốn sử dụng như sau. dữ liệu. //text/trơn; . Điều quan trọng là phải xem xét rằng trình bao bọc này sẽ chỉ khả dụng nếu tùy chọn allow_url_include được bật

Để kiểm tra LFI bằng cách sử dụng trình bao bọc này, mã được thực thi phải được mã hóa Base64, ví dụ:.

Kỳ vọng PHP

Trình bao bọc này, không được bật theo mặc định, cấp quyền truy cập vào các quy trình stdio, stdout và stderr. Mong đợi được sử dụng như mong đợi. // lệnh máy chủ sẽ thực thi lệnh được cung cấp trên BASH và trả về kết quả của nó

Biện pháp giải quyết hậu quả

Giải pháp hiệu quả nhất để loại bỏ lỗi bao gồm tệp bao gồm là tránh chuyển đầu vào do người dùng gửi tới bất kỳ khung API / hệ thống tệp nào. Nếu không thể, ứng dụng có thể duy trì một danh sách cho phép các tệp, có thể bao gồm trang này và sau đó sử dụng một số nhận định dạng (ví dụ:. number only) để truy cập vào tệp đã chọn. Bất kỳ yêu cầu nào có chứa mã định danh không hợp lệ đều phải bị từ chối, theo cách này sẽ không có bề mặt tấn công bất kỳ đối với người dùng độc hại thao túng đường dẫn