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中的注入比较鸡肋。

时间: 2024-10-23 09:36:40

Hibernate框架中的HQL注入漏洞的相关文章

CI框架中的SQL注入隐患

 0x00 在CI框架中,获取get和post参数是使用了$this->input类中的get和post方法. 其中,如果get和post方法的第二个参数为true,则对输入的参数进行XSS过滤,注意只是XSS过滤,并不会对SQL注入进行有效的防范. 例子: Controller中,定义一个shit方法,获取get数据: 指定了第二个参数为true: (1)XSS测试 (2)SQL注入测试 并不会对单引号进行处理. 例子在程式舞曲CMS中,该CMS是基于CI框架进行开发的CMS: 这里的变量

Hibernate框架中的HibernateUtil

对于刚学习三层框架的人来说,每一个配置文件和每一个类,以及功能来说都很新鲜,时常就忘记了相关类的功能. 在这里建议编程就是要多加练习,才能熟能生巧. 这里说一下HibernateUtil类,在使用Hibernate的前提是需要去下载Hibernate项目,然后在lib文件夹下面把所有的. jar 包 COPY到你项目的lib文件夹下. 什么是HibernateUtil类,或者是说有什么功能? Hibernate框架,主要解决的就是项目于数据库连接相关的问题,然而主要实现是需要靠配置文件中的代码与

在hibernate框架中配置显示sql语句

使用Hibernate的框架开发时,可在Hibernate.cfg.xml中加上 <property name="hibernate.show_sql">true</property><!-- 配置显示sql语句 -->  <property name="format_sql">true</property><!-- 让输出的sql语句格式化 --> 就可以在控制台显示对应的sql语句了,对于开

如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析!

当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_string()函数过滤用户提交的值,但是也有缺陷.而使用PHP的PDO扩展的 prepare 方法,就可以避免 sql injection 风险. PDO(PHP Data Object) 是PHP5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的

在Hibernate框架中详谈一级缓存

在学习Hibernate的过程中我们肯定会碰上一个名词---缓存,一直都听说缓存机制是Hibernate中的一个难点,它分为好几种,有一级缓存,二级缓存和查询缓存 今天呢,我就跟大家分享分享我所理解的一级缓存 要想完美的体现出缓存机制的话,我想通过查询语句生成的sql应该就能够很清楚的看到 那些Hibernate的配置信息我就不展示了,直接看关键代码 场景:我要查询同一个对象,查询两次,观察在不同的情况下,sql语句的生成情况 我事先准备了一个HibernateUtil工具类,具体如下 pack

Hibernate框架中,使用JDBC语法

/** * 调用存储过程 * * @param PRONAME * @return */ public CallableStatement citePro(final String PRONAME){ Session session = getCurrentSession(); CallableStatement pro = session.doReturningWork(new ReturningWork<CallableStatement>() { @Override public Cal

Hibernate框架中Criteria语句

在Hibernate中有一种查询语句是Criteria查询(QBC查询),今天呢 我们就一个个的详细的跟大家一起探讨Criteria语句的相关知识点 案例前的准备 //插入测试数据,构建数据库 public static void insertInfo(){ //获取Session Session session=HibernateUtil.currentSession(); //开启事务 Transaction tx = session.beginTransaction(); //构建班级 G

spring框架中的依赖注入技术

计应134(实验班) 周露玲 通过Computer类和USB类之间产生的紧密耦合关系来实现依赖注入. 创建一个USB类 public interface USB //USB接口{ public void insert();//插入 public String read();//读取 public void write(String s);//写入 public void pop();//弹出} 创建一个对象(Bean),代码如下: public class UDisk implements US

Hibernate框架之HQL查询与Criteria 查询的区别

Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: /* * 查询所有房屋 * * (non-Javadoc) * @see Dao.HouseDao#selecthouse() */ public List<House> selecthouse() { // TODO Auto-generated method stub //获取连接 Sess