【问题标题】:Hibernate SQL Injection休眠 SQL 注入
【发布时间】:2013-10-19 18:11:52
【问题描述】:

我正在审核一个项目,并找到了一种在查询中注入数据的方法。 该项目使用 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 服务器版本相对应的手册,了解在“截断表表名”附近使用的正确语法

我的问题是,既然他们使用的是 createSQLQuery,他们是否可以安全地免于注入。如果不是,你能给我举个例子来突出这个问题吗?

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

谢谢。


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

【问题讨论】:

标签: mysql hibernate sql-injection


【解决方案1】:

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

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

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

那个?有一种形式的参数化语句可以自动清理输入。

【讨论】:

猜你喜欢
  • 2017-07-26
  • 1970-01-01
  • 2013-05-24
  • 2020-03-24
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多