Việc sử dụng các bộ lọc PHP là gì?

Tìm kiếm các chuỗi tiện ích mới để khai thác các lỗ hổng khử lưu huỳnh có thể rất tẻ nhạt. Trong bài viết này, chúng tôi sẽ giải thích cách kết hợp một kỹ thuật mới được phát hiện gần đây có tên là bộ lọc PHP [LOKNOP-GIST], để chuyển đổi các nguyên hàm bao gồm tệp trong các ứng dụng PHP sang thực thi mã từ xa. Để hỗ trợ giải thích của chúng tôi, chúng tôi sẽ dựa vào chuỗi tiện ích bao gồm tệp Laravel đã được phát hiện trong quá trình nghiên cứu này

Nó bắt đầu như thế nào

Nghiên cứu về chuỗi POP

Tất cả bắt đầu từ nghiên cứu về chuỗi tiện ích để cải thiện kỹ năng phân tích mã trên PHP. Lần đầu tiên chúng tôi bắt đầu với một trong những khuôn khổ yêu thích của tôi. giao hưởng. Thật không may, nhiệm vụ khó hơn dự kiến ​​vì hầu hết các đối tượng có khả năng thú vị đều được bảo vệ bởi cơ chế sau

Vì phương thức

router;

        require $routes;
    }
}
5 được gọi tự động khi hủy đánh số, nên một
router;

        require $routes;
    }
}
6 sẽ bị ném ra và phương thức
router;

        require $routes;
    }
}
7 sẽ không bao giờ được thực thi

Việc sử dụng các bộ lọc PHP là gì?

Sau một thời gian không tìm thấy gì theo đúng nghĩa đen, chúng tôi đã cố gắng xem xét một khung công tác PHP phổ biến khác. ấu trùng

Tệp bao gồm chuỗi trên khung Laravel

Các nghiên cứu hiển thị kết quả nhanh hơn rất nhiều trên Laravel. Một chuỗi POP bao gồm tệp đang hoạt động đã được tìm thấy sau vài giờ trên

router;

        require $routes;
    }
}
8 v9. 34. 0 gói. Mặc dù Các nhà phát triển của Laravel đã được liên hệ về vấn đề này, nhưng theo họ, họ không có ý định khắc phục chuỗi tiện ích .
router;

        require $routes;
    }
}
9 on untrusted user inputs.

Việc sử dụng các bộ lọc PHP là gì?
Tệp bao gồm chuỗi tiện ích trên laravel/framework 9. 34. 0

PHP unserialization sẽ không được đề cập ở đây vì đã có một số tài nguyên tốt về chủ đề này, chẳng hạn như tài nguyên này. [OWASP-Chuỗi POP]

Chuỗi chúng tôi tìm thấy hoạt động như sau

  • trong 
    $ iconv -l
    The following list contains all the coded character sets known.  This does
    not necessarily mean that all combinations of these names can be used for
    the FROM and TO command line parameters.  One coded character set can be
    listed with several different names (aliases).
    
      437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
    0
name = $name;
        $this->options = $options;
        $this->registrar = $registrar;
        $this->controller = $controller;
[...]

    public function register()
    {
        $this->registered = true;

        return $this->registrar->register(
            $this->name, $this->controller, $this->options
        );
    }
[...]
    public function __destruct()
    {
        if (! $this->registered) {
            $this->register();
        }
    }
}

Khi hàm

$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
1 được gọi, nếu giá trị
$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
2 không được xác định, thì luồng thực thi trước tiên sẽ chuyển đến hàm
$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
4 của đối tượng
$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
3. Cái sau gọi hàm
$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
4 của một đối tượng khác có thể được xác định tùy ý

Tất cả những gì cần làm từ thời điểm này là tìm một đối tượng khác xác định hàm

$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
4 trong các gói Laravel. Bởi vì PHP là ngôn ngữ gõ yếu, chúng ta có thể đặt giá trị của thuộc tính đăng ký cho bất kỳ đối tượng nào khác

Ngoài ra, nếu một phương thức được gọi với nhiều tham số hơn nguyên mẫu của nó, các tham số bổ sung sẽ bị bỏ qua. Điều này có nghĩa là chúng ta có thể gọi bất kỳ phương thức đăng ký nào từ bất kỳ đối tượng Laravel nào với 0 đến 3 tham số

  • trong
    $ iconv -l
    The following list contains all the coded character sets known.  This does
    not necessarily mean that all combinations of these names can be used for
    the FROM and TO command line parameters.  One coded character set can be
    listed with several different names (aliases).
    
      437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
    7
