Java
文章:https://mp.weixin.qq.com/s/jJ3iBNUnFFJOgJnf5mJ6TQ
1.正向跟踪
从数据层查找变量,一级一级调用,最后到控制器,这种相对简单、快速。
2.逆向思维,追踪变量,对象调用
查找变量,有没有传参数,是谁调用了这个变量,又是谁调用了这个方法,先从控制器找变量,然后逆着找方法,调用关系,最后到 DAO 层数据。这种方法一般比较浪费时间,跟踪到最后可能发现变量不可控。
3.直接挖掘漏洞点
比如搭建后,访问平台,发现有上传的功能,直接去控制器找上传相关代码,进行审计。
4.通读全文代码
这是最纯粹、最直接的方式。但是可能会遇到一个问题——看不懂代码。
怎么解决?这个我也不知道,我也看不懂……
关键字追踪
SQL 注入
大多数 JavaEE 网站,用的相对多的是 SpringMVC 架构,那么用到的 Mybatis 框架就会比较多,所以搜索 SQL 关键字就是"${}“优先,其次是以下的关键字。
如果是 SpringBoot ,可能会使用注解等方式,如:
|
|
以上语句写了”?",则代表是预编译语句,就不会产生注入,如果写的是变量,就可能产生注入了。
|
|
文件上传
在文件上传功能中,先看框架——比如 Spring 框架,默认不会解析 jsp 文件。然后看代码有没有定义黑名单数组等等。
|
|
xss
|
|
目录遍历
|
|
xml 注入类似 xxe
|
|
命令执行
|
|
序列化
|
|
任意文件删除
|
|
逻辑漏洞没什么关键字,可以去看 User 控制器,或者看过滤器,寻找有无校验。
MVC 模式讲解
MVC 是一种软件框架模式,广泛应用在 JavaEE 项目的开发中
MVC 即模型(Model)、视图(View)、控制器(Controller)。
模型(Model)
模型是用于处理数据逻辑的部分。
所谓数据逻辑,也就是数据的映射以及对数据的增删改查,Bean、DAO(dataaccess object,数据访问对象)等都属于模型部分。
视图(View)
视图负责数据与其它信息的显示,也就是给用户看到的页面。 HTML、JSP 等页面都可以作为视图。
控制器(Controller)
控制器是模型与视图之间的桥梁,控制着数据与用户的交互。
控制器通常负责从视图读取数据,处理用户输入,并向模型发送数据,也可以从模型中读取数据,再发送给视图,由视图显示。
项目结构
首先要了解项目整体结构。大致了解作者编写逻辑,搞清请求流程。
src/main 下面有两个目录,分别是 java 和 resources,java 目录中主要存放的是 java 代码,resources 目录中主要存放的是资源文件,比如:html、js、css 等。
在 Java 目录下还有其他一些常见目录,具体含义整理如下:
/java 目录下
annotation:放置项目自定义注解;
controller/: 存放控制器,接收从前端传来的参数,对访问控制进行转发、各类基本参数校验或者不复用的业务简单处理等;
dao/: 数据访问层,与数据库进行交互,负责数据库操作,在 Mybaits 框架中存放自定义的 Mapper 接口;
entity/: 存放实体类;
interceptor/: 拦截器;
service/:存放服务类,负责业务模块逻辑处理。Service 层中有两种类,一是 Service,用来声明接口;二是 ServiceImpl,作为实现类实现接口中的方法;
utils/: 存放工具类;
dto/: 存放数据传输对象(DataTransfer Object),如请求参数和返回结果;
vo/: 视图对象(ViewObject)用于封装客户端请求的数据,防止部分数据泄漏,保证数据安全
constant/: 存放常量;
filter/: 存放过滤器。
/resources 目录下
mapper/:存放 Mybaits 的 mapper.xml 文件;
static/:存放静态资源文件目录(Javascript、CSS、图片等),在这个目录中的所有文件可以被直接访问;
templates/: 存放模版文件;
application.properties 或 application.yml:Spring Boot:默认配置文件。
代码跟踪流程
用户请求 URL 发送到服务器,服务器解析请求后发送到后端代码处理请求。
在后端代码处,首先经过 Filter(过滤器)和 Interceptor(拦截器),然后根据请求的 URL 映射到绑定的 Controller,之后调用 Service 接口类,然后再调用 serviceImpl 接口实现类,最后调用 DAO。
controller:负责简单的逻辑处理和参数校验功能,之后调用 Service;
service:接口类,主要负责业务模块逻辑处理;
serviceImpl:接口实现类,实现类实现 service 接口中的方法;
DAO:如果 service 涉及数据库操作就会调用 DAO。DAO 主要处理数据库操作。DAO 只做中间传递角色,