Hibernate框架中的HQL注入漏洞



Hibernate是一種ORMapping框架,內部可以使用原生SQL還有HQL語言進行SQL操作。

所謂的HQL注入,就是指在Hibernate中沒有對數據進行有效的驗證導致惡意數據進入應用程序中造成的。

請看這段代碼:

 

Input參數即可造成注入。

不過在Hibernate中,一般都是在createQuery中使用PDO,使用setString填充佔位符進行sql語句的拼接,如果是這樣的話,自然就不存在SQL注入,但是不排除有人像上面的圖片中的寫法。

正常情況下:

 

Sqlin參數存在注入漏洞,於是:

由於Hibernate的HQL中,大多數情況下不支持union,更不支持數據庫的meta data的查詢,所以如何弄清楚實體名稱和列名稱才能繼續提取有用的數據,遺憾的是,沒有找到一種方法爆出當前的列名。

看了http://blog.h3xstream.com/2014/02/hql-for-pentesters.html, 上面說提交一個不存在的列名即可,但是本地測試沒有成功,目測是try-catch了事物提交,然後e.getSql()方法。

比如,源碼中進行錯誤處理,輸出了e.getSQL()以及e.getXSQLException(),結果就和上面老外說的trick一樣了:

不過我認爲這樣的“友好”錯誤存在的機率很小。

目前來看,HQL注入除了萬能密碼、知道表名列名的情況下進行盲注外,我沒有想到比較好的方法來進行漏洞利用,個人認爲Hibernate中的注入比較雞肋。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章