Skip to content

Java代码审计-sqli

描述

由于服务端处理有问题可以通过过向服务器端发送恶意的SQL语句注入到服务器端的数据库查询逻辑中,改变原有的查询逻辑,从而实现类恶意读取服务器数据库数据、写一句话木马、提升权限等。

执行sql语句的几种方式

  1. JDBC
  2. Hibernate
  3. Mybatis

审计技巧

  • 使用statement对象带入数据库中查询
  • +append直接拼接
  • likeorder by等无法使用预编译的语句

  • $()拼接参数

  • 常用的sql查询关键字,如Select,insert,update,delete
  • %in

找到对应的地址后跟踪方法调用栈,最后找他的入口点即客户端传参获取地点进行分析

防御方式

  1. 强制转换,例如id之类的可以强转int
  2. 预编译,使用preparestatement、#{}等方式进行预编译
  3. order by一类无法预编译的可以白名单定死
  4. 客户端传递的参数过滤常见sql语句

参考地址:

山石JavaWeb靶场的sql注入相关页面,具体代码见com.hillstone.controller.sqli

Comments