router;

        require $routes;
    }
}

Lớp

$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
8 có một phương thức đăng ký với một đối số và, đóng băng trên chiếc bánh, có một hàm
$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]
9 cho phép trong đó chúng ta hoàn toàn kiểm soát tham số
router;

        require $routes;
    }
}
80

Kể từ thời điểm này, chúng tôi đã đưa tệp cục bộ vào phiên bản Laravel mới nhất. Tuy nhiên, điều này là không đủ so với nhiều cách hiện có để thực thi mã thông qua hủy tuần tự hóa trên Laravel như hiển thị danh sách chuỗi cửa sổ bật lên có sẵn của phpggc.

Việc sử dụng các bộ lọc PHP là gì?
Danh sách chuỗi cửa hàng pop của Laravel trên phpggc

Sau khi tìm hiểu một thời gian để thử và chuyển đổi tệp nguyên thủy bao gồm tệp này thành thực thi mã từ xa, chúng tôi đã được một đồng nghiệp (@LoadLow) khuyên nên xem xét chuỗi bộ lọc PHP. Bạn có thể tìm thấy một bài viết khá hay của loknop về chủ đề này tại đây. [LOKNOP-GIST]. Việc khai thác được mô tả trong bài viết không linh hoạt vì nó bỏ sót nhiều tải trọng có thể xảy ra, nhưng từ thời điểm này, chúng tôi muốn tìm cách điều chỉnh nó cho phù hợp với tình huống của mình

Bộ lọc PHP để giải cứu

Trên khắp thế giới, có gần 7000 ngôn ngữ được nói. Để cho phép hầu hết mọi người trên Trái đất được hưởng lợi từ internet và giao tiếp với nhau, nhiều ký tự in được phải được kích hoạt. Tất cả chúng ta đều biết bảng mã hóa ASCII cơ bản của mình, nhưng nó quá nhỏ để nói bằng tiếng Nhật hoặc thậm chí bằng tiếng Hy Lạp có chứa các ký tự như ' λ ' . Do đó, để có thể in các ký tự từ các ngôn ngữ khác, hoặc thậm chí là biểu tượng cảm xúc, ☺, nhiều bảng mã hóa đã được tạo để chuyển đổi hoặc thậm chí chuyển các ký tự từ ngôn ngữ này sang ngôn ngữ khác khi có thể. ν', 'π'. Thus, to be able to print characters from other languages, or even emojis, ☺, many encoding tables were created to convert or even translit characters from one language to another when possible.

Tất cả những ví dụ này chỉ được liên kết với các ngôn ngữ được nói bởi con người. Nhiều RFC được thiết kế cho các giao thức khác để làm cho các ký tự có thể hiểu được trên các hệ thống cũ hơn

Trên Linux, bạn có thể liệt kê các bí danh của bảng chuyển đổi thông qua lệnh

router;

        require $routes;
    }
}
81

$ iconv -l
The following list contains all the coded character sets known.  This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters.  One coded character set can be
listed with several different names (aliases).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857[...]

Các bảng chuyển đổi này cũng có thể truy cập được thông qua các trình bao bọc

router;

        require $routes;
    }
}
82. [PHP-DOC-WRAPPER-CONVERT-ICONV] https. //www. php. net/thủ công/vi/bộ lọc. đổi. php#bộ lọc. đổi. iconv

Các loại bộ lọc trong PHP là gì?

Giới thiệu ¶ . xác thực và làm sạch .

Làm cách nào để lọc đầu vào của người dùng trong PHP?

Hàm PHP filter_input() . g. từ đầu vào biểu mẫu) và tùy chọn lọc nó. Hàm này được sử dụng để xác thực các biến từ các nguồn không an toàn, chẳng hạn như đầu vào của người dùng.

Làm cách nào để lọc chuỗi trong PHP?

Làm cách nào để lọc hoặc làm sạch các số từ chuỗi trong PHP? .
Phương pháp 1. Sử dụng hàm filter_var()
Phương pháp 2. Sử dụng hàm preg_replace()
Phương pháp 3. Sử dụng chức năng preg_match_all()