【每天一个漏洞报告19】HQL注入漏洞

admin 2022年3月4日15:34:26评论287 views字数 1650阅读5分30秒阅读模式

xxx系统存在HQL注入漏洞

漏洞名称

HQL注入漏洞

漏洞地址


漏洞等级

高危

漏洞描述

Hibernate是一类O/R mapping框架,其内部允许使用一般数据库查询语言或者Hibernate查询语言,同时对数据库进行增、删、改、查操作。

Hibernate查询语言注入指在Hibernate中程序没有细致地过滤用户输入的数据导致攻击数据植入程序而被当作代码执行。

我们知道,只有在知晓数据库名称及数据库列名称的前提下,方可对数据库里面的记录进行查询。可是,HQL查询语言一般并不支持union查询,所以也就没法获取数据库名称及数据库列名称了,自然也就没法对数据库里面的记录进行查询了。因此,只要通过某种方法知晓数据库名称及数据库列名称,Hibernate查询语言注入就可成功。

漏洞成因

在Hibernate中程序没有细致地过滤用户输入的数据导致攻击数据植入程序而被当作代码执行。

漏洞危害

可能导致数据泄露或数据破坏,缺乏可审计性,甚至导致攻击者完全控制服务器

修复方案

1.对参数名称进行绑定:

Query query=session.createQuery("from User user where user.name=:customername and user:customerage=:age");

query.setString("customername",name);

query.setInteger("customerage",age);

2.对参数位置进行邦定:

Query query=session.createQuery("from User user where user.name=? and user.age =?");

query.setString(0,name);

query.setInteger(1,age);

3.setParameter()方法:

String hql="from User user where user.name=:customername";

Query query=session.createQuery(hql);

query.setParameter("customername",name,Hibernate.STRING);

4.setProperties()方法:

将命名参数与一个对象的属性值绑定在一起

Customer customer=new Customer();

customer.setName("pansl");

customer.setAge(80);

Query query=session.createQuery("from Customer c where c.name=:name and c.age=:age");

query.setProperties(customer);

setProperties()方法会自动将customer对象实例的属性值匹配到命名参数上,但是要求命名参数名称必须要与实体对象相应的属性同名。

5.HQL拼接方法,这种方式是最常用,而且容易忽视且容易被注入的,通常做法就是对参数的特殊字符进行过滤,推荐大家使用 Spring工具包的StringEscapeUtils.escapeSql()方法对参数进行过滤:

public static void main(String[] args) {

  String str = StringEscapeUtils.escapeSql("'");

  System.out.println(str);

}

测试过程

某站userIdCard参数存在Hibernate查询语言注入,攻击者进入系统登录页面,单击忘记密码并输入123',如图1所示。

【每天一个漏洞报告19】HQL注入漏洞

接下来,使用Burp Suite截取找回密码请求数据包,如图2所示。

【每天一个漏洞报告19】HQL注入漏洞

攻击者对截取的数据包进行安全测试,Web服务器返回图3所示的信息。

【每天一个漏洞报告19】HQL注入漏洞 【每天一个漏洞报告19】HQL注入漏洞

攻击者直接使用sqlmap验证该HQL注入,网站后台数据库为Oracle。

复测情况

未修复

测试人员

测试人员1 测试人员2


原文始发于微信公众号(利刃信安):【每天一个漏洞报告19】HQL注入漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月4日15:34:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【每天一个漏洞报告19】HQL注入漏洞https://cn-sec.com/archives/668734.html

发表评论

匿名网友 填写信息