3

我正在审核一个项目,并找到了一种在查询中注入数据的方法。该项目使用 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 ...)将允许“扫描”表和数据。

4

1 回答 1

0

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

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

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

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

于 2013-10-18T05:20:33.527 回答