JAVA代码审计之SQL注入

JAVA代码审计之SQL注入
 
  1. 三种不同框架类型的SQL
    1. JDBC--sql注入
    2. Hibernate--sql注入
    3. Mybatis、iBatis-- sql注入
  2. SQL注入手工审计方法
    1. 步骤1:全局搜索“+”,找到存在+ 拼接的sql语句,查看参数是否有过滤,一般在DAO层
    2. 追溯上层函数,直到,doPost(HttpServletRequest request,HttpServletResponse response)
    3. 查看整个流程中,有没有过滤非法字符串,如果没有,则存在sql注入
    4. 找到页面publick class LoginServlet extends HttpServlet{  doPost}
    5. 在web.xml中搜索LoginServlet,里面配置着每个servlet 的路由信息。
      1. <servlet-mapping>
        1. <servlet-name>loginServlet</servlet-name>
        2. <url-pattern>/login</url-pattern>
      2. <servlet-mapping>
    6. 在前端代码中找到login 函数被谁调用
    7. 本地调试:
      1. 运行代码,开启后端服务,在doPost函数打断点,多打几个
      2. 找到页面,当前是登录页面,点击登录,bp截取请求包,点击forword
      3. 查看代码中断点前后信息
  3. SQL注入-JDBC不安全全的
    1. statment 不能防止ssql注入
    2. “+”号直接拼接 参数(要溯源参数user对象是否有过滤)
      1. payload:
        1. USER_name1111'or'1'='1'#
        2. select * from t_user where userName = ' ''1111'or'1'='1'# " ' and password=' "1111‘
        3. # 号后面的信息都给注释掉了
    3. 修复方案,使用PreparedStatement预处理
    4. JDBC--SQL注入遇到like
      1. 预处理遇到like
        1. 111' or '%'  =’
        2. t_grade and gradeName like '%111' or '%'='%'
      2. 正确写法
        1. 遇到like的正确写法
      3. 当SQL注入--JDBC遇到in
        1. 预处理遇到in 不正确的处理方法
        2. 正确写法
          1.  
  4. Mybatis、iBatis链接方式--sql注入
    1. Mybatis直接拼接--${参数}
      1. Statmdent不能防止sql注入
      2. 使用#{}预处理
        1. PreparedStatement预处理
    2. SQL注入--Mybatis--like防注入
      1. MySQL
        1. select * from_t_user where name like contact('%',#{name},'%')
      2. Oracle
        1. select * from t_user where name like'%'||#{name}||'%'
      3. Sql Server
        1. select * from t_user where name  like '%'+#{name} +'%'
    3. SQL注入--Mybatis--in 防注入
      1.  
 
原文地址:https://www.cnblogs.com/nancyfeng/p/15404483.html