我正在审核一个项目,发现可以在查询中注入数据。该项目使用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 ...)
可以“扫描”表和数据。