自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

收下這張小貼士,填補(bǔ)那些年在HQL注入留下的坑

數(shù)據(jù)庫 其他數(shù)據(jù)庫
SQL注入是一種大家非常熟悉的攻擊方式,目前網(wǎng)絡(luò)上有大量存在注入漏洞的DBMS(如MySQL,Oracle,MSSQL等)。但是缺少針對hibernate查詢語言的相關(guān)資源,以期本文能給在滲透測試時(shí)能給各位多提供一條路。

前言

SQL注入是一種大家非常熟悉的攻擊方式,目前網(wǎng)絡(luò)上有大量存在注入漏洞的DBMS(如MySQL,Oracle,MSSQL等)。但是缺少針對hibernate查詢語言的相關(guān)資源,以期本文能給在滲透測試時(shí)能給各位多提供一條路。

[[272572]]

HQL查詢并不直接發(fā)送給數(shù)據(jù)庫,而是由hibernate引擎對查詢進(jìn)行解析并解釋,然后將其轉(zhuǎn)換為SQL。為什么這個(gè)細(xì)節(jié)重要呢?因?yàn)橛袃煞N錯(cuò)誤消息來源,一種來自hibernate引擎,一種來自數(shù)據(jù)庫。

如果在HQL語法中發(fā)現(xiàn)了注入點(diǎn),我們是不能直接使用平時(shí)的SQL利用方法來應(yīng)對的,HQL有屬于它自己特定的語法,相對SQL而言限制更多一些,比如說HQL就沒有方法可以直接查詢未映射的表單,沒有聯(lián)合,沒有函數(shù)來創(chuàng)建簡單延遲,沒有系統(tǒng)函數(shù)。好在俄羅斯程序員在幾年前尋找到一個(gè)方法,將HQL context轉(zhuǎn)義成SQL context,進(jìn)而實(shí)現(xiàn)直接與數(shù)據(jù)庫通信。接下來進(jìn)入正題,此外各位需要注意,不同的數(shù)據(jù)庫轉(zhuǎn)義方法不盡相同,以下案例使用的是MySQL數(shù)據(jù)庫。

開胃菜:HQL轉(zhuǎn)義

最初的請求/響應(yīng)信息(注意POST body中的GWT格式)

在參數(shù)后面加上單引號,在返回的響應(yīng)信息中可以看到服務(wù)器拋出一個(gè)錯(cuò)誤。

像是豎線(‘|’)、反斜杠(‘\’)這類特殊符號會(huì)打亂GWT結(jié)構(gòu),我們得對這些數(shù)據(jù)進(jìn)行編碼。GWT格式對特殊字符的處理:

  1. | => !  
  2. \ => \ 

在將HQL context進(jìn)行轉(zhuǎn)義之前,我們還需要對涉及到的數(shù)據(jù)庫進(jìn)行一些測試:

在MySQL, MSSQL, Oracle等常用數(shù)據(jù)庫中進(jìn)行測試,最終選定的最后一條payload卻只能在MySQL下執(zhí)行,接下來我們就將HQL context進(jìn)行轉(zhuǎn)義。

將字符串\'',由HQL context轉(zhuǎn)換為MySQL context。在HQL查詢上下文中,單引號會(huì)被附加另一個(gè)單引號來進(jìn)行轉(zhuǎn)義,反斜杠依舊是平常的反斜杠。這里與MySQL全然不同,MySQL使用反斜杠來轉(zhuǎn)義單引號,而不是另一個(gè)單引號。因此,當(dāng)Hibernate框架解析到一個(gè)查詢語句,剛好底層使用的數(shù)據(jù)庫又是MySQL的時(shí)候,就變得十分有趣了:

Hibernate解析到的語句:

  1. 'orderInGroup'||'\''|| (select 1)) -- ' // as a string 

加上payload之后的MySQL:

  1. 'orderInGroup'||'\''|| (select 1)) -- ' // string '\'', logical 'or', select query 

以下截圖顯示了payload成功執(zhí)行

吃完字符串轉(zhuǎn)義這口開胃菜之后,胃口不妨打開一些,從數(shù)據(jù)庫中檢索信息

正餐:布爾型盲注

我們這個(gè)案例中的注入點(diǎn)在'order by'查詢部分,由于應(yīng)用無法顯示查詢的數(shù)據(jù),這時(shí)我們就使用布爾型盲注的思路,MySQL函數(shù)updatexml就是一個(gè)非常不錯(cuò)的選擇,如果它的第二個(gè)參數(shù)不是有效的XPath查詢字符串就會(huì)報(bào)錯(cuò),如果XPath查詢是正確的就不返回值。

  1. updatexml(xml_target,xpath_expr,new_xml) 

重要的是,只會(huì)在計(jì)算完第二個(gè)參數(shù)后才會(huì)拋出錯(cuò)誤(其中包含有if子句),也就是根據(jù)if判斷子句,應(yīng)用確定是否返回錯(cuò)誤。和SQL下的布爾值盲注思路一樣,之后通過逐個(gè)字符的提取數(shù)據(jù)即可。

獲取到的完整值:

最后解碼得到[…]PROD_SELF[…]

強(qiáng)烈推薦ORM2Pwn: Exploiting injections in Hibernate ORM

參考文獻(xiàn)

Эксплуатация инъекций в Hibernate ORM

GWT RPC data format

SQL布爾型盲注思路分析

ORM2Pwn: Exploiting injections in Hibernate ORM

HQL Injection Exploitation in MySQL

Exploiting a HQL injection 

HQL for pentesters Hibernate:深入HQL學(xué)習(xí)

責(zé)任編輯:武曉燕 來源: 嘶吼
相關(guān)推薦

2014-05-12 10:37:41

2020-10-29 10:22:44

中臺(tái)

2017-07-19 14:26:01

前端JavaScriptDOM

2021-09-07 14:35:48

DevSecOps開源項(xiàng)目

2022-05-15 08:13:50

Mysql數(shù)據(jù)庫Mycat

2015-03-12 09:51:09

CoreDataiCloud

2020-04-21 15:18:11

財(cái)務(wù)信息化

2017-03-31 10:27:08

推送服務(wù)移動(dòng)

2017-07-06 11:41:48

CIOIT技術(shù)

2020-05-28 16:15:50

HTTP暗坑前端

2013-04-12 15:59:33

2017-08-04 17:07:32

JavaArraysList

2016-12-28 13:19:08

Android開發(fā)坑和小技巧

2018-07-05 06:02:38

綜合布線弱電動(dòng)力線

2015-04-13 16:13:11

2011-12-15 09:45:21

PhoneGap

2011-12-22 19:57:38

PhoneGap

2015-04-13 17:39:11

移動(dòng)IM開發(fā)

2018-02-06 08:36:02

簡歷程序員面試

2017-08-28 15:30:49

Android編碼器編碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號