Các lỗ hổng Full Path Disclosure (FPD) cho phép kẻ tấn công nhìn thấy đường dẫn đến webroot / tệp. ví dụ: / home / omg / htdocs / file /. Một số lỗ hổng nhất định, chẳng hạn như sử dụng truy vấn load_file () (trong SQL Injection) để xem nguồn trang, yêu cầu kẻ tấn công có đường dẫn đầy đủ đến tệp mà chúng muốn xem.
Các bài viết liên quan:
Các yếu tố rủi ro của Full Path Disclosure
Các rủi ro liên quan đến FPD có thể tạo ra nhiều kết quả khác nhau. Ví dụ: nếu webroot bị rò rỉ, những kẻ tấn công có thể lạm dụng kiến thức và sử dụng nó kết hợp với các lỗ hổng bao gồm tệp (xem Phần bao gồm tệp PHP) để ăn cắp các tệp cấu hình liên quan đến ứng dụng web hoặc phần còn lại của hệ điều hành.
Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/example/public_html/includes/functions.php on line 2
Khi kết hợp với việc sử dụng hàm tệp_get_contents trong PHP một cách không chuyên nghiệp, kẻ tấn công sẽ có cơ hội để đánh cắp các tệp cấu hình.
Mã nguồn của index.php:
<?php echo file_get_contents(getcwd().$_GET['page']); ?>
Kẻ tấn công tạo ra một URL như vậy: http://example.org/index.php?page=../../../../../../../home/example/public_html/includes /config.php với kiến thức về FPD kết hợp với Truyền tải đường dẫn tương đối.
Mã nguồn bị rò rỉ của config.php:
<?php //Hidden configuration file containing database credentials. $hostname = 'localhost'; $username = 'root'; $password = 'owasp_fpd'; $database = 'example_site'; $connector = mysql_connect($hostname, $username, $password); mysql_select_db($database, $connector); ?>
Bỏ qua mẫu trên, FPD cũng có thể được sử dụng để tiết lộ hệ thống hoạt động bên dưới bằng cách quan sát các đường dẫn tệp. Ví dụ, Windows luôn bắt đầu bằng ký tự ổ đĩa, ví dụ: C: \, trong khi hệ điều hành dựa trên Unix có xu hướng bắt đầu bằng một dấu gạch chéo phía trước.
* NIX:
Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/alice/public_html/includes/functions.php on line 2
Microsoft Windows:
Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in C:\Users\bob\public_html\includes\functions.php on line 2
FPD có thể tiết lộ nhiều hơn những gì mọi người thường nghi ngờ. Hai ví dụ trên cũng tiết lộ tên người dùng trên hệ điều hành; “Alice” và “bob”. Tên người dùng tất nhiên là phần quan trọng của thông tin đăng nhập. Những kẻ tấn công có thể sử dụng chúng theo nhiều cách khác nhau, tất cả từ bruteforcing qua các giao thức khác nhau (SSH, Telnet, RDP, FTP…) đến việc khởi chạy các khai thác yêu cầu tên người dùng đang hoạt động.
Các ví dụ về tấn công Full Path Disclosure
Mảng trống
Nếu chúng tôi có một trang web sử dụng phương pháp yêu cầu một trang như thế này:
http://example.org/index.php?page=about
Ta có thể sử dụng phương pháp đóng mở ngoặc nhọn khiến trang xuất ra lỗi. Phương thức này sẽ giống như sau:
http://example.org/index.php?page[]=about
Điều này làm cho trang không còn tồn tại do đó tạo ra lỗi:
Warning: opendir(Array): failed to open dir: No such file or directory in /home/omg/htdocs/index.php on line 84 Warning: pg_num_rows(): supplied argument ... in /usr/home/example/html/pie/index.php on line 131
Cookie phiên rỗng
Một phương pháp phổ biến và rất đáng tin cậy khác để tạo ra lỗi có chứa FPD là cung cấp cho trang một phiên bị vô hiệu bằng cách sử dụng JavaScript Injjection. Một mũi tiêm đơn giản bằng phương pháp này sẽ trông giống như sau:
javascript:void(document.cookie="PHPSESSID=");
Chỉ cần đặt cookie PHPSESSID thành không (null), chúng tôi sẽ gặp lỗi.
Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/example/public_html/includes/functions.php on line 2
Lỗ hổng này được ngăn chặn đơn giản bằng cách tắt báo cáo lỗi để mã của bạn không tạo ra lỗi.
error_reporting (0);
Lỗi có thể chứa thông tin hữu ích cho chủ sở hữu trang web, vì vậy thay vì vô hiệu hóa báo cáo lỗi, có thể chỉ ẩn lỗi khỏi đầu ra của display_errors.
Cookie phiên không hợp lệ
Là một phần bổ sung cho Null Session Cookie, một phiên rất dài cũng có thể tạo ra lỗi chứa FPD. Điều này cũng có thể được thực hiện bằng cách sử dụng JavaScript chèn như sau:
javascript:void(document.cookie='PHPSESSID=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
Chỉ cần đặt cookie PHPSESSID thành 129 byte trở lên, PHP có thể đưa ra cảnh báo.
Một cách tiếp cận khác là đặt dữ liệu cookie PHPSESSID thành một trong các byte dành riêng.
javascript:void(document.cookie='PHPSESSID=.');
Cả hai biến thể đều dẫn đến kết quả như sau.
Warning: session_start(): The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/example/public_html/includes/functions.php on line 2
Cách khắc phục tương tự như đối với Null
Cookie phiên có thể được áp dụng tại đây. Lỗi có thể bị ẩn khỏi đầu ra bởi display_errors.
Truy cập trực tiếp vào các tệp yêu cầu tệp thư viện được tải trước
Các nhà phát triển ứng dụng web đôi khi không thêm được kiểm tra an toàn trong các tệp yêu cầu tệp thư viện / chức năng được tải trước. Điều này dễ làm lộ thông tin nhạy cảm có thể có khi URL của các ứng dụng đó được yêu cầu trực tiếp. Đôi khi, đó là manh mối cho lỗ hổng Bao gồm tệp cục bộ.
<br /> <b>Fatal error</b>: Class 'SpellChecker' not found in <b>/home/victim/public_html/mambo/mambots/editors/mostlyce/jscripts/tiny_mce/plugins/spellchecker/classes/PSpellShell.php</b> on line <b>9</b><br />