Bao gồm tệp cục bộ [LFI] được giải thích bằng các ví dụ và tìm hiểu cách thực hiện kiểm tra bảo mật cho các lỗ hổng LFI
Giới thiệu
Mục đích của tài liệu này là hỗ trợ các cam kết đánh giá bảo mật ứng dụng web bằng cách hợp nhất nghiên cứu về các kỹ thuật kiểm tra LFI. Các lỗ hổng LFI thường được phát hiện trong quá trình đánh giá ứng dụng hoặc kiểm tra thâm nhập bằng các kỹ thuật có trong tài liệu này
Lỗ hổng bao gồm tệp cục bộ [LFI] là gì?
Bao gồm tệp cục bộ [LFI] cho phép kẻ tấn công bao gồm tệp trên máy chủ thông qua trình duyệt web. Lỗ hổng này tồn tại khi một ứng dụng web bao gồm một tệp mà không làm sạch chính xác đầu vào, cho phép kẻ tấn công thao túng đầu vào và chèn các ký tự duyệt đường dẫn cũng như bao gồm các tệp khác từ máy chủ web
Sau đây là một ví dụ về mã PHP dễ bị bao gồm tệp cục bộ
Xác định các lỗ hổng LFI
Các lỗ hổng LFI thường dễ xác định và khai thác. Ví dụ: bất kỳ tập lệnh nào bao gồm tệp từ máy chủ web đều là ứng cử viên sáng giá để thử nghiệm LFI tiếp theo
/script.php?page=index.html
Một nhà tư vấn bảo mật sẽ cố gắng khai thác lỗ hổng này bằng cách thao túng tham số vị trí tệp, chẳng hạn như
/script.php?page=../../../../../../../../etc/passwd
Trên đây là một nỗ lực để hiển thị nội dung của tệp /etc/passwd trên hệ thống dựa trên UNIX/Linux
Dưới đây là ví dụ khai thác thành công lỗ hổng LFI trên ứng dụng web
Trình bao bọc PHP
PHP có một số trình bao bọc thường có thể bị lạm dụng để bỏ qua các bộ lọc đầu vào khác nhau
Trình bao bọc mong đợi PHP
PHP expect://
cho phép thực thi các lệnh hệ thống, tiếc là mô-đun mong đợi PHP không được bật theo mặc định
php?page=expect://ls
Tải trọng được gửi trong một yêu cầu POST tới máy chủ, chẳng hạn như
/fi/?page=php://input&cmd=ls
Ví dụ sử dụng php. // đầu vào chống lại DVWA
Lời yêu cầu
Mô tả hình ảnh. POST yêu cầu sử dụng php. //đầu vào
Phản ứng
Mô tả hình ảnh. Đầu ra từ lệnh “ls” được hiển thị phía trên biểu ngữ DVWA
PHP php. //lọc
/script.php?page=index.html0 cho phép bút kiểm tra bao gồm các tệp cục bộ và mã hóa base64 đầu ra. Do đó, mọi đầu ra base64 sẽ cần được giải mã để hiển thị nội dung
Một ví dụ sử dụng DVWA
vuln.php?page=php://filter/convert.base64-encode/resource=/etc/passwd
Mô tả hình ảnh. Hình ảnh hiển thị văn bản được mã hóa base64 ở đầu trang được hiển thị
Giải mã Base64 chuỗi cung cấp tệp /etc/passwd
Mô tả hình ảnh. Hình ảnh hiển thị đầu ra được giải mã base64 từ /etc/passwd trên hệ thống UNIX/Linux
/script.php?page=index.html0 cũng có thể được sử dụng mà không cần mã hóa đầu ra base64 bằng cách sử dụng________số 8_______
Mô tả hình ảnh. Hình ảnh hiển thị đầu ra từ /etc/passwd trên hệ thống UNIX/Linux sử dụng php. //lọc
Trình bao bọc ZIP PHP LFI
Quá trình trình bao bọc zip được tải lên. phía máy chủ tệp zip cho phép tải tệp zip lên bằng cách khai thác chức năng tệp dễ bị tổn thương của bộ lọc zip thông qua LFI để thực thi. Một ví dụ tấn công điển hình sẽ giống như
- Tạo một shell đảo ngược PHP
- Nén thành một. tập tin nén
- Tải trọng tải shell đã nén lên máy chủ
- Sử dụng trình bao bọc zip để giải nén tải trọng bằng cách sử dụng. php?page=zip. //đường dẫn/đến/tệp. zip%23vỏ
- Ở trên sẽ giải nén tệp zip vào shell, nếu máy chủ không nối thêm. php đổi tên nó thành shell. thay vào đó là php
Nếu chức năng tải tệp lên không cho phép tải tệp zip lên, bạn có thể thử bỏ qua chức năng tải tệp lên [xem. Tài liệu thử nghiệm tải lên tệp OWASP]
Các ứng dụng web của bạn đã được đánh giá gần đây chưa?
LFI qua /proc/self/environ
Nếu có thể bao gồm /proc/self/environ thông qua lỗ hổng bao gồm tệp cục bộ, thì việc giới thiệu mã nguồn qua tiêu đề Tác nhân người dùng là một vectơ có thể. Khi mã đã được đưa vào tiêu đề Tác nhân người dùng, lỗ hổng bao gồm tệp cục bộ có thể được tận dụng để thực thi
/script.php?page=index.html2 và tải lại các biến môi trường, thực thi trình bao đảo ngược của bạn
vỏ hữu ích
Các cửa sau PHP nhỏ hữu ích cho các kỹ thuật trên
Kỹ thuật Null Byte
Null byte injection bỏ qua việc lọc ứng dụng trong các ứng dụng web bằng cách thêm URL được mã hóa “Null bytes” chẳng hạn như %00. Thông thường, điều này bỏ qua các bộ lọc danh sách đen cơ bản bằng cách thêm các ký tự null bổ sung mà sau đó được cho phép hoặc không được xử lý bởi chương trình phụ trợ
Một số ví dụ thực tế về chèn byte rỗng cho LFI
vuln.php?page=/etc/passwd%00 vuln.php?page=/etc/passwd%2500
Cắt ngắn là một kỹ thuật bỏ qua danh sách đen khác. Bằng cách đưa tham số dài vào cơ chế bao gồm tệp dễ bị tổn thương có thể cắt bớt [cắt bỏ] tham số đầu vào, có thể bỏ qua bộ lọc đầu vào
Ô nhiễm tệp nhật ký
Ô nhiễm tệp nhật ký là quá trình đưa mã nguồn vào tệp nhật ký trên hệ thống đích. Điều này đạt được bằng cách giới thiệu mã nguồn thông qua các dịch vụ được hiển thị khác trên hệ thống đích mà hệ điều hành/dịch vụ đích sẽ lưu trữ trong các tệp nhật ký. Ví dụ: đưa mã shell ngược PHP vào một URL, khiến nhật ký hệ thống tạo một mục trong nhật ký truy cập apache cho mục không tìm thấy trang 404. Sau đó, tệp nhật ký apache sẽ được phân tích cú pháp bằng cách sử dụng lỗ hổng bao gồm tệp được phát hiện trước đó, thực thi trình bao đảo ngược PHP được chèn
Sau khi đưa mã nguồn vào [các] tệp nhật ký hệ thống đích, bước tiếp theo là xác định vị trí của tệp nhật ký. Trong giai đoạn điều tra và khám phá của một cuộc đánh giá bảo mật, hệ điều hành và máy chủ web mục tiêu sẽ được xác định, điểm khởi đầu tốt là tìm kiếm các đường dẫn nhật ký mặc định cho hệ điều hành và máy chủ web đã xác định [nếu chúng chưa được biết bởi . Danh sách tải trọng Burp LFI của FuzzDB có thể được sử dụng cùng với kẻ xâm nhập Burp để nhanh chóng xác định vị trí tệp nhật ký hợp lệ trên hệ thống đích
Một số dịch vụ thường được hiển thị trên hệ thống Linux/UNIX được liệt kê bên dưới
Apache / Nginx
Tiêm mã vào truy cập máy chủ web hoặc nhật ký lỗi bằng netcat, sau khi tiêm thành công, hãy phân tích vị trí tệp nhật ký máy chủ bằng cách khai thác lỗ hổng LFI đã phát hiện trước đó. Nếu nhật ký lỗi/truy cập máy chủ web dài, có thể mất một chút thời gian để thực thi mã được chèn của bạn
Email một Reverse Shell
Nếu máy mục tiêu chuyển tiếp thư trực tiếp hoặc qua một máy khác trên mạng và lưu trữ thư cho dữ liệu www của người dùng [hoặc người dùng apache] trên hệ thống thì có thể gửi email trình bao ngược tới mục tiêu. Nếu không có bản ghi MX nào tồn tại cho miền nhưng SMTP bị lộ thì có thể kết nối với máy chủ thư mục tiêu và gửi thư tới người dùng www-data / apache. Thư được gửi đến người dùng đang chạy apache, chẳng hạn như dữ liệu www để đảm bảo quyền của hệ thống tệp sẽ cho phép truy cập đọc tệp /var/spool/mail/www-data chứa mã trình bao đảo ngược PHP được chèn
Đầu tiên liệt kê hệ thống đích sử dụng danh sách tên tài khoản UNIX/Linux đã biết
Mô tả hình ảnh. Hình ảnh trên cho thấy trình bao đảo ngược PHP được gửi qua email kết nối với trình nghe netcat