【发布时间】: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 ...) 将允许“扫描”表和数据。
【问题讨论】:
-
很好的问题,看起来 HQL 和 SQL 都不能安全地被注入,但是你可以避免它,阅读这里的文章 software-security.sans.org/developer-how-to/…
标签: mysql hibernate sql-injection