wordpress漏洞_WordPress XSS漏洞可能導致遠程執行代碼(RCE)

原作者: Ziyahan Albeniz

在2019年3月13日,專注于靜態代碼分析軟件的RIPS科技公司發布了他們在所有版本的WordPress 5.1.1中發現的跨站點腳本(XSS)漏洞的詳細信息。該漏洞已在不同類別的各種網站上公布。有些人將其歸類為跨站點請求偽造(CSRF)漏洞,而其他人則將其正確歸類為XSS。在本文中,我們將分析此WordPress XSS漏洞(編號為CVE-2019-9887),該漏洞導致遠程執行代碼(RCE)漏洞。

b478ffbe98f6e1fa148940fa0adc0c71.png

WordPress的Pingback和Trackback功能

在WordPress中,nonce需要一個值來防止CSRF攻擊。這是一個隨機值,在每個請求中都會更改,并且只有服務器和用戶的瀏覽器才知道。但是,nonce自2009年以來,WordPress中的評論部分沒有使用過值。這是因為WordPress開發人員做出了兩個設計決策,限制了安全令牌的正確實現以防止CSRF攻擊。

WordPress中的pingback和trackback功能要求缺少nonce值才能正常運行:

  • pingback功能通知博客他們的文章已從某人的帖子鏈接。這增加了在其搜索引擎優化中使用反向鏈接方法在任何搜索引擎上的網站評級。
  • 當博主鏈接到不是使用WordPress構建的網站時,會使用引用功能。

WordPress中評論的過濾

當攻擊者設法重定向經過身份驗證的WordPress管理員用戶以訪問攻擊者控制的網站時,他們可以代表此管理員用戶提交表單,以便在用戶名稱的博客上發布評論。除了WordPress開發人員之外,任何人都認為這將是一個嚴重的漏洞。但是,如果要避免破壞pingback,則行為是絕對必要的。

為了最小化表單提交代表管理員的影響,他們實現了一般不會阻止CSRF的nonce。如果設置了正確的現時(如果管理員使用實際表單發布評論),則評論中的HTML代碼不會像表單提交是CSRF的結果那樣嚴格過濾。

因此,如果管理員帳戶發出的評論請求中沒有nonce令牌,WordPress會使用nonce值'_wp_unfiltered_html_comment_disabled'來檢查是否應該從HTML標簽中清除評論。

分析WordPress的有缺陷的過濾機制

RIPS Technologies的一名工程師在靜態代碼分析期間發現了/wp-includes/comment.php文件中檢測和清理機制的缺陷。這是與缺陷相關的代碼塊。

if ( current_user_can( 'unfiltered_html' ) ) { if (! wp_verify_nonce( $_POST['_wp_unfiltered_html_comment'], 'unfiltered-html-comment' )) { $_POST['comment'] = wp_filter_post_kses($_POST['comment']); }}else { $_POST['comment'] = wp_filter_kses($_POST['comment']);}

根據代碼,如果當前用戶沒有權限unfiltered_html,則注釋文本wp_filter_kses將從其中的HTML元素定向到要清理的函數。

由于攻擊請求將通過登錄管理員帳戶的瀏覽器發送,并且管理員帳戶具有權限unfiltered_html,因此代碼的缺陷從第一個if語句開始。

在第一個條件語句中,如果未驗證nonce令牌,則注釋文本將通過一個名為的另一個函數wp_filter_post_kses來清理輸入。

職能部門之間的主要區別wp_filter_kses,并wp_filter_post_kses是wp_filter_kses刪除所有的意見,除了基本的HTML標簽,如href屬性和錨標記。該wp_filter_post_kses函數清理所有潛在風險的HTML標記,但它比wp_filter_kses函數更寬松。

使用HTML標簽繞過清理

RIPS科技公司的工程師發現,HTML元素和屬性的清理過程存在一個重大缺陷。一旦評論被清理,屬于標簽的屬性通過將它們解析為關聯數組而針對SEO目的進行優化。

例如,如果帶有標記的屬性是href="#" rel="nofollow",則字符串將被解析為一個數組,其中每個屬性名稱都是鍵:

