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
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 phương thức
router;
require $routes;
}
}
6 sẽ được ném ra và phương thức
router;
require $routes;
}
}
7 sẽ không bao giờ được thực thi
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.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 ______6_______3. Sau đó, 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 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ố
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.
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
$ 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 thông qua các trình bao bọc
3 khả dụng nếu hỗ trợ iconv được bật và việc sử dụng chúng tương đương với việc xử lý tất cả dữ liệu luồng bằng iconv() . Các bộ lọc này không hỗ trợ các tham số, nhưng thay vào đó, mã hóa đầu vào và đầu ra sẽ được cung cấp như một phần của tên bộ lọc, tôi. e. hoặc là
Thủ thuật khai thác này lần đầu tiên được trình bày chi tiết trên một bài viết của CTF, người đã tham khảo một bài viết khác từ gynvael [GYNVAEL-BLOG POST] bằng cách sử dụng trình bao bọc PHP cho các mục đích khác vào năm 2018. Chiêu trò không mới nhưng chỉ bắt đầu bị dân chủ hóa vào khoảng cuối năm 2021
Đào sâu hơn, nó hoạt động như thế nào
Có thể chuyển đổi nhiều ký tự từ một chuỗi bằng cách sử dụng các mã hóa khác nhau thông qua
Ở ví dụ trên, chuỗi "base64" được mã hóa base64, sau đó được giải mã. Phần thú vị là khi chúng tôi thêm chuỗi "@_>" vào giá trị base64 của mình. Như bạn có thể thấy, PHP không đưa ra lỗi mà chỉ đơn giản bỏ qua chúng và hoạt động như thể chúng không tồn tại. Hành vi này là vàng ròng trong trường hợp của chúng tôi vì nó cho phép chúng tôi lọc các ký tự hợp lệ
$ echo 'YmFzZTY0' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
base64
$ php -r "echo base64_decode('YmFzZ==TY0');"
base64
$ echo 'YmFzZ==TY0' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
Warning: file_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in Command line code on line 1
$ echo 'YmFzZTY0==' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
Warning: file_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in Command line code on line 1
0 mặc định của PHP. Để giải quyết vấn đề này, cũng cần phải loại bỏ các dấu bằng. Một trong những giải pháp là sử dụng mã hóa UTF7, giúp chuyển đổi các dấu bằng thành các ký tự khác mà không làm phiền bộ lọc
Bây giờ chúng ta có thể lọc các ký tự hợp lệ từ rác, hãy thảo luận về cốt lõi của thủ thuật này. các ký tự được thêm vào từ mã hóa. Và ai đó có thể hỏi "tại sao mã hóa lại thêm ký tự?". Để trả lời câu hỏi này, chúng ta phải tìm hiểu một chút về một số RFC mã hóa ký tự, bởi vì thực sự, một số trong số chúng thực sự thêm các ký tự vào trước theo cách có chủ ý
bảng mã Unicode
Trong một số trường hợp, chữ ký được thêm vào trước bằng cách mã hóa. Trong trường hợp Unicode (UTF-16), bạn phải cung cấp cho hệ thống của mình thứ tự các byte sẽ sử dụng (Đánh dấu thứ tự byte BOM), bằng cách tìm hiểu một chút trong RFC 2781 đề cập đến nó
The Unicode Standard and ISO 10646 define the character "ZERO WIDTH
NON-BREAKING SPACE" (0xFEFF), which is also known informally as "BYTE
ORDER MARK" (abbreviated "BOM").This usage, suggested by Unicode
and ISO 10646 Annex F (informative), is to prepend a 0xFEFF character
to a stream of Unicode characters as a "signature"; a receiver of such
a serialized stream may then use the initial character both as a hint
that the stream consists of Unicode characters and as a way to recognize
the serialization order.
In serialized UTF-16 prepended with such a signature, the order is
big-endian if the first two octets are 0xFE followed by 0xFF; if they
are 0xFF followed by 0xFE, the order is little-endian. Note that
0xFFFE is not a Unicode character, precisely to preserve the
usefulness of 0xFEFF as a byte-order mark.
Đây chỉ là một ví dụ về lý do tại sao một ký tự có thể được thêm vào trước một chuỗi tùy thuộc vào mã hóa được sử dụng
Mã hóa ký tự tiếng Hàn cho tin nhắn Internet
Mã hóa ký tự tiếng Hàn cho tin nhắn Internet (ISO-2022-KR) được trình bày chi tiết trong RFC sau. [RFC-1557]
It is assumed that the starting code of the message is ASCII. ASCII
and Korean characters can be distinguished by use of the shift
function. For example, the code SO will alert us that the upcoming
bytes will be a Korean character as defined in KSC 5601. To return
to ASCII the SI code is used.
Therefore, the escape sequence, shift function and character set used
in a message are as follows:
SO KSC 5601
SI ASCII
ESC $ ) C Appears once in the beginning of a line
before any appearance of SO characters.
Về cơ bản, điều đó có nghĩa là để được coi là ISO-2022-KR, một thông báo phải bắt đầu bằng chuỗi "ESC $ ) C"
Mã hóa này là một trong các phiên bản mã ISO 2022 7 bit cùng với ISO-2022-CN, ISO-2022-CN-EXT, ISO-2022-JP, ISO-2022-JP-1, ISO-2022-JP-2. Tuy nhiên, trong danh sách mã hóa này, ISO-2022-KR là ký tự đầu tiên duy nhất có hàm
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();
}
}
}
0
Mã hóa có thể sử dụng để thêm ký tự
Bảng sau đây tóm tắt những gì đã được thảo luận về ISO/IEC 2022 và bảng mã Unicode. Những ký tự đó sẽ thêm vào trước các ký tự mà không vi phạm tính toàn vẹn của chuỗi base64, giúp chúng có thể sử dụng được trong chuỗi bộ lọc PHP
Định danh mã hóaKý tự thêm trướcISO2022KR\x1b$)CUTF16\xff\xfeUTF32\xff\xfe\x00\x00
Chuyển đổi chúng và có được những gì bạn muốn
Phần cuối cùng của chuyến đi mã hóa của chúng tôi là khá rõ ràng. Chúng tôi vừa chứng minh rằng việc thêm trước ký tự bằng cách đọc tệp là khả thi. Bây giờ sẽ không tuyệt sao khi có thể thêm các ký tự tùy ý?
Ví dụ. thêm 8 vào chuỗi của bạn
Mỗi bí danh chuyển đổi được liên kết trực tiếp với một bảng chứa các ký tự có thể in được liên kết với nó. Chúng tôi muốn nhảy từ bàn này sang bàn khác để có được một nhân vật cụ thể. Để thêm số 8 vào trước, chúng tôi sẽ yêu cầu iso8859-10 (bao gồm các ngôn ngữ Scandinavia) và bảng UNICODE
The Unicode Standard and ISO 10646 define the character "ZERO WIDTH
NON-BREAKING SPACE" (0xFEFF), which is also known informally as "BYTE
ORDER MARK" (abbreviated "BOM").This usage, suggested by Unicode
and ISO 10646 Annex F (informative), is to prepend a 0xFEFF character
to a stream of Unicode characters as a "signature"; a receiver of such
a serialized stream may then use the initial character both as a hint
that the stream consists of Unicode characters and as a way to recognize
the serialization order.
In serialized UTF-16 prepended with such a signature, the order is
big-endian if the first two octets are 0xFE followed by 0xFF; if they
are 0xFF followed by 0xFE, the order is little-endian. Note that
0xFFFE is not a Unicode character, precisely to preserve the
usefulness of 0xFEFF as a byte-order mark.
0 ở thư mục gốc của dự án Laravel
Đảm bảo cấu hình
The Unicode Standard and ISO 10646 define the character "ZERO WIDTH
NON-BREAKING SPACE" (0xFEFF), which is also known informally as "BYTE
ORDER MARK" (abbreviated "BOM").This usage, suggested by Unicode
and ISO 10646 Annex F (informative), is to prepend a 0xFEFF character
to a stream of Unicode characters as a "signature"; a receiver of such
a serialized stream may then use the initial character both as a hint
that the stream consists of Unicode characters and as a way to recognize
the serialization order.
In serialized UTF-16 prepended with such a signature, the order is
big-endian if the first two octets are 0xFE followed by 0xFF; if they
are 0xFF followed by 0xFE, the order is little-endian. Note that
0xFFFE is not a Unicode character, precisely to preserve the
usefulness of 0xFEFF as a byte-order mark.
1 được đặt thành giá trị
The Unicode Standard and ISO 10646 define the character "ZERO WIDTH
NON-BREAKING SPACE" (0xFEFF), which is also known informally as "BYTE
ORDER MARK" (abbreviated "BOM").This usage, suggested by Unicode
and ISO 10646 Annex F (informative), is to prepend a 0xFEFF character
to a stream of Unicode characters as a "signature"; a receiver of such
a serialized stream may then use the initial character both as a hint
that the stream consists of Unicode characters and as a way to recognize
the serialization order.
In serialized UTF-16 prepended with such a signature, the order is
big-endian if the first two octets are 0xFE followed by 0xFF; if they
are 0xFF followed by 0xFE, the order is little-endian. Note that
0xFFFE is not a Unicode character, precisely to preserve the
usefulness of 0xFEFF as a byte-order mark.
2, nghĩa là phiên người dùng được lưu trữ mã hóa trong cookie người dùng.
Cần lưu ý rằng điểm cuối cùng khó có thể xảy ra hiện nay , vì phiên Laravel hiện được lưu trữ trong tệp theo mặc định. Tuy nhiên về vấn đề tương thích thì nó vẫn còn, và cấu hình này vẫn dùng được trên các phiên bản Laravel mới nhất.
Một CLI khác để mã hóa/giải mã loại cookie này có tên laravel_cookie_killer đã được phát triển cho bằng chứng về khái niệm này và có sẵn trên kho lưu trữ sau. [GITHUB-SYN-LARAVEL-COOKIE-KILLER]. Một lần nữa, vui lòng sử dụng nó và yêu cầu các tính năng mới
Vì vậy, hãy tưởng tượng chúng ta vừa rò rỉ tệp
The Unicode Standard and ISO 10646 define the character "ZERO WIDTH
NON-BREAKING SPACE" (0xFEFF), which is also known informally as "BYTE
ORDER MARK" (abbreviated "BOM").This usage, suggested by Unicode
and ISO 10646 Annex F (informative), is to prepend a 0xFEFF character
to a stream of Unicode characters as a "signature"; a receiver of such
a serialized stream may then use the initial character both as a hint
that the stream consists of Unicode characters and as a way to recognize
the serialization order.
In serialized UTF-16 prepended with such a signature, the order is
big-endian if the first two octets are 0xFE followed by 0xFF; if they
are 0xFF followed by 0xFE, the order is little-endian. Note that
0xFFFE is not a Unicode character, precisely to preserve the
usefulness of 0xFEFF as a byte-order mark.
0 sau đây từ một dự án Laravel
router;
require $routes;
}
}
0
Sau đó, có thể giải mã cookie và xem liệu nó có lưu trữ dữ liệu người dùng được tuần tự hóa hay không
router;
require $routes;
}
}
1
Nếu cookie lưu trữ dữ liệu tuần tự, chúng tôi có thể tạo tiện ích của mình bằng cách sử dụng laravel_cookie_payload. tập lệnh php
router;
require $routes;
}
}
2
Cuối cùng, chúng tôi đưa tải trọng và mã hóa lại cookie
router;
require $routes;
}
}
3
Tất cả những gì phải làm sau đó là đặt cookie với cái chúng tôi vừa tạo
Tạo cookie trên Laravel
Viết lại cookie Laravel để lấy RCE
Điểm yếu chính của việc sử dụng chuỗi bộ lọc PHP là kích thước tải trọng kết quả (~ 14Ko trong trường hợp trước). Thật vậy, cấu hình Apache2 mặc định chỉ cho phép tối đa 8Ko dữ liệu trong các tiêu đề, do đó ngăn chặn việc khai thác. Tuy nhiên, NGINX dễ dãi hơn và cho phép tiêu đề 16Ko theo mặc định. Cuối cùng, chúng tôi tin rằng tải trọng được tạo vẫn có thể được tối ưu hóa, vì vậy tải trọng 14Ko sẽ trở nên nhỏ hơn trong tương lai
Một trường hợp sử dụng khác. nâng cấp tệp Kohana bao gồm chuỗi POP thành RCE
Chúng tôi đã tiến hành nghiên cứu thêm một chút để xem liệu các bộ lọc PHP có thể được sử dụng trên các chuỗi hủy xác thực phpggc hiện có hay không.
Hiện tại, chuỗi tiện ích PHP duy nhất trên phpggc được sử dụng để lấy tệp bao gồm dựa trên Kohana, đây là một khung công tác PHP đã lỗi thời được duy trì từ năm 2007 đến 2016
Vì các bộ lọc PHP cho phép chúng tôi lấy RCE từ
$ echo 'YmFzZTY0' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
base64
$ php -r "echo base64_decode('YmFzZ==TY0');"
base64
$ echo 'YmFzZ==TY0' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
Warning: file_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in Command line code on line 1
$ echo 'YmFzZTY0==' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
Warning: file_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in Command line code on line 1
9 hoặc
$ 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, nên chúng tôi đã tìm hiểu một chút về chuỗi này để giải trí, hy vọng sẽ thấy các chức năng này được sử dụng thay vì
The Unicode Standard and ISO 10646 define the character "ZERO WIDTH
NON-BREAKING SPACE" (0xFEFF), which is also known informally as "BYTE
ORDER MARK" (abbreviated "BOM").This usage, suggested by Unicode
and ISO 10646 Annex F (informative), is to prepend a 0xFEFF character
to a stream of Unicode characters as a "signature"; a receiver of such
a serialized stream may then use the initial character both as a hint
that the stream consists of Unicode characters and as a way to recognize
the serialization order.
In serialized UTF-16 prepended with such a signature, the order is
big-endian if the first two octets are 0xFE followed by 0xFF; if they
are 0xFF followed by 0xFE, the order is little-endian. Note that
0xFFFE is not a Unicode character, precisely to preserve the
usefulness of 0xFEFF as a byte-order mark.
6
Hóa ra nó đáng giá, chuỗi dựa trên
$ echo 'YmFzZTY0' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
base64
$ php -r "echo base64_decode('YmFzZ==TY0');"
base64
$ echo 'YmFzZ==TY0' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
Warning: file_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in Command line code on line 1
$ echo 'YmFzZTY0==' > test.txt
$ php -r "echo file_get_contents('php://filter/convert.base64-decode/resource=test.txt');"
Warning: file_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in Command line code on line 1
9. Bằng cách sử dụng thủ thuật mới được phát hiện của chúng tôi với chuỗi bộ lọc, có thể nâng cấp tiện ích từ bao gồm tệp tùy ý sang thực thi mã. Chuỗi trông như sau
router;
require $routes;
}
}
4
Để hiểu rõ hơn các bước tiếp theo của chuỗi là gì, sơ đồ này tóm tắt luồng mã được sử dụng để nhận RCE
Chuỗi tiện ích Kohana RCE trên phiên bản 3. 3. 6
Trong khi nâng cấp chuỗi này, chúng tôi đã thấy nhận xét liên quan này. Hóa ra chủ sở hữu của kho lưu trữ @cfreal_ đã đề xuất tạo một loại "bao gồm" cho các chuỗi tiện ích vì bạn có thể thực thi mã từ nó nếu tất cả các điều kiện bắt buộc được đáp ứng [PHPGGC-COMMENT]
Nhận xét đề cập đến chuỗi tiện ích "bao gồm" trên phpggc
Từ những gì chúng tôi đã thấy trên bài đăng trên blog này, các bộ lọc PHP phải đủ hiệu quả để tiếp cận RCE từ bao gồm/yêu cầu trong hầu hết các trường hợp
Ý kiến cuối cùng về khai thác bộ lọc PHP
Như chúng ta có thể thấy trong bài viết này, các bộ lọc PHP có thể thực sự mạnh mẽ nếu được sử dụng đúng ngữ cảnh. Cách khai thác của họ rất hấp dẫn vì nó dựa trên một vài thủ thuật PHP không phổ biến
Tuy nhiên, điều quan trọng cần lưu ý là loại tải trọng này thực sự rất lớn và sẽ không thể sử dụng được 100% thời gian. Giới hạn kích thước của tiêu đề hoặc trong URL có thể gặp sự cố nếu trọng tải quá lớn
Nghiên cứu này hoàn toàn bắt đầu vì nghiên cứu về chuỗi POP. Làm như vậy để khai thác unserialization là một cách tuyệt vời để hiểu có bao nhiêu thủ thuật PHP hoạt động. Chúng tôi nghĩ rằng đó là một cách hoàn hảo để tăng tốc nhanh chóng trong phân tích mã, do đó chúng tôi khuyến khích mọi người hãy thử với nó
Nâng cấp nguyên thủy bao gồm tệp thành thực thi mã từ xa bằng thủ thuật bộ lọc PHP đã được thử nghiệm thành công trên các phiên bản PHP 8. 1. 11, 7. 4. 30 và 5. 6. 40
Làm cách nào để tạo bộ lọc trong PHP?
Hàm PHP filter_var()
. Phải mất hai phần dữ liệu. Biến bạn muốn kiểm tra. Loại séc sử dụng.
Làm cách nào để lọc dữ liệu trong HTML?
Cách sử dụng. .
Tải xuống và đặt tệp JavaScript jquery-data-filter. tối thiểu. js sau jQuery. .
Phân loại dữ liệu của bạn bằng các thuộc tính dữ liệu như sau. < div id="language-list" > < p class="filter-me" data-html="HTML5" >.
Lọc danh sách theo tên dữ liệu. // ko có kết quả. .
Lọc danh sách theo giá trị dữ liệu
Làm cách nào để lọc đầu vào 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? .