Hibernate SQL 注入

Hibernate SQL Injection

提问人:Michael Laffargue 提问时间:10/11/2013 最后编辑:Michael Laffargue 更新时间:10/18/2013 访问量:468

问:

我正在审核一个项目,我找到了一种在查询中注入数据的方法。 该项目使用 Hibernate 和这段代码,然后Session.createSqlQuery().list()

SQL是这样的:”SELECT * FROM tablename ORDER BY column XXXXXX"

XXXXXX可以使用 Fiddler 进行修改。所以我试过了

SELECT * FROM tablename ORDER BY column DESC; truncate table tablename;

不幸的是(好吧,仅适用于我的注射尝试)它不起作用,我得到:

您的 SQL 语法有错误;查看与您的MySQL服务器版本相对应的手册,了解在“truncate table tablename”附近使用的正确语法

我的问题是,既然他们使用的是createSQLQuery,那么它们是否安全。如果不是,你能给我举个例子来强调这个问题吗?

我尝试使用 %08(退格字符),以为我可以删除以前的查询字符,例如(它不起作用;) )

谢谢。


经过一番研究,我似乎无法使用此安全漏洞修改数据,但是使用将允许“扫描”表和数据。ORDER BY (CASE WHEN ...)

MySQL Hibernate SQL注入

评论

0赞 Zeus 10/12/2013
非常好的问题,看起来 HQL 和 SQL 都不能避免注入,但您可以避免它,阅读此处的文章 software-security.sans.org/developer-how-to/......

答:

0赞 cs_alumnus 10/18/2013 #1

列名是使用参数化语句指定的,还是只是连接文本?

例如:在 perl::D BI 中,驱动程序支持以下语法:

$dbh->do("SELECt * FROM asdf ORDER BY ?", undef, $order_by);

这?有一种参数化语句的形式,它会自动清理输入。

评论

0赞 cs_alumnus 10/19/2013
stackoverflow.com/questions/16807399/......stackoverflow.com/questions/4606505/...建议 JDBC 驱动程序将休眠命令视为参数化查询。我必须尝试一下才能确定。
0赞 Michael Laffargue 10/19/2013
谢谢,但您的示例指的是使用参数化查询的人,但这里并非如此。