常见框架与组合
常见框架
Struts2
SpringMVC
Spring Boot
框架执行流程
View层:视图层
Controller层:表现层
Service层:业务层
Dom层:持久层
常见组合
Spring+Struts2+Hibernate
Spring+SpringMVC+Mybatis
Spring Boot+Mybatis
代码审计方法
根据业务功能审计
优点:明确程序的架构以及业务逻辑,明确数据流向,可以从获取参数-->表现层-->业务层-->持久层,通读源码;
缺点:耗费时间;
根据敏感函数审计
优点:可以快速高效的挖出想要的漏洞,判断敏感函数上下文,追踪参数源头;
缺点:覆盖不了逻辑漏洞,不了解程序的基本框架;
审计流程
1、确定框架;
通过以下三种方式确定框架:
web.xml
看导入的jar包或pom.xml
看配置文件
Struts2 配置文件:struts.xml
Spring 配置文件:applicationContext.xml
Spring MVC 配置文件:spring-mvc.xml
Hibernate 配置文件:Hibernate.cfg.xml
Mybaits 配置文件:mybatis-config.xml
2、查看是否存在拦截器
通过查看web.xml文件,确定是否配置相关拦截器。
命令执行函数
GroovyShell.evaluate()
Runtime.getRuntime().exec()
ProcessBuilder().start()
文件上传函数
ServletFileUpload()
FileItemStream()
MultipartFile()
SSRF函数
在Java中分为两类:一类只支持http,https协议,如HttpURLConnection、HttpClient、Request、okhttp;一类支持所有协议,如URLConnection、URL。
HttpURLConnection.getInputStream()
URLConnection.getInputStream()
Request.Get.execute()
Request.Post.execute()
URL.openStream()
ImageIO.read()
OkHttpClient.newCall.execute()
HttpClents.execute()
HttpClent.execute()
CORS跨域漏洞
CORS跨域设置:
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Credentials","true");
或者
@CrossOrigin("*")
Jsonp劫持
jsonp跨域设置
response.setHeader("Access-Control-Allow-Origin","*");
callback
反序列化
readObject
杂项
out
XSS漏洞
当out.print("");可控的时候,就会导致XSS漏洞。
requests
response
session
session失效时间问题
session.setMaxInactiveInterval();
用户退出,session未销毁问题
session.invalidate(); //销毁Web应用所有的session
session.removeAttribute(); //移除指定session
application
pageContent