function wp_rel_nofollow_callback( $matches ) { $text = $matches[1]; $atts = shortcode_parse_atts($matches[1]); ?

完成此轉換后,您可以使用以下方式訪問href錨標記的功能$atts["href"]。接下來,WordPress檢查注釋中的錨標記是否具有該rel屬性。

重要的是要注意,rel錨元素中的屬性只有在評論者擁有管理員帳戶時才能存在。該wp_filter_kses函數不允許此屬性; 該wp_filter_post_kses函數的作用。

 if (!empty($atts['rel'])) { // the processing of the 'rel' attribute happens here ? $text = ''; foreach ($atts as $name => $value) { $text .= $name . '="' . $value . '" '; } } return '';}

使用WordPress漏洞插入XSS Payload

如上面以粗體顯示的代碼行所示,連接的字符串值不會以任何方式進行清理。如果攻擊者將以下title屬性添加到注釋中的錨標記,則可能會濫用此功能的性質。

 onmouseover=alert(1) id="'

處理后代碼行將變為以下內容(注意雙引號):

希望利用此漏洞的惡意用戶必須欺騙具有管理員權限的用戶訪問將觸發和執行有效負載的頁面。

此時發送具有XSS有效負載的注釋請求。

為了進行秘密攻擊,并在提交表單時避免頂級導航,表單的響應將定向到具有display:nonetarget屬性中指定的樣式的隱藏iframe 。

最后,管理員瀏覽器將查看帶有XSS有效負載評論的博客文章,以確保攻擊完成。執行攻擊后,將通過管理面板編輯模板文件。然后,攻擊者可以執行PHP代碼注入并將此XSS攻擊轉換為遠程執行代碼(RCE)。

修復WordPress中的漏洞

如果您使用WordPress,解決此問題的最快速最簡單的方法是更新到修復漏洞的5.1.1版。

此外,Netsparker報告任何使用過時WordPress版本的掃描網站,并顯示當前版本的相關漏洞。這是一個這樣的報告的例子。

6e80cdb3a9986ba3eaf93271fb188ecc.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260126.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260126.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centOS 6環境下安裝R-3.3.2及Rstudio-server

【編譯R語言】 1、下載安裝R語言 # 下載R-3.3.2 $ wget https://cran.r-project.org/src/base/R-3/R-3.3.2.tar.gz# 安裝R-3.3.2 $ tar -zxvf R-3.3.2.tar.gz $ cd R-3.3.2# 安裝到默認目錄下 --perfix/opt/R 或 /usr/local/lib64/R $ ./configure --prefix/opt/R --with-re…

DJ輪回舞曲網下載教程

該網站網址為:http://www.92cc.com/ 昨天有網友問我這個網站能不能下載。我告訴他,只要能在線試聽的就能下載 于是今天出個臨時教程 教大家如何獲取試聽的音樂URL。 第一步找到試聽的網址,如: http://www.92cc.com/p97206.html 第…

【DP】【Asia - Harbin - 2010/2011】【Permutation Counting】

【題目描述】Given a permutation a1, a2,...aN of {1, 2,..., N}, we define its E-value as the amount of elements where ai > i. For example, the E-value of permutation {1, 3, 2, 4} is 1, while the E-value of {4, 3, 2, 1} is 2. You are requested to find h…

三豐三坐標編程基本步驟_三豐三坐標CRYSTA APEX S776

日本三豐MITUTOYO從1934年成立至今,專力致于精密測量儀器的研發和生產,在七十多年中,日本三豐量具MITUTOYO已成為世界最大綜合測量儀器的制造商,它生產的產品包括千分尺,卡尺,千分表,高度尺&…

oracle的文件后綴名,轉:數據文件的擴展名是ora,dbf,dat的,有什么區別?

只是通過擴展名來標識文件的類型而已,對于數據文件不管是ora/dat/dbf,都是一樣的,沒有什么區別。.dbf-數據文件, .tmp-臨時文件,.log-重作日志文件(redo log file), .ctl-控制文件.ora-參數文件&#xff0c…

Unity3D研究院之Android同步方法讀取streamingAssets

版本Unity5.3.3 Android 小米pad1 首先非常感謝 守著陽光 同學在下面的留言。讓我解決了一個大的謎團。。 開始我知道 StreamingAssets 路徑是這個 path “jar:file://” Application.dataPath “!/assets/”; 文檔在這里: http://docs.unity3d.com/Manual/Strea…

Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --樹狀數組

題意:給出數組A,定義f(l,r,x)為A[]的下標l到r之間,等于x的元素數。i和j符合f(1,i,a[i])>f(j,n,a[j]),求有多少對這樣的(i,j). 解法:分別從左到右,由右到左預處理到某個下標為止有多少個數等于該下標&…

JQuery AJAX提交中文亂碼的解決方案

$.post(doSearch.action, {page : page,vip : vip,searchType : searchType,subtype : subtype,type : type,contentType: "application/x-www-form-urlencoded; charsetutf-8", keyword : keyword}, function(data) //回傳函數{var val;}); 解決這個中文亂碼問題&am…

列舉ospf的5種報文類型_危險品貨物各種包裝類型以及裝箱技巧

對于危險貨物來說,其危險性的大小除與貨物的本身性質有關外,還與貨物的包裝方式密切相關。因而,危險貨物進箱條件的確定,也必須考慮到貨物的包裝方法。一、集裝箱內徑20GP內徑:長5.8M*寬2.34M*高2.34M40GP內徑&#xf…

linux一行多個命令行,如何在一行中運行多個Linux命令

對于每個Linux管理員來說,熟練使用各種命令行是他們的特性。但對于普通用戶來說,可能還是有難度,您需要繼續練習Linux命令,并找到使該任務更有效的方法。實現這個特定目標的一種方法是學習一些技巧,這些技巧可以提高發…

Java 數組基礎

數組 數組(Array):相同類型數據的集合。 定義數組 方式1(推薦,更能表明數組類型) type[] 變量名 new type[數組中元素的個數]; 比如: int[] a new int[10]; 數組名,也即引用a&…

車輛跟馳模型matlab代碼實現_MATLAB——考慮駕駛員特性及前車速度的快速路模型...

重發一下之前誤刪的一篇~目前大多數元胞自動機模型并沒有考慮前車速度,大多數同向行駛的模型中車輛都是處在一個完全跟車的狀態,無論前車是加速還是減速,后車駕駛者都只是根據自己的車速判斷是減速跟馳還是變換車道來尋求尋求更合理的行駛狀態…

linux nc命令

參考 :http://www.linuxso.com/command/nc.html NC 全名 Netcat (網絡刀),作者是 Hobbit && ChrisWysopal。因其功能十分強大,體積小巧而出名,又被大家稱為“瑞士軍刀”。nc - TCP/IP swiss army knife nc 常用于溢出、反向鏈接、上傳…

收藏一些自己認為好的網站或博客

月光博客 seo每天一貼 虎嗅網 李巖的博客 中郵閱讀網,專門看電子期刊的,很不錯的免費閱讀期刊網。 seay web安全技術博客: http://www.cnseay.com 陸陸續續編輯中... 轉載于:https://www.cnblogs.com/caoyuanzhanlang/archive/2013/01/05/2846086.html

shell 判斷字符串相等_編程小短文:Bash子字符串還在用==?試試=~性能瞬間飆升100倍...

引言Bash 是 Linux 系統下欽定的 shell。你可以通過cat /etc/shells查看當前系統支持的 shell 種類。Bash 不但是系統管理員與內核交互的利器,且是一種語言,可以編寫大多數系統的自動化腳本,用于簡化運維工作。今天我們學習一個知識點&#x…

linux系統聯網命令,Linux系統常用的網絡命令及使用方法

Linux系統常用的網絡命令及使用方法Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。下面小編整理了Linux系統常用的網絡命令及使用方法,希望對大家有幫助!1、pingping命令工作在O…

Xss Csrf 簡介

一、Js在web的執行環境 1.直接觸發 ?在HTML頁中插入<script></script>腳本標記。JS嵌入到HTML中的兩種方式&#xff1a; ?1&#xff09;直接嵌入<script>標簽 <script language“javascript”> document.write(“hello world!”); </script> ?…

Cracking the Coding Interview 5.2

Given a(decimal -e.g. 3.72)number that is passed in as a string, print the binary representation. If the number can not be represented accurately in binary, print "ERROR" 整數部分&#xff1a; 對2取余&#xff0c;然后向右移動一位&#xff0c;重復直到…

python的render函數_帶函數return的Flask render_模板

TL&#xff1b;DR在這種情況下&#xff0c;我想我會選擇使用我現在的4個選項我將介紹4種選擇&#xff0c;其中一些可能比其他更可行。在如果您擔心execute表示的代碼存在代碼重復(DRY)&#xff0c;您可以簡單地定義一個兩個路由都可以調用的函數&#xff1a;def execute():# ex…

Google開源Leak Finder——用于檢測內存泄漏的JavaScript工具

近日&#xff0c;Google開源了Leak Finder&#xff0c;這款工具可以查看JavaScript應用的堆&#xff0c;進而發現內存泄漏。 作為一門垃圾收集語言&#xff0c;JavaScript并不會出現常見的內存泄露情況&#xff0c;特別是像C等語言中所見到的那種。但如果依舊將內存分配給那些不…