国产亚洲欧美一区二区,亚洲欧洲国产一区,成人在线视频网,中文精品视频一区二区在线观看

返回頂部
關閉軟件導航
位置:首頁 > 資訊 > wordpress>WordPress 4.3正式發布:增標記語法,書寫更快捷

  設置網站Icon

  網站Icons通常會出現在瀏覽器標簽頁左側、收藏夾等位置。在自定義面板中可設置站點Icon。即使更換主題后,Icon也不會變。

  WordPress 4.3正式發布:增標記語法,書寫更快捷

  改進密碼管理

  之前你會通過郵件收到WordPress新密碼,現在你只會得到是一個用于重置密碼的鏈接,不再明文發送密碼。

  WordPress SQL注入漏洞與提權分析

  WordPress核心功能SQL注入漏洞分析

  威脅響應中心研究員對Wordpress核心功能SQL注入漏洞(編號為CVE-2015-5623和CVE-2015-2213)進行了詳細的分析

  0x00 漏洞概述

  在twitter上看到Wordpress核心功能出現SQL注入漏洞,想學習下,就深入的跟了下代碼,結果發現老外留了好大的一個坑。雖然確實存在注入問題,但是卻沒有像他blog中所說的那樣可以通過訂閱者這樣的低權限來觸發SQL注入漏洞。

  這個Wordpress漏洞系列的文章目前更新了兩個部分,一個是通過權限繞過實現訂閱者權限寫一篇文章到回收站,另一個就是通過寫入的這篇文章來實現SQL注入漏洞。這兩個漏洞的描述,TSRC的phithon寫的文章其實已經很清楚了,我這里從我分析的角度來介紹這兩個漏洞的形成、利用以及phithon省略掉的原文部分內容。

  0x01 越權提交文章

  _wpnonce的獲取

  在講越權漏洞之前,我們需要介紹一下Wordpress后臺的_wpnonce參數,這個參數主要是用來防止CSRF攻擊的token。后臺大多數敏感功能都會通過,當前用戶信息、功能名稱、操作對象id等內容生成token,所以我們很難在沒有token的時候進行某些功能的使用。這個CSRF的防護機制間接地導致之后SQL注入很難再低權限情況下觸發(因為看不到token),后面講SQL注入漏洞時,我們會詳細的聊這個問題有多坑。

  之所以要把_wpnonce的獲取放在前面講,是因為,我們需要一個讓我們可以使用編輯提交文章功能的token。這個功能的token我們可以通過訪問后臺post.php的post-quickdraft-save功能來獲取,嚴格的來說這個獲取方式也算是一個信息泄露漏洞,官方也在新版本中進行了修補。下面我我們來看下這個token泄露的原因。部分代碼如下:

  case 'post-quickdraft-save':

  // Check nonce and capabilities

  $nonce = $_REQUEST['_wpnonce'];

  $error_msg = false;

  // For output of the quickdraft dashboard widget

  require_once ABSPATH . 'wp-admin/includes/dashboard.php';

  if ( ! wp_verify_nonce( $nonce, 'add-post' ) )

  $error_msg = __( 'Unable to submit this form, please refresh and try again.' );

  if ( ! current_user_can( 'edit_posts' ) )

  $error_msg = __( 'Oops, you don’t have access to add new drafts.' );

  if ( $error_msg )

  return wp_dashboard_quick_press( $error_msg );

  從上面代碼我們可以看出這個功能在發現出現錯誤時,會將錯誤信息通過wp_dashboard_quick_press這個函數打印到頁面上,而這個函數生成的頁面的代碼中有這樣一行:

  wp_nonce_field( 'add-post' );

  生成了add-post功能的_wpnonceWordPress批量添加欄目 ,也就是說,即使我們做了一些被禁止的操作,返回頁面中也會出現這個_wpnonce。

  越權提交與條件競爭

  如phithon文章所說,由于GP使用邏輯混亂而導致的驗證繞過。我們來看post.php文件在開始檢驗文章是否存在的代碼:

  if ( isset( $_GET['post'] ) )

  $post_id = $post_ID = (int) $_GET['post'];

  elseif ( isset( $_POST['post_ID'] ) )

  $post_id = $post_ID = (int) $_POST['post_ID'];

