Java代码审计-sqli
描述
由于服务端处理有问题可以通过过向服务器端发送恶意的SQL语句注入到服务器端的数据库查询逻辑中,改变原有的查询逻辑,从而实现类恶意读取服务器数据库数据、写一句话木马、提升权限等。
执行sql语句的几种方式
- JDBC
- Hibernate
- Mybatis
审计技巧
- 使用
statement
对象带入数据库中查询 +
、append
直接拼接-
like
、order by
等无法使用预编译的语句 -
$()
拼接参数 - 常用的sql查询关键字,如
Select
,insert
,update
,delete
%
、in
等
找到对应的地址后跟踪方法调用栈,最后找他的入口点即客户端传参获取地点进行分析
防御方式
- 强制转换,例如id之类的可以强转int
- 预编译,使用preparestatement、#{}等方式进行预编译
- order by一类无法预编译的可以白名单定死
- 客户端传递的参数过滤常见sql语句
参考地址:
山石JavaWeb靶场的sql注入相关页面,具体代码见com.hillstone.controller.sqli