Hãy tưởng tượng một ứng dụng PHP đồ chơi dễ bị tấn công tuyệt đối với tệp nội bộ, ví dụ:Tại sao bao gồm ('php: // input') không hoạt động?
<?php include($_GET['action']);
Tôi đã thử các yêu cầu sau đây để khai thác nó:
POST /?action=php://input HTTP/1.1
Host: XXXXXXXXXXXXXXXXX
Content-Length: 3
foo
này có hiệu quả thực thi include('php://input');
với yêu cầu cơ thể foo
, vì vậy tôi mong chờ nó để in foo
. Tuy nhiên, tôi nhận được lỗi sau đây
<br />
<b>Warning</b>: include(php://input): failed to open stream: operation failed in <b>XXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
<br />
<b>Warning</b>: include(): Failed opening 'php://input' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in <b>XXXXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
Sự cố ở đây là gì? Đây có phải là tính năng bảo mật của PHP không? Nếu có, ai đó có thể chỉ ra phần trách nhiệm của mã nguồn PHP để giảm thiểu điều này?
gì về suối tùy chỉnh? Sử dụng 'stream_wrapper_register' và tất cả nhạc jazz đó? – Halcyon
Kiểm tra giá trị của tùy chọn này trong cấu hình của bạn http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek
@Halcyon Tôi đang nghe. Không có cách nào tôi đã tìm thấy điều này có thể khai thác trên một thiết lập LAMP hiện đại ngoại trừ nếu bạn có một tập tin nguyên thủy-ghi (chẳng hạn như 'session_start()' hoặc đăng nhập cụ thể ứng dụng vv) –