Java Web代码审计流程与漏洞函数

常见框架与组合

常见框架

  • Struts2
  • SpringMVC
  • Spring Boot

框架执行流程

  1. View层:视图层
  2. Controller层:表现层
  3. Service层:业务层
  4. 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

原文地址:https://www.cnblogs.com/endust/p/12081817.html