Rumah > Operasi dan penyelenggaraan > Keselamatan > Bagaimana untuk menyelesaikan kelemahan pemadaman fail sewenang-wenangnya dalam pemalam WordPress WooCommerce

Bagaimana untuk menyelesaikan kelemahan pemadaman fail sewenang-wenangnya dalam pemalam WordPress WooCommerce

WBOY
Lepaskan: 2023-05-13 18:16:06
ke hadapan
1650 orang telah melayarinya

Butiran teknikal

Mekanisme pemprosesan kebenaran WordPress dilaksanakan terutamanya dengan menyediakan fungsi yang berbeza kepada peranan yang berbeza Apabila peranan pentadbir kedai ditakrifkan, ia akan menetapkan fungsi edit_users kepada peranan ini, supaya Mereka boleh terus menguruskan akaun pelanggan kedai. Keseluruhan proses penetapan kebenaran berlaku semasa proses pemasangan pemalam. woocommerce/includes/class-wc-install.php:

//Shop manager role.add_role(       'shop_manager',      // Internal name of the new role       'Shop manager',      // The label for displaying       array(               // Capabilities                ⋮              'read_private_posts'     => true,              'edit_users'             => true,              'edit_posts'             => true,                ⋮       ));
Salin selepas log masuk

Maklumat kebenaran peranan akan disimpan dalam pangkalan data sebagai tetapan teras WordPress, yang bermaksud bahawa peranan pengguna kini bebas daripada pemalam, walaupun jika pemalam tidak didayakan dan tidak akan menjejaskan kebenaran peranan yang berkaitan.

Apabila pengguna yang disahkan cuba mengubah suai maklumat pengguna lain, fungsi current_user_can() dipanggil dan kemudian memastikan bahawa hanya pengguna istimewa boleh melakukan operasi ini. Contoh panggilan fungsi Current_user_can():

$target_user_id= $_GET['target_user_id'];if(current_user_can('edit_user',$target_user_id)) {    edit_user($target_user_id);}
Salin selepas log masuk

Logik pengesahan panggilan adalah seperti berikut: Pengguna ini ingin menggunakan ID $target_user_id untuk mengubah suai pengguna tertentu Adakah dia mempunyai kebenaran untuk melaksanakan?

Di bawah konfigurasi lalai, fungsi edit_users membenarkan pengguna dengan kebenaran (seperti pentadbir kedai) untuk mengedit pengguna lain, malah pengguna pentadbir, dan kemudian melakukan operasi seperti kemas kini kata laluan. Atas sebab keselamatan, WooCommerce perlu menentukan sama ada pentadbir kedai boleh mengedit pengguna, jadi pemalam perlu menambah kebenaran meta. Fungsi meta boleh dipanggil oleh current_user_can(). Nilai yang dikembalikan oleh fungsi di bawah tingkah laku lalai adalah benar, tetapi nilai yang dikembalikan oleh fungsi kebenaran meta boleh menentukan sama ada pengguna semasa boleh melakukan operasi sedemikian. Berikut ialah kod fungsi abstrak penapis kebenaran meta WooCommerce:

function disallow_editing_of_admins( $capability, $target_user_id ) {       // If the user is an admin return false anddisallow the action    if($capability == "edit_user"&& user_is_admin($target_user_id)) {        return false;    } else {        return true;    }}add_filter('map_meta_cap', 'disallow_editing_of_admins');
Salin selepas log masuk

Sebagai contoh, apabila current_user_can('edit_user', 1) dipanggil, penapis akan menentukan bahawa ID ialah 1 ($target_user_id) Sama ada pengguna ialah pentadbir, dan berdasarkan keputusan, tentukan sama ada untuk membenarkan pengguna beroperasi.

Pentadbir kedai melumpuhkan pemalam

Secara lalai, hanya pentadbir boleh melumpuhkan pemalam. Walau bagaimanapun, kelemahan ini membolehkan pentadbir kedai memadamkan sebarang fail boleh tulis pada pelayan, jadi kami boleh menghalang WordPress daripada memuatkan pemalam dengan memadam fail utama WooCommerce-woocommerce.php.

Kerentanan pemadaman fail ini wujud dalam fungsi pengelogan WooCommerce Log akan disimpan dalam direktori kandungan wp dalam bentuk fail .log. Apabila pentadbir kedai ingin memadamkan fail log, dia perlu menyerahkan nama fail sebagai parameter GET. Coretan kod yang ditunjukkan di bawah ialah bahagian yang terdedah:

woocommerce/includes/admin/class-wc-admin-status.php

class WC_Admin_Status{    public static function remove_log()    {    ⋮        $log_handler = newWC_Log_Handler_File();       $log_handler->remove(wp_unslash($_REQUEST['handle']));}
Salin selepas log masuk

woocommerce/includes/log-handlers/class-wc - log-handler-file.php

class WC_Log_Handler_File extends WC_Log_Handler{    public function remove($handle)    {    ⋮        $file = trailingslashit(WC_LOG_DIR) .$handle;    ⋮unlink($file);
Salin selepas log masuk

Masalahnya di sini ialah nama fail ($handle) akan ditambahkan pada direktori log (wp-content/wc-logs/) dan kemudian diserahkan kepada unlink( ) fungsi. Apabila menetapkan "$handle../../plugins/woocommerce-3.4.5/woocommerce.php", failkan wp-content/wc-logs/../../plugins/woocommerce-3.4.5/woocommerce php akan dialih keluar dan menyebabkan WooCommerce dilumpuhkan.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan kelemahan pemadaman fail sewenang-wenangnya dalam pemalam WordPress WooCommerce. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan