• Java代码审计安全篇-常见Java SQL注入


    前言:

            堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油

    注意:

    本文章参考qax的网络安全java代码审计,记录自己的学习过程,还希望各位博主 师傅 大佬 勿喷,还希望大家指出错误

    1.SQL语句参数直接动态拼接

    常见的的执行语句为Statement执行SQL语句

    例如下面这段代码:

    1. <% //驱动程序名
    2. String driverName = "com.mysql.jdbc.Driver";
    3. //数据库用户名
    4. String userName = "root";
    5. //密码
    6. String userPasswd = "root";
    7. //数据库名
    8. String dbName = "javasqltest";
    9. //表名
    10. String ID = '1'
    11. //联结字符串
    12. String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="
    13. + userName + "&password=" + userPasswd;
    14. Class.forName("com.mysql.jdbc.Driver").newInstance();
    15. Connection connection = DriverManager.getConnection(url);
    16. Statement statement = connection.createStatement();
    17. String sql = "SELECT * FROM people where id = " +ID ;
    18. ResultSet rs = statement.executeQuery(sql);
    19. %>

     打印出来的结果如图下所示

    数据库数据:

     

    我们发现 像这种情况就是由SQL语句参数直接动态拼接成的,这样的话参数ID可控并且可以执行sql语句的拼接,存在明显的SQL注入漏洞

    String sql = "SELECT * FROM  people where id = " +ID ;  

    我们测试验证 一下 传入参数为  

    1 and 1= 1

     

    果然存在漏洞,这样就有个严重 的问题 当输入1 or 1 = 1就会打印所有的表的数据 ,造成数据泄露

     1 or 1=1
     修复:

    预编译处理

    哈哈 ,先写到这里 ,剩下的明天在更新 加油啊 

     

     

  • 相关阅读:
    最新日本IT在留资格认定你需要知道的
    教授先生带你学习并查集
    成为一个优秀的测试工程师需要具备哪些知识和经验?
    springboot+vue实现登录案例(附VUE整个项目代码)
    windows安装pytorch
    【JAVA】关于接口你又了解多少呢?
    一种基于最大相关熵和局部约束的协同表示分类器
    第 42 章 RTC—实时时钟
    海康的资料
    注入之SQLMAP(工具注入)
  • 原文地址:https://blog.csdn.net/m0_63138919/article/details/136490736