Hướng dẫn phpggc - phpggc
PHPGGC là một thư viện tải trọng unserialize () cùng với một công cụ để tạo chúng, từ dòng lệnh hoặc lập trình. Khi gặp phải sự không rõ ràng trên một trang web, bạn không có mã hoặc đơn giản là khi cố gắng xây dựng một khai thác, công cụ này cho phép bạn tạo tải trọng mà không phải thực hiện các bước tẻ nhạt để tìm các tiện ích và kết hợp chúng. Nó có thể được coi là tương đương với Ysoserial của Frohoff, nhưng đối với PHP. Hiện tại, công cụ này hỗ trợ các chuỗi tiện ích như: codeigniter4, discatrine, drupal7, guzzle, laravel, magento, monolog, phalcon, podio, slim, swiftmailer, symfony, wordpress, yii và zendframework. PHP> = 5.6 là bắt buộc để chạy PHPGGC. Chạy
Chuỗi bộ lọc chuỗi:
Mỗi chuỗi tiện ích đều có:
Sử dụng 7 để có được thông tin chi tiết về một chuỗi:
Khi bạn đã chọn một chuỗi, hãy chạy 8 để có được tải trọng. Chẳng hạn, để có được tải trọng cho Monolog, bạn sẽ làm:
Đối với một tệp viết bằng swiftmailer, bạn sẽ làm:
Vỏ bánhTùy chọn 9 ( 0) cho phép bạn xác định tệp PHP chứa các chức năng sau:
Chẳng hạn, nếu mã dễ bị tổn thương trông như thế này:
$data = unserialize($_GET['data']);
print $data['message']; Bạn có thể sử dụng chuỗi 5, bao bọc nó như vậy:
# /tmp/my_wrapper.php
function process_object($object)
{
return array(
'message' => $object
);
} Và bạn sẽ gọi PHPGGC như vậy:
PHAR(GGC)Lịch sửTại Blackhat US 2018, @S_N_T đã phát hành Pharggc, một ngã ba PHPGGC thay vì xây dựng một tải trọng tuần tự hóa, xây dựng toàn bộ tệp Phar. Tệp Phar này chứa dữ liệu tuần tự hóa và như vậy có thể được sử dụng cho các kỹ thuật khai thác khác nhau ( 8, 9, v.v.). Bài báo ở đây.Thực hiệnLưu trữ Phar có ba định dạng khác nhau: Phar, Tar và Zip. Ba người họ được hỗ trợ bởi PHPGGC. Các tệp polyglot có thể được tạo bằng 0 ( 1). Các tùy chọn khác có sẵn (sử dụng 2).PHAR, TAR, and ZIP. The three of them are supported by PHPGGC. Polyglot files can be generated using 0
( 1). Other options are available (use 2).Ví dụ
Bộ mã hóaĐối số cho phép sửa đổi cách đầu ra tải trọng. Chẳng hạn, 3 sẽ mã hóa URL và 4 sẽ chuyển đổi nó thành base64. Tải trọng thường chứa các byte null và không thể được sao chép/dán is-is. Sử dụng 5 cho một mã hóa URL mềm, giúp tải trọng có thể đọc được.Payloads often contain NULL bytes and cannot be copy/pasted as-is. Use 5 for a soft URL encode, which keeps the payload readable.Các bộ mã hóa có thể được xích, và như vậy thứ tự là quan trọng. Chẳng hạn, 6 sẽ dựa trên tải trọng, sau đó urlencode nó hai lần.the order is
important. For instance, 6 will base64 the payload, then URLencode it twice.Nâng cao: Cải tiếnPhá hủy nhanhPHPGGC thực hiện cờ 7 ( 8), sẽ đảm bảo đối tượng tuần tự hóa của bạn sẽ bị phá hủy ngay sau cuộc gọi 9 và không ở cuối tập lệnh. Tôi khuyên bạn nên sử dụng nó cho mỗi vectơ 0, vì nó cải thiện độ tin cậy. Chẳng hạn, nếu tập lệnh PHP tăng một ngoại lệ sau cuộc gọi, phương thức 0 của đối tượng của bạn có thể không được gọi. Vì nó được xử lý cùng lúc với bộ mã hóa, nó cần được đặt đầu tiên.I'd recommend using it for every 0 vector, as it improves reliability. For instance, if PHP script raises an exception
after the call, the 0 method of your object might not be called. As it is processed at the same time as encoders, it needs to be set first.
Chuỗi ASCIISử dụng định dạng tuần tự hóa 2 thay vì tiêu chuẩn 3. Điều này thay thế cho mọi char không ASCII thành một đại diện thập lục phân: 4-> 5 Điều này có thể hữu ích khi một số lý do không được phép ký tự không ASCII (ví dụ: null byte). Vì tải trọng thường chứa chúng, điều này đảm bảo rằng tải trọng chỉ bao gồm các giá trị ASCII. Lưu ý: Đây là thử nghiệm và nó có thể không hoạt động trong một số trường hợp.Dây áo giápSử dụng định dạng tuần tự hóa 2 thay vì tiêu chuẩn 3. Điều này thay thế cho mọi char thành một đại diện thập lục phân: 4 -> 9 Điều này có ích khi tường lửa hoặc mã PHP chặn chuỗi. Lưu ý: Đây là thử nghiệm và nó có thể không hoạt động trong một số trường hợp. Lưu ý: Điều này làm cho mỗi chuỗi trong tải trọng phát triển theo hệ số 3.Cộng với sốĐôi khi, các tập lệnh PHP xác minh rằng tải trọng được nối tiếp đã cho không chứa các đối tượng bằng cách sử dụng regex như
$data = unserialize($_GET['data']);
print $data['message']; 0. Điều này dễ dàng được bỏ qua bằng cách sử dụng
$data = unserialize($_GET['data']);
print $data['message']; 1 thay vì
$data = unserialize($_GET['data']);
print $data['message']; 2. Người ta có thể sử dụng
$data = unserialize($_GET['data']);
print $data['message']; 3 hoặc
$data = unserialize($_GET['data']);
print $data['message']; 4, để tự động thêm các dấu hiệu
$data = unserialize($_GET['data']);
print $data['message']; 5 này trước các ký hiệu. Chẳng hạn, để che giấu các đối tượng và chuỗi, người ta có thể sử dụng:
$data = unserialize($_GET['data']);
print $data['message']; 6. Xin lưu ý rằng vì các loại Php 7.2, chỉ các loại
$data = unserialize($_GET['data']);
print $data['message']; 7 và
$data = unserialize($_GET['data']);
print $data['message']; 8 (phao) có thể có
$data = unserialize($_GET['data']);
print $data['message']; 5.Kiểm tra chuỗi của bạnĐể kiểm tra xem chuỗi tiện ích bạn muốn sử dụng các công trình trong môi trường được nhắm mục tiêu, hãy nhảy vào thư mục môi trường của bạn và chạy không có đối số chuỗi, với tùy chọn
# /tmp/my_wrapper.php
function process_object($object)
{
return array(
'message' => $object
);
} 0.Chẳng hạn, để kiểm tra xem
# /tmp/my_wrapper.php
function process_object($object)
{
return array(
'message' => $object
);
} 1 có hoạt động trên Symfony
# /tmp/my_wrapper.php
function process_object($object)
{
return array(
'message' => $object
);
} 2: 0Mã thoát sẽ là
# /tmp/my_wrapper.php
function process_object($object)
{
return array(
'message' => $object
);
} 3 nếu tải trọng được kích hoạt,
# /tmp/my_wrapper.php
function process_object($object)
{
return array(
'message' => $object
);
} 4 nếu không.Kiểm tra chuỗi của bạn với mọi phiên bản của một góiNếu bạn muốn biết phiên bản nào của gói một chuỗi tiện ích hoạt động chống lại, bạn có thể sử dụng
# /tmp/my_wrapper.php
function process_object($object)
{
return array(
'message' => $object
);
} 5. 1APIThay vì sử dụng PHPGGC làm công cụ dòng lệnh, bạn có thể lập trình tập lệnh PHP: 2Điều này cho phép bạn điều chỉnh các tham số hoặc viết khai thác dễ dàng hơn. Lưu ý: Đây là thử nghiệm khá tốt vào lúc này, vì vậy xin vui lòng, báo cáo lỗi. Đóng gópYêu cầu kéo được nhiều hơn chào mừng. Vui lòng làm theo các hướng dẫn đơn giản này:
CodeWise, cấu trúc thư mục khá đơn giản: các tiện ích trong các tiện ích.php, Mô tả + logic trong chuỗi.php. Bạn có thể xác định các phương thức xử lý trước và sau, nếu các tham số cần được sửa đổi. Hy vọng rằng, các tiện ích đã được triển khai là đủ để bạn xây dựng của bạn. Nếu không, tôi rất vui khi trả lời câu hỏi của bạn. Tùy chọn dòng lệnh 0 có thể được sử dụng để tạo thư mục và cấu trúc tệp cho chuỗi tiện ích mới. Chẳng hạn, sử dụng 1 sẽ tạo ra một thiết bị drupal rce mới.DockerNếu bạn không muốn cài đặt PHP, bạn có thể sử dụng 2.Giấy phépGiấy phép Apache 2.0 |