歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

WordPress插件Form Maker SQL注入漏洞分析

來源:本站整理 作者:佚名 時間:2019-06-13 TAG: 我要投稿

最近WordPress的插件出現各種姿勢漏洞(都是插件,不知何時能有核心漏洞出現),Easy WP SMTP、 Social Warfare、Form Maker等等,其中Form Maker1.13.3之前版本存在sql注入漏洞(CVE-2019-10866)。最近一直在看cms的漏洞代碼,于是順手在網上找了該插件的影響版本與修補后的版本進行了代碼分析,并且在本地對該漏洞進行了分析復現和POC代碼編寫調試。下面是分析和復現的過程:
本地環境:Wordpress5.1 + Form Maker1.13.3
在本地搭建WordPress5.1版本,然后上網找一下FormMaker的歷史版本。安裝的時候選擇上傳安裝,有可能會有上傳大小限制,需要改一下php.ini中的配置信息。安裝完成后記得要把自動更新關掉,要把自動更新關掉,要把自動更新關掉,重要的事情說三遍。然后就可以專心的進行代碼審計和漏洞復現了。
漏洞位置:\wp-content\plugins\form-maker\admin\models\Submissions_fm.php
在cve的信息中作者提到在該路徑下的php文件存在問題,直接定位文件進行審計。
    ...
    $order_by = WDW_FM_Library(self::PLUGIN)->get('order_by', 'group_id');
    $asc_or_desc = WDW_FM_Library(self::PLUGIN)->get('asc_or_desc', 'desc');
    ...
    if ( $order_by == 'group_id' or $order_by == 'date' or $order_by == 'ip' ) {
      $orderby = ' ORDER BY ' . $order_by . ' ' . $asc_or_desc . '';
    }
    else if ( $order_by == 'display_name' or $order_by == 'user_email' ) {
      $orderby = ' ORDER BY (SELECT ' . $order_by . ' FROM ' . $wpdb->prefix . 'users WHERE ID=user_id_wd) ' . $asc_or_desc . '';
    }
    else {
      $orderby = "";
    }
在上述代碼中存在問題的位置:
$asc_or_desc = WDW_FM_Library(self::PLUGIN)->get('asc_or_desc', 'desc');
    ...
    if ( $order_by == 'group_id' or $order_by == 'date' or $order_by == 'ip' ) {
      $orderby = ' ORDER BY ' . $order_by . ' ' . $asc_or_desc . '';
    ...
代碼中對所有的參數都有判斷檢測,唯獨對$asc_or_desc參數什么都沒做,把傳進來的參數直接和查詢語句拼接在了一起(危險警告)。再看一下其他位置有沒有類似的危險操作,或者上下文調用中是否對這個參數有檢測(拼接前都沒有估計其他位置也不能有了)?
對整個插件工程全文搜索$asc_or_desc,繼續尋找。
漏洞位置:\wp-content\plugins\form-maker\admin\controllers\Submissions_fm.php
    ...
    $group_ids = ((isset($labels_parameters[6])) ? $labels_parameters[6] : NULL);
             $params['group_id_s'] = $this->model->sort_group_ids(count($params['sorted_label_names']), $group_ids);
             $params['where_choices'] = $labels_parameters[7];
             $params['searched_ids'] = $labels_parameters[8] ? implode(',', $labels_parameters[8]) : '';
             $params['groupids'] = $labels_parameters[8] ? array_reverse($labels_parameters[8]) : array();
             $params['order_by']    = $order_by = WDW_FM_Library(self::PLUGIN)->get('order_by', 'group_id');
             $params['asc_or_desc'] = $asc_or_desc  = WDW_FM_Library(self::PLUGIN)->get('asc_or_desc', 'desc');
    ...
    if ( !empty($_POST['order_by']) || !empty($_POST['asc_or_desc']) ) {
        $is_sort = true;
        $order_by = $_POST['order_by'];
        $asc_or_desc = $_POST['asc_or_desc'];
    ...
    Foreach ( $lists as $list_key => $list_val ) {
    If ( !Empty($_GET[$list_key]) ) {
        $lists[$list_key] = urlencode(WDW_FM_Library(self::PLUGIN)->get($list_key));
        $pagination_url_args[$list_key] = WDW_FM_Library(self::PLUGIN)->get($list_key);
        $pagination_url_args[‘is_search’] = 1;
        }
    }
    $pagination_url = array_merge(rray(‘page’ => $this->page, ‘task’ => ‘display’, ‘current_id’ => $id, ‘order_by’ => $order_by, ‘asc_or_desc’ =>                                     $asc_or_desc),pagination_url_args);

[1] [2] [3]  下一頁

【聲明】:黑吧安全網(http://www.pcpbjo.tw)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected]om,我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        云南快乐十分前三电视