51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

java源代码安全之SQL注入漏洞

首先JAVA中的类方法不像php的函数中有那么多的漏洞。

java源代码安全文章主要是总结一下,学习一下,希望大家多多指教。

Java源代码安全系列文章,将从java本身的函数和三大主流框架的角度去对项目中的类、方法、参数可能存在的漏洞进行实现,方便代码审计中的学习,结合一些半自动化审计工具,发现项目中的安全问题,给出一些关键字方便审计时的直接定位。

MVC请参考我园长师傅的:http://drops.wooyun.org/tips/347
JavaWeb安全系列:http://drops.wooyun.org/author/%E5%9B%AD%E9%95%BF

小弟不才,有建议大家多提一下,多多学习。

在框架和jdk中有很多的SQL查询实现类,拼接查询、占位符查询、参数化绑定查询很多,但是目前大多数框架已尽采用了占位符查询(为了安全同时也为了性能的提升),但是依然有一些开发人员在框架中使用拼接查询,造成了安全问题的产生,给公司带来不可避免的损失。

JAVA JDK中的Statement和PreparedStatement

java.sql.Statement 拼接查询 java.sql.PreparedStatement 预编译查询 java.sql.Connection.prepareCall 调用存储过程 ( 不尽兴过多描述)

1、Statement查询

图片 1.png
图片 1.png


图片 2.png
图片 2.png


图片 3.png
图片 3.png


2、PreparedStatement查询

图片 4.png
图片 4.png


图片 5.png
图片 5.png


Spring框架中JDBC查询

org.springframework.jdbc.core.JdbcTemplate jdbc模版类

在Spring框架中有很多的数据库实现类,比如:org.springframework.jdbc.core.JdbcOperations、org.springframework.jdbc.core.PreparedStatementCreatorFactory、org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate、org.springframework.jdbc.core.simple.SimpleJdbcTemplat等等,于是我们只需要去找到实现数据库会话类,通过查询哪些类调用了数据库查询会话类即可。

因为Spring Jdbc中涉及到大量的sql查询类,不一一进行描述说明,大部分还是依赖JdbcTemplate,但是我们一定要知道JdbcTemplate类内部还是根据DataSourceUtils来获取数据库连接的。

图片 6.png
图片 6.png


图片 7.png
图片 7.png


图片 8.png
图片 8.png


Hibernate框架

org.hibernate.SessionFactory 工厂类实例,用来创建Session org.hibernate.Session 查询的Session,一个数据库会话 org.hibernate.Query 查询语句类

图片 9.png
图片 9.png


图片 10.png
图片 10.png


图片 11.png
图片 11.png


避免的标准格式有很多,当我们看到这些方式可以绕过,不排除有二次查询漏洞的产生。
1、参数绑定方式查询
2 、占位符方式查询
3、setParameter()方法
4、setProperties()方法(根占位符区别不大)

在审计过程中我们完全可以依赖Eclipse Search功能来进行定位或搜索我们需要的类、方法或常量变量

图片 12.png
图片 12.png


赞(1)
未经允许不得转载:工具盒子 » java源代码安全之SQL注入漏洞