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