java代码审计之SSM框架审计

SSM基础

Spring:

一个轻量级的DI/IOC和AOP容器的开源框架

IOC/DI(控制反转/依赖注入):将原本在程序中手动创建对象的控制权交给Spring容器。
AOP(面向切面编程):AOP将那些与业务无关,却与业务共同调用的逻辑(例如:日志,权限管理,性能统计等)封装,减少系统的重复代码,在需要时,与核心业务功能”编制”即可。

具体可看这篇-->Spring核心思想,IoC与DI、AOP详解

SpringMVC:

Spring提供的一个实现WEB MVC设计模式的WEB框架

Mybatis:

Mybatis 数据持久化框架,Mybatis属于半自动ORM框架,因为它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中,但是需要我们手动编写SQL语句。

使用方式:平常用的就是基于XML配置,将SQL语句与Java代码分离,单独的xml文件描述

Mybatis在配置SQL语句时,有两种描述参数的方式:

#{} 相当于JDBC中的PreparedStatement,预编译处理参数,可有效避免注入
${}    直接拼接sql语句,若使用不当可造成SQL注入

Mybatis的关于sql注入安全问题:

使用#{} 程序会将传入的参数都当作字符串处理,通过prepareStatement占位符传参,自动将传入的数据用单引号包裹

所以想要动态传入order by参数 只能使用字符串拼接方式,此外还有like与in查询。

LIKE 通常与 % 一同使用,类似于一个元字符的搜索。详情可看-->LIKE子句

like:
select * from user where name like '%#{name}%'
Mybatis会把%#{name}%当作要查询的参数,数据库会执行 select * from user where name like '%#{name}%'导致查询失败。
解决:使用数据库自带的CONCAT,将%与#{}连接:
select * from user where name like concat('%',#{name},'%')

in:
用Mybatis的foreach标签去解决
select * from user where id in
<foreach collection="ids" item="item" open="("separator="," close=")">#{item} </foreach>

order by 解决方案:
Java代码层做映射:当需要根据发布时间,价格等排序时,我们可以限制用户只能输入1和2。我们在代码层面将其映射为time与price。而当用户输入1和2之外的其他内容时,我们可以将其转换为对应排序

Maven:

处理模块依赖、依赖配置三坐标(groupId组织名 artifactId项目-模块名 version版本号)确定依赖jar包

Maven搜索依赖:https://mvnrepository.com/

参考:https://changhongbao.iteye.com/blog/2284472
安全:使用第三方库检查工具检查依赖

分层结构

展现层(View) 前台JSP页面的表示 控制层(Controller) 负责具体业务模块流程控制,调用下面的Service层的接口来控制业务流程 服务层(Service ) 负责业务模块的逻辑应用设计,使用Service层时,会继续调用下面Dao层的接口 持久层(Dao数据访问层 PO持久对象) 负责数据持久化,就是用来和数据库交互,读写数据模块 实体层(entity实体对象 模型层Bean)

配置文件

web.xml:(WEB项目配置文件)
    指定Spring配置文件(applicationContext.xml)
    指定前端控制器配置文件(DispatcherServlet---spring-mvc.xml)
    编码,过滤器,监听器等配置                    

application.xml/beans.xml(Spring配置文件)
    指定扫描的包(被扫到的类可以使用注解且会被放入IOC容器中)
    事务控制 连接池及JDBC配置文件

Springmvc-servlet.xml/DispatcherServlet.xml(前端控制器配置文件)
    配置了controller的注入,开启注解
    拦截器
    视图解析等

SqlMapConfig.xml/mybatis-config.xml(Mybatis配置文件)                
    环境配置
    model与mapper映射文件的位置
pom.xml
    Maven配置文件

资源属性文件:            
jdbc.properties
log4j.properties
...

主体思路

 

代码审计的核心思想就是追踪参数,而追踪参数的步骤就是程序执行的步骤,说白了代码审计就是一个跟踪程序执行步骤的一个过程,当我们知道了SSM框架的一个执行流程,自然就知道了如何如跟踪一个参数,剩下的就是去观察在参数传递的过程中有没有一些常见的漏洞点。

web.xml文件主要的工作包括两部分:1、web.xml启动spring容器;2、DispathcheServlet的声明;3、其余工作是session过期,字符串编码等

在web.xml中首先是生成DispatcherServlet类,DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点(也就是把前端请求分发到目标controller),而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

审计步骤

参考一下--->java危险函数

sql注入:

sql语句直接拼接                            
mapper(找到不合法的sql语句)->Dao层->Servic

XXE:

小声bb:xml相关的函数,一般做webservice,现在不都是rest接口了,据说以后用的越来越少。

javax.xml.parsers.DocumentBuilder
javax.xml.stream.XMLStreamReader
org.jdom.input.SAXBuilder
org.jdom2.input.SAXBuilder
javax.xml.parsers.SAXParser
org.dom4j.io.SAXReader 
org.xml.sax.XMLReader
javax.xml.transform.sax.SAXSource 
javax.xml.transform.TransformerFactory 
javax.xml.transform.sax.SAXTransformerFactory 
javax.xml.validation.SchemaFactory
javax.xml.bind.Unmarshaller
javax.xml.xpath.XPathExpression

反序列化:

ObjectInputStream.readObject
ObjectInputStream.readUnshared
XMLDecoder.readObject
Yaml.load
XStream.fromXML
ObjectMapper.readValue
JSON.parseObject
...

SSRF:

小声bb:这块用的多,很多工具类在这上面封装

Httpclient算是最基础的调用http接口的工具类,这一块都是调用http请求的

HttpClient.execute
HttpClient.executeMethod
HttpURLConnection.connect
HttpURLConnection.getInputStream
URL.openStream
...

URL跳转:

sendRedirect
setHeader
forward
...

命令执行:

小声bb:接口相关?

Runtime.exec
ProcessBuilder.start
GroovyShell.evaluate
...

权限控制:

文件操作:

filename
MultipartFile
FileOutputStream
FileInputStream

参考链接:

Java框架级SSM代码审计思路

SSM框架审计

相关文章:

https://www.freebuf.com/vuls/237474.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值