猫头鹰
信安舆情早知道

HQL injection利用测试

0x00

其实也算不上是探索了,因为很久就看过,只是当时感觉语句太别扭应用场景不多各种各种,没有细看。最近正好测试了一下,找了找感觉国内相关文章比较少,于是呢,记录一下。

0x01

看了一下HQL的查询构造器和找的相关的文章,大概也许Hibernate对象支持三种语法:HQL、SQL和Hibernate Criteria。具体也不是很懂,毕竟java不是很懂,所以呢。。。

先说SQL吧,Hibernate是支持直接使用sql的,也就是创建查询器对象的时候使用createSQLQuery()方法的话,是可以直接执行sql语句的。当然如果注入点出现在这里你也不会发现是用了Hibernate了,直接用oracle盲注语句就ok

0x02

现在说主要的吧,一般会选择这个框架的人当然会用HQL的写法,把数据库的配置和结构写在XML中,HQL先去找文件里面的库表和字段映射,然后再去查询。这里以HQL习惯用的oracle为例吧。

第一个文件hibernate.cfg.xml配置数据库的连接以及数据表的定义xml位置

1

然后就是各种表的xml定义文件,包括字段名、别名

2

这就是HQLi的致命处了,也就是没有在xml中做映射的表是无法查询的,未映射的列也是无法查询的。如果读不到hibernate.cfg.xml的内容,常常发现自己几乎连数据拓扑结构都猜不对。(测试的时候我发现联合查询是失效的,后来仔细看了文档发现union也要写在xml中。。。)

所以呢,遇到HQL injection,先冷静一下,利用方式掣肘处太多,如果是登录框的话,代表什么自己想吧,但是如果是边角的查询点。。。代表什么也自己想把。

所以测试结果,HQLi选取的各种最后exp是下面:

因为like的%不管用,也不知道是不是配置原因,所以先测试长度再用占位符

3

0x03

上面两条语句里面的column name和table name就靠运气猜吧,毕竟都是开发在xml映射表里写的别名,如果开发人员恶趣味写个奇怪的名字做映射的话。。。嗯,至于第三种呢,我不知道啊,看不懂语句。

那么问题来了,这里会不会放几张我自己的测试图呢,もちろんないです!~

好奇的话自己去搭吧,如果有更好方法和相关文章也可以留言推荐一下。

 

*来源:ksss  Mottoin小编整理发布

转载请注明来自MottoIN,未经允许不得转载!MottoIN » HQL injection利用测试

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

MottoIN 换一个角度看安全

寻求报道联系我们