نمایش نتایج: از شماره 1 تا 2 , از مجموع 2

موضوع: بررسی باگ [Content Injection] در وردپرس 4.7.0 / 4.7.1

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    عضو دائم T.Toosi آواتار ها
    تاریخ عضویت
    Jun 2015
    نوشته ها
    1,071
    تشکر تشکر کرده 
    278
    تشکر تشکر شده 
    2,936
    تشکر شده در
    1,329 پست

    110 بررسی باگ [Content Injection] در وردپرس 4.7.0 / 4.7.1

    باسلام، همانطور که اطلاع دارید هفته گذشته وردپرس بدون اطلاع رسانی در آپدیت جدید خود یک آسیب پذیری DREAD Score 9 را برطرف کرد، این باگ مربوط به قسمت REST API Endpoint در نسخه 4.7.0/1 هست که قادر خواهید بود محتوا پست ها و پیج ها را ادیت یا محتوا تزریق کنید، باهم بررسی میکنیم این اتفاق چگونه رخ میده.

    مشکل از جایی شروع میشود که در فایل زیر مسیر دهی ای برای request ها تعریف شده است که مقدار پارامتر پست آیدی را از کاربر دریافت کند :

    کد:
    ./wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
    مقدار پست آیدی به 2 صورت زیر قایل دریافت است :

    کد:
    /wp-json/wp/v2/posts/1452?id=1452
    کد:
    /wp-json/wp/v2/posts/1452
    در حالت اول هکر به صورت زیر پارامتر پست آیدی را مقدار دهی میکند :

    کد:
    wp-json/wp/v2/posts/1452?id=14521َََََAA
    سپس برای بررسی که کاربر اجازه دارد پست را آپدیت یا ادیت و .. بکند تابع update_item_permissions_check از کلاس WP_REST_Posts_Controller فراخوانی و اجرا خواهد شد :

    کد PHP:
    public function update_item_permissions_check$request ) {
        
            
    $post $this->get_post$request['id'] );
            
    $post_type get_post_type_object$this->post_type );

            if ( 
    $post && ! $this->check_update_permission$post ) ) {
                return new 
    WP_Error'rest_cannot_edit'__'Sorry, you are not allowed to edit this post.' ), array( 'status' => rest_authorization_required_code() ) );
            }

            if ( ! empty( 
    $request['author'] ) && get_current_user_id() !== $request['author'] && ! current_user_can$post_type->cap->edit_others_posts ) ) {
                return new 
    WP_Error'rest_cannot_edit_others'__'Sorry, you are not allowed to update posts as this user.' ), array( 'status' => rest_authorization_required_code() ) );
            }

            if ( ! empty( 
    $request['sticky'] ) && ! current_user_can$post_type->cap->edit_others_posts ) ) {
                return new 
    WP_Error'rest_cannot_assign_sticky'__'Sorry, you are not allowed to make posts sticky.' ), array( 'status' => rest_authorization_required_code() ) );
            }

            if ( ! 
    $this->check_assign_terms_permission$request ) ) {
                return new 
    WP_Error'rest_cannot_assign_term'__'Sorry, you are not allowed to assign the provided terms.' ), array( 'status' => rest_authorization_required_code() ) );
            }

            return 
    true;
        } 
    کافیست ما شرط اول را bypass کنیم، در شرط اول مقدار پست آیدی فرستاده شده بررسی میشود تا همچین پستی وجود داشته باشد سپس در مرجله دوم دسترسی کاربر بررسی میشود، کافیست پست آیدی ما وجود نداشته باشد تا به مرحله دوم شرط نرسیم :

    کد PHP:
    if ( $post && ! $this->check_update_permission$post ) ) 
    زمانی که هکر مقدار پست آیدی : 1452AA را ارسال میکند (get_post مقدار false را برگشت میدهد) این شرط در مرحله اول false برگشت میخورد و به مرحله تایید هویت کاربر (check_update_permission در کلاس) نخواهیم رسید، سپس تابع update_item_permissions_check که برای بررسی دسترسی کاربر اجرا شده بود با مقدار true برگشت خواهد خورد، به همین سادگی تایید دسترسی byepass خواهد شد!

    شاید حالا براتون سوال بشه پست آیدی 1452AA که وجود ندارد چه پستی را قرار هست آپدیت یا ادیت کنیم ؟! مقدار (1452) یک پست آیدی معتبر که در دیتابیس وجود دارد است سپس چند کارکتر به آن اضافه کردیم برای byepass کردن مرحله تایید دسترسی. حالا که دسترسی داریم تابع update_item اجرا خواهد شد در 2 خط اول این تابع مشاهده خواهید کرد :

    کد PHP:
    public function update_item$request ) {

            
    $id = (int) $request['id'];
            
    $post get_post$id ); 
    در خط اول مقدار پست آیدی ما که (14521َََََAA) بود به (14521) تبدیل خواهد شد، چرا ؟ به دلیل اینکه تایپ int برای پست آیدی مشخص شده است و تمامی کارکتر ها به جز numberic ها از رشته حذف خواهد شد و به این صورت پست ما با آیدی 14521 آپدیت خواهد شد.
    ویرایش توسط T.Toosi : February 8th, 2017 در ساعت 21:46

  2. تعداد تشکر ها ازT.Toosi به دلیل پست مفید


  3. #2
    کاربر اخراج شده
    تاریخ عضویت
    Nov 2015
    محل سکونت
    CA
    نوشته ها
    382
    تشکر تشکر کرده 
    311
    تشکر تشکر شده 
    692
    تشکر شده در
    292 پست

    پیش فرض پاسخ : بررسی باگ [Content Injection] در وردپرس 4.7.0 / 4.7.1

    تشکر عزیز از پست مفیدتون

  4. تعداد تشکر ها از kiava به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. مشکل sql injection
    توسط rezah در انجمن PHP-MySQL
    پاسخ ها: 2
    آخرين نوشته: November 19th, 2017, 13:50
  2. کسی از سیستم IP.Content استفاده کرده؟
    توسط سیدرضا بازیار در انجمن مباحث دیگر
    پاسخ ها: 0
    آخرين نوشته: April 27th, 2015, 19:10
  3. جلوگیری از حملات Sql injection
    توسط yastheme در انجمن PHP-MySQL
    پاسخ ها: 1
    آخرين نوشته: November 10th, 2013, 11:42
  4. مشکل در ورود به سی پنل و وب میل ر Content Encoding Error
    توسط net_Vahid در انجمن سی پنل CPanel
    پاسخ ها: 12
    آخرين نوشته: September 5th, 2013, 09:27

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •