简介

本篇将介绍java web的内容,其实sql,xss等多数漏洞和其他的语言类似,所以不对具体的漏洞原理做分析,本文主要就是对审计关键字的提炼。学习java web具体代码程序的触发过程,不仅可以加深对漏洞的理解,如果你需要从事代码审计等工作,都会有很大的帮助。详细的代码可参考:https://github.com/JoyChou93/java-sec-code。

SQL漏洞

java产生的漏洞形式主要有两种:

  1. 和其他语言一样,通过拼接字符串导致sql

  2. 使用myhabits数据库时,用${}拼接了字符串

审计:

  1. 查看配置文件确定使用的数据库有哪些
  2. 查看所有的controller,看是存在数据库操作的动作
  3. 查看mapper,看是否使用了字符串拼接或者${}
  4. 上述都不管用的时候,直接搜select *等关键字,看具体数据库怎么操作的

XSS漏洞

这个和其他语言都一样。

审计:

  1. 查看所有的controller,看返回是否有把未过滤的字符返回给前端

命令注入

主要有下面两种两种方法

1
Runtime.getRuntime().exec(cmds);
2
new ProcessBuilder(cmds).start();

审计:

  1. 全局搜索关键字 getRuntime.exec( 和 ProcessBuilder().start

SSIT

java模板注入,主要是由两个组件velocity和freemarker产生的。

审计:

  1. 可以查看pom.xml中是否使用了上述两种组件
  2. 全局搜关键字 new VelocityContext( 和 new StringTemplateLoader(

重定向漏洞

主要有三种:

  1. redirect(@RequestParam(“url”)
  2. response.setHeader(“Location”, url);
  3. response.sendRedirect(url);

审计:

  1. 全局搜索上面三个函数 redirect(, reponse.setHeader(, response.sendRedirect

目录穿越漏洞

查看所有controller查找文件相关的操作。

审计:

  1. 查找 new File( 等关键字

SSRF漏洞

查看所有controller操作url相关的函数,查找如下一些关键字。

审计

  1. new URL(
  2. urlConnection.getInputStream(
  3. HttpURLConnection
  4. Request.Get(
  5. .openStream(

文件上传漏洞

查看所有controller有关上传操作的函数,查找如下一些关键字

审计:

  1. .getOriginalFilename(
  2. .write(
  3. new File(

XXE漏洞

java解析xml的格式比较多,整理如下关键字

审计:

  1. XMLReaderFactory.createXMLReader
  2. new SAXBuilder(
  3. new SAXReader(
  4. SAXParserFactory.newInstance(
  5. new Digester(
  6. DocumentBuilderFactory.newInstance(