简介
本篇将介绍java web的内容,其实sql,xss等多数漏洞和其他的语言类似,所以不对具体的漏洞原理做分析,本文主要就是对审计关键字的提炼。学习java web具体代码程序的触发过程,不仅可以加深对漏洞的理解,如果你需要从事代码审计等工作,都会有很大的帮助。详细的代码可参考:https://github.com/JoyChou93/java-sec-code。
SQL漏洞
java产生的漏洞形式主要有两种:
和其他语言一样,通过拼接字符串导致sql
使用myhabits数据库时,用${}拼接了字符串
审计:
- 查看配置文件确定使用的数据库有哪些
- 查看所有的controller,看是存在数据库操作的动作
- 查看mapper,看是否使用了字符串拼接或者${}
- 上述都不管用的时候,直接搜select *等关键字,看具体数据库怎么操作的
XSS漏洞
这个和其他语言都一样。
审计:
- 查看所有的controller,看返回是否有把未过滤的字符返回给前端
命令注入
主要有下面两种两种方法
1 | Runtime.getRuntime().exec(cmds); |
2 | new ProcessBuilder(cmds).start(); |
审计:
- 全局搜索关键字 getRuntime.exec( 和 ProcessBuilder().start
SSIT
java模板注入,主要是由两个组件velocity和freemarker产生的。
审计:
- 可以查看pom.xml中是否使用了上述两种组件
- 全局搜关键字 new VelocityContext( 和 new StringTemplateLoader(
重定向漏洞
主要有三种:
- redirect(@RequestParam(“url”)
- response.setHeader(“Location”, url);
- response.sendRedirect(url);
审计:
- 全局搜索上面三个函数 redirect(, reponse.setHeader(, response.sendRedirect
目录穿越漏洞
查看所有controller查找文件相关的操作。
审计:
- 查找 new File( 等关键字
SSRF漏洞
查看所有controller操作url相关的函数,查找如下一些关键字。
审计:
- new URL(
- urlConnection.getInputStream(
- HttpURLConnection
- Request.Get(
- .openStream(
文件上传漏洞
查看所有controller有关上传操作的函数,查找如下一些关键字
审计:
- .getOriginalFilename(
- .write(
- new File(
XXE漏洞
java解析xml的格式比较多,整理如下关键字
审计:
- XMLReaderFactory.createXMLReader
- new SAXBuilder(
- new SAXReader(
- SAXParserFactory.newInstance(
- new Digester(
- DocumentBuilderFactory.newInstance(