提问人:Michael Laffargue 提问时间:10/11/2013 最后编辑:Michael Laffargue 更新时间:10/18/2013 访问量:468
Hibernate SQL 注入
Hibernate SQL Injection
问:
我正在审核一个项目,我找到了一种在查询中注入数据的方法。
该项目使用 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 ...)
答:
0赞
cs_alumnus
10/18/2013
#1
列名是使用参数化语句指定的,还是只是连接文本?
例如:在 perl::D BI 中,驱动程序支持以下语法:
$dbh->do("SELECt * FROM asdf ORDER BY ?", undef, $order_by);
这?有一种参数化语句的形式,它会自动清理输入。
评论
0赞
cs_alumnus
10/19/2013
stackoverflow.com/questions/16807399/......stackoverflow.com/questions/4606505/...建议 JDBC 驱动程序将休眠命令视为参数化查询。我必须尝试一下才能确定。
0赞
Michael Laffargue
10/19/2013
谢谢,但您的示例指的是使用参数化查询的人,但这里并非如此。
评论