WordPress批量助手

  else

  $post_id = $post_ID = 0;

  global $post_type, $post_type_object, $post;

  if ( $post_id )

  $post = get_post( $post_id );

  if ( $post ) {

  $post_type = $post->post_type;

  $post_type_object = get_post_type_object( $post_type );

  }

  可以看到在先提取GET中的post參數作為文章id來提取文章信息,如果沒有GET的post參數,再去用POST的post_ID參數來提取。而真正檢驗用戶是否對文章具有編輯權限,則是在edit_post中進行的,而這里的判斷參數是從POST中提取的:

  function edit_post( $post_data = null ) {

  global $wpdb;

  if ( empty($post_data) )

  $post_data = &$_POST;

  // Clear out any data in internal vars.

  unset( $post_data['filter'] );

  $post_ID = (int) $post_data['post_ID'];

  $post = get_post( $post_ID );

  $post_data['post_type'] = $post->post_type;

WordPress批量上傳內容

  $post_data['post_mime_type'] = $post->post_mime_type;

  if ( ! empty( $post_data['post_status'] ) ) {

  $post_data['post_status'] = sanitize_key( $post_data['post_status'] );

  if ( 'inherit' == $post_data['post_status'] ) {

  unset( $post_data['post_status'] );

  }

  }

  $ptype = get_post_type_object($post_data['post_type']);

  if ( !current_user_can( 'edit_post', $post_ID ) ) {

  if ( 'page' == $post_data['post_type'] )

  wp_die( __('You are not allowed to edit this page.' ));

  else

  wp_die( __('You are not allowed to edit this post.' ));

  }

  我們繼續看這段代碼最后的if判斷,判斷當前用戶是否有編輯這篇文章的權限。這個判斷最終的操作是在map_meta_cap這個函數中進行的:

  case 'edit_post':

  case 'edit_page':

  $post = get_post( $args[0] );

  if ( empty( $post ) )

  break;

  if ( 'revision' == $post->post_type ) {

  $post = get_post( $post->post_parent );

  }

  可以看出如果文章是不存在的,那么就會break出switch,在函數結束時返回$caps變量,而$caps在函數開始的時候已經被定義為一個空的數組了,也就是說,這里會返回一個空數組。下面我們來向前走,返回到調用map_meta_cap的has_cap函數中,看看后續的操作

  public function has_cap( $cap ) {

  if ( is_numeric( $cap ) ) {

  _deprecated_argument( __FUNCTION__, '2.0', __('Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead.') );

  $cap = $this->translate_level_to_cap( $cap );

  }

  $args = array_slice( func_get_args(), 1 );

  $args = array_merge( array( $cap, $this->ID ), $args );

  $caps = call_user_func_array( 'map_meta_cap'WordPress批量上傳內容, $args );

  // Multisite super admin has all caps by definition, Unless specifically denied.

  if ( is_multisite() && is_super_admin( $this->ID ) ) {

  if ( in_array('do_not_allow', $caps) )

  return false;

  return true;

  }

  $capabilities = apply_filters( 'user_has_cap', $this->allcaps, $caps, $args, $this );

  $capabilities['exist'] = true; // Everyone is allowed to exist

WordPress批量添加產品

  foreach ( (array) $caps as $cap ) {

  if ( empty( $capabilities[ $cap ] ) )

  return false;

  }

  return true;

  }

  看最后那個foreach,它檢測$caps中的各個元素在$capabilities中是否有不存在的,如果有那么就return false,但是$caps是個空數組,這樣很容易我們就獲得了一個true,權限校驗成功繞過。那么這樣我們可以得到的一個信息就是,我們可以通過這個缺陷去嘗試update一個并不存在的文章。

  那么現在問題來了,直接update一個不存在的文章是沒有意義的,因為數據庫執行SQL是肯定會報錯,我們要怎么才能成功創建一篇文章呢?

  在校驗權限之后,數據庫執行操作之前,post.php中有這樣一段代碼:

  if ( isset( $post_data['tax_input'] ) ) {

  foreach ( (array) $post_data['tax_input'] as $taxonomy => $terms ) {

  // Hierarchical taxonomy data is already sent as term IDs, so no conversion is necessary.

  if ( is_taxonomy_hierarchical( $taxonomy ) ) {

  continue;

  }

  if ( ! is_array( $terms ) ) {

  $comma = _x( ',', 'tag delimiter' );

  if ( ',' !== $comma ) {

  $terms = str_replace( $comma, ',', $terms );

  }

  $terms = explode( ',', trim( $terms, " \n\t\r\x0B," ) );

  }

  $clean_terms = array();

  foreach ( $terms as $term ) {

  // Empty terms are invalid input.

  if ( empty( $term ) ) {

  continue;

  }

  $_term = get_terms( $taxonomy, array(

  'name' => $term,

  'fields' => 'ids',

  'hide_empty' => false,

  ) );

  如果在POST的數據中存在名為tax_input的數組參數,那么就對參數中的值使用逗號進行切割,然后對分割出來的每個內容進行一次select查詢。那么這里我們可以想象一下,如果我們post_ID中填寫的是對當前最新文章ID+1的數值,并且在tax_input這個參數添加特別多的內容,導致它不停地select查詢,我們是不是在這個停滯的時間當中插入一篇文章(這篇文章的ID剛好是最新文章ID+1),那么后面的update是不是就有意義了?

  下面最后一個問題,我們如何插入一篇文章呢?還記得post-quickdraft-save功能嗎?它的作用就是快速的保存一篇草稿!

  這里可恥的盜一張phithon文章中的一幅圖,來讓各位加深條件競爭的流程:

  2

  小結

  在調試過程中,感觸最深的的就是條件競爭,要很好的把握插入文章和update的時間差。如果查得太早則無法通過權限檢驗,如果太晚了又失去了意義。我獲得的經驗是,**插入文章的進程盡量等待時間長一些,tax_input中的內容盡可能的多,這樣能夠比較穩定的在校驗之后,update之前插入文章。

  當然這里面還有每個用戶只可以保存一個草稿的限制,漏洞發現者提供的建議是等一周的時間,草稿會自動刪除,而_wpnonce則會多保留一天。phithon的建議更好一些,使用兩個賬戶,一個賬戶插入文章,一個賬戶update。

  一個越權漏洞由信息泄露、邏輯漏洞導致的權限繞過以及程序執行時間可操控三個小漏洞組合而成,環環相扣,腦洞實在是大。

如果您覺得 WordPress 4.3正式發布:增標記語法,書寫更快捷 這篇文章對您有用,請分享給您的好友,謝謝
文章地址:http://m.brucezhang.com/article/wordpress/WordPresszsfbzbjyfsxgkj.html
解放雙手無盡可能,有問題添加天線貓微信
国产亚洲欧美一区二区,亚洲欧洲国产一区,成人在线视频网,中文精品视频一区二区在线观看
久久久国产成人精品| 欧美日韩第一区| 欧美日韩亚洲综合在线| 91久久久久久久久| 国产日本欧美一区二区| 久久av一区二区三区亚洲| 国产综合网站| 国产精品国产精品| 午夜电影亚洲| 国产一区视频在线看| 欧美午夜精品一区二区三区| 亚洲欧美激情一区| 国产一区在线播放| 国产精品九色蝌蚪自拍| 久久xxxx精品视频| 亚洲国产91精品在线观看| 国产日韩亚洲| 免费欧美在线视频| 一区二区三区日韩精品视频| 在线精品一区| 欧美性猛交xxxx乱大交蜜桃| 欧美精品aa| 亚洲女女做受ⅹxx高潮| 黄色成人精品网站| 国产欧美精品日韩精品| 欧美 日韩 国产精品免费观看| 亚洲伦伦在线| 亚洲欧洲一区| 国产精品视频久久| 国产精品高潮在线| 久久永久免费| 久久久久久久一区| 亚洲免费观看视频| 国产日韩成人精品| 国产精品久久久爽爽爽麻豆色哟哟| 久久精品亚洲乱码伦伦中文| 最新成人在线| 亚洲欧洲日本专区| 国产欧美一区二区三区久久| 国产精品入口麻豆原神| 免费看的黄色欧美网站| 免费成人av在线| 亚洲影院免费| 亚洲精品国产精品国自产观看| 在线不卡a资源高清| 国产精品xnxxcom| 国产精品极品美女粉嫩高清在线 | 精品99视频| 欧美日韩一区成人| 欧美日韩国产在线| 久久成人在线| 在线视频欧美精品| 亚洲在线播放| 亚洲精品欧美日韩专区| 亚洲精品一区中文| 激情综合色综合久久综合| 在线观看一区| 国产欧美亚洲一区| 国产一区二区在线观看免费播放| 欧美日韩精品是欧美日韩精品| 欧美日韩福利| 久久伊伊香蕉| 欧美人与禽性xxxxx杂性| 久久久久久网| 欧美大片在线看| 久久久久这里只有精品| 蜜桃av综合| 久久久久成人精品免费播放动漫| 久久久久青草大香线综合精品| 亚洲欧美一区二区激情| 夜夜嗨av一区二区三区免费区| 亚洲一区二区在线免费观看| 亚洲美女中文字幕| 亚洲免费视频中文字幕| 99精品欧美| 亚洲欧美视频| 久久不见久久见免费视频1| 在线电影欧美日韩一区二区私密| 久久婷婷久久| 欧美韩日精品| 玖玖视频精品| 欧美三区美女| 欧美国产日韩xxxxx| 国产精品久久久久影院色老大 | 亚洲性视频网址| 日韩视频永久免费| 亚洲自拍高清| 久久五月天婷婷| 久久国产成人| 欧美国产日本韩| 免费不卡在线观看| 欧美涩涩视频| 国产精品白丝av嫩草影院| 国产原创一区二区| 国内精品视频一区| 亚洲精品色婷婷福利天堂| 亚洲国产乱码最新视频| 亚洲线精品一区二区三区八戒| 一区二区精品在线| 久久久久久久综合日本| 欧美日韩裸体免费视频| 欧美日韩亚洲一区| 国产午夜精品理论片a级探花| 国产欧美一区二区白浆黑人| 亚洲国产网站| 亚洲精品在线观看视频| 欧美一区不卡| 欧美激情综合在线| 欧美破处大片在线视频| 国产亚洲毛片| 国内精品久久久久久久97牛牛| 亚洲精选一区二区| 一本色道久久综合一区| 久久久久成人精品免费播放动漫| 欧美日韩免费视频| 国产精品久久9| 亚洲国产精品成人va在线观看| 亚洲国产精品成人精品| 午夜在线精品| 欧美日韩国产欧| 国产精品久久久久久户外露出 | 亚洲成人在线| 亚洲一区区二区| 欧美大胆成人| 欧美色综合天天久久综合精品| 合欧美一区二区三区| 在线播放亚洲| 午夜欧美精品久久久久久久| 欧美日韩免费在线视频| 国产精品爽爽ⅴa在线观看| 亚洲精品美女91| 久久在线91| 欧美日韩精品综合在线| 亚洲第一中文字幕在线观看| 一片黄亚洲嫩模| 欧美高清视频一区二区| 樱花yy私人影院亚洲| 一本色道久久88精品综合| 欧美成人精品一区| 永久91嫩草亚洲精品人人| 99精品欧美一区二区三区| 欧美成人高清视频| 在线电影一区| 久久久亚洲国产天美传媒修理工 | 亚洲第一二三四五区| 久久久久久精| 国产综合在线视频| 亚洲蜜桃精久久久久久久| 欧美ed2k| 亚洲第一主播视频| 久久亚洲一区二区| 国产精品都在这里| 99亚洲精品| 欧美日韩综合久久| 激情亚洲一区二区三区四区| 久久精品国产视频| 国产拍揄自揄精品视频麻豆| 亚洲激情视频在线| 欧美成人综合网站| 亚洲高清在线视频| 鲁鲁狠狠狠7777一区二区| 国产精品久久久久999| 亚洲你懂的在线视频| 国产精品入口日韩视频大尺度| 最新成人在线| 欧美日本韩国在线| 一区二区三区 在线观看视频| 欧美日韩免费观看中文| 激情成人综合网| 久久久久久夜| 在线日韩精品视频| 欧美第十八页| 韩国成人精品a∨在线观看| 久久久综合精品| 亚洲第一精品影视| 欧美激情女人20p| 尤物精品国产第一福利三区 | 久久高清一区| 黄色精品一区| 欧美a级在线| 国产在线欧美| 久色成人在线| 亚洲美女精品久久| 国产精品高潮在线| 99精品视频一区| 国产精品红桃| 午夜在线观看欧美| 激情偷拍久久| 欧美成人午夜免费视在线看片| 狠狠久久亚洲欧美| 欧美ed2k| 中文一区在线| 国产欧美日韩一区二区三区| 一本色道久久88亚洲综合88| 国产精品久久久久久久浪潮网站| 亚洲欧美日韩国产一区二区三区| 国产在线乱码一区二区三区| 免费日韩一区二区| 一区视频在线看| 欧美日韩国产美|