Bao gồm tệp cục bộ có nghĩa là truy cập trái phép vào các tệp trên hệ thống. Lỗ hổng này cho phép kẻ tấn công có quyền truy cập vào các tệp nhạy cảm trên máy chủ và nó cũng có thể dẫn đến việc chiếm được shell
Làm thế nào nó hoạt động?
Lỗ hổng bắt nguồn từ đầu vào của người dùng không được vệ sinh. LFI đặc biệt phổ biến trong các trang web php
Dưới đây là một ví dụ về mã php dễ bị LFI. Như bạn có thể thấy, chúng tôi chỉ chuyển tham số url vào hàm yêu cầu mà không cần vệ sinh. Vì vậy, người dùng chỉ cần thêm đường dẫn đến bất kỳ tệp nào
$file = $_GET['page'];
require[$file];
Trong ví dụ này, người dùng chỉ cần nhập chuỗi này và truy xuất tệp
$file = $_GET['page'];
require[$file . ".php"];
4//example.com/page=../../../../../../etc/passwd
Bỏ qua phần bổ sung. php và các phần cuối tệp bổ sung khác
Người ta thường thêm phần mở rộng tệp thông qua mã php. Đây là cách nó sẽ trông như thế nào
$file = $_GET['page'];
require[$file . ".php"];
php được thêm vào tên tệp, điều này có nghĩa là chúng tôi sẽ không thể tìm thấy các tệp mà chúng tôi đang tìm kiếm. Vì tệp
$file = $_GET['page'];
require[$file . ".php"];
5 không tồn tại. Tuy nhiên, nếu chúng tôi thêm byte rỗng vào cuối chuỗi tấn công của mình thì ________ 16 sẽ không được tính đến. Vì vậy, chúng tôi thêm $file = $_GET['page'];
require[$file . ".php"];
7 vào cuối chuỗi tấn công của chúng tôi//example.com/page=../../../../../../etc/passwd%00
Kỹ thuật này thường được gọi là kỹ thuật null byte vì
$file = $_GET['page'];
require[$file . ".php"];
7 là byte rỗng. Kỹ thuật này chỉ hoạt động trong các phiên bản bên dưới php 5. 3. Vì vậy, hãy chú ý đến điều đóMột cách khác để giải quyết vấn đề này là chỉ cần thêm một dấu chấm hỏi vào chuỗi tấn công của bạn. Bằng cách này, nội dung sau được hiểu là tham số và do đó bị loại trừ. Đây là một ví dụ
//example.com/page=../../../../../../etc/passwd?
Bỏ qua thực thi php
Vì vậy, nếu bạn có LFI, bạn có thể dễ dàng đọc các tệp
$file = $_GET['page'];
require[$file . ".php"];
9 chứ không phải tệp $file = $_GET['page'];
require[$file . ".php"];
6. Đó là bởi vì chúng được thực thi bởi máy chủ web, vì phần cuối tệp của chúng nói rằng nó chứa mã. Điều này có thể được bỏ qua bằng cách sử dụng bộ lọc php tích hợp$file = $_GET['page'];
require[$file . ".php"];
2Ở đây bạn sử dụng bộ lọc php để chuyển đổi tất cả thành base64. Vì vậy, đổi lại, bạn nhận được toàn bộ trang được mã hóa base64. Bây giờ bạn chỉ cần giải mã nó. Lưu văn bản base64 vào một tệp rồi chạy
$file = $_GET['page'];
require[$file . ".php"];
3Linux
Thủ thuật
Tải xuống tệp cấu hình ở định dạng kiểu đẹp
Nếu bạn đọc tệp trực tiếp trong trình duyệt, kiểu dáng có thể trở nên không thể chịu nổi. Thực sự khó đọc. Một cách khác là tải xuống các tệp từ thiết bị đầu cuối. Nhưng điều đó sẽ không hoạt động nếu có một thông tin đăng nhập đang chặn nó. Vì vậy, đây là một cách giải quyết tuyệt vời
$file = $_GET['page'];
require[$file . ".php"];
4tập tin nhạy cảm
Đây là bố cục mặc định của các tệp apache quan trọng.
https. //wiki. apache. org/httpd/DistrosDefaultLayout
$file = $_GET['page'];
require[$file . ".php"];
5Đến từ đây. https. //ý chính. github. com/sckalath/a8fd4e754a72015aa0b8
$file = $_GET['page'];
require[$file . ".php"];
6tập tin máy chủ web
//example.com/page=../../../../../../etc/passwd
0SSH
//example.com/page=../../../../../../etc/passwd
1Nhật ký
//example.com/page=../../../../../../etc/passwd
2Tệp cụ thể của người dùng
Tìm thấy trong thư mục nhà
//example.com/page=../../../../../../etc/passwd
3tập tin proc
"Trong Linux, /proc bao gồm một thư mục cho mỗi quy trình đang chạy, bao gồm các quy trình nhân, trong các thư mục có tên /proc/PID, trong đó PID là số quy trình. Mỗi thư mục chứa thông tin về một quá trình, bao gồm. /proc/PID/cmdline, lệnh ban đầu bắt đầu quá trình. "
https. // vi. wikipedia. org/wiki/Procfs
https. //Blog. netspi. com/directory-traversal-file-inclusion-proc-file-system/
//example.com/page=../../../../../../etc/passwd
4Bruteforcing SSH known_hosts
https. //Blog. Vỏ rễ. be/2010/11/03/bruteforcing-ssh-known_hosts-files/
LFI để vỏ
Trong những trường hợp phù hợp, bạn có thể lấy vỏ từ LFI
ngộ độc khúc gỗ
Có một số yêu cầu. Chúng tôi cần có khả năng đọc các tệp nhật ký. Trong ví dụ này, chúng ta sẽ đầu độc tệp nhật ký apache. Bạn có thể sử dụng thành công. nhật ký hoặc lỗi. đăng nhập
Vì vậy, khi bạn đã tìm thấy lỗ hổng LFI, bạn phải đưa mã php vào tệp nhật ký và sau đó thực thi nó
Chèn mã php vào tệp nhật ký
Điều này có thể được thực hiện với nc hoặc telnet
//example.com/page=../../../../../../etc/passwd
5Bạn cũng có thể thêm nó vào nhật ký lỗi bằng cách yêu cầu một trang không tồn tại
//example.com/page=../../../../../../etc/passwd
6Hoặc trong tham số người giới thiệu
//example.com/page=../../../../../../etc/passwd
7Thực hiện nó trong trình duyệt
Bây giờ bạn có thể yêu cầu tệp nhật ký thông qua LFI và xem mã php được thực thi
//example.com/page=../../../../../../etc/passwd
8tập tin proc
Nếu bạn có thể đọc các tệp proc trên hệ thống, bạn có thể đầu độc chúng thông qua tác nhân người dùng
Chúng tôi cũng có thể đưa mã vào /proc/self/environ thông qua tác nhân người dùng
https. //www. khai thác-db. com/giấy tờ/12992/
https. //www. youtube. com/watch?v=ttTVNcPnsJY
các cửa sổ
lấy dấu vân tay
//example.com/page=../../../../../../etc/passwd
9Nhật ký
Đường dẫn chung cho các tệp nhật ký apache trên windows
$file = $_GET['page'];
require[$file . ".php"];
0Vị trí phiên PHP
$file = $_GET['page'];
require[$file . ".php"];
1Truy xuất băm mật khẩu
Để truy xuất mật khẩu hệ thống đã băm, chúng tôi cần hai tệp. hệ thống và SAM. Khi bạn có hai tệp đó, bạn có thể giải nén hased bằng công cụ kali pwdump, như thế này
$file = $_GET['page'];
require[$file . ".php"];
2Có thể tìm thấy các tệp hệ thống và SAM ở các vị trí khác nhau, vì vậy hãy thử tất cả. Từ máy chủ web, đường dẫn có thể phân biệt chữ hoa chữ thường, mặc dù đó là cửa sổ. Vì vậy, hãy xem xét điều đó