java代码审计的点

组件的审计

首先看pom.xml查看第三方组件和第三方组件的版本

常用的第三方组件:

第三方组件 漏洞类型 组件漏洞版本
log4j2 远程代码执行 Apache log4j2 >= 2.0, <= 2.14.1
Fastjson 反序列化远程代码执行 Fastjson <= 1.2.80
iBatis(MyBatis) SQL注入
Struts2 命令执行
Shiro 反序列化
中间件 Tomcat,WebLogic,WebShere
Jboss,Jetty,Glassfish
..... ...

SQL注入的点

​ 对于sql注入来讲,只要是与数据库存在交互的地方,应用程序对用户的输入没有进行有效的过滤,都有可能存在SQL注入漏洞。

DAO: 存在拼接的SQL语句

  1. String sql="select * from user where id="+id

Hibernate框架

  1. session.createQuery("from Book where title like '%" + userInput + "%' and pu
  2. blished = true")

Mybatis框架

  1. Select * from news where title like ‘%${title}%’
  2. Select * from news where id in (${id}),
  3. Select * from news where title =‘java order by ${time} asc

XSS漏洞的点

​ 网站与后端交互的输入输出没有做好过滤,导致攻击者可以插入恶意js语句进行攻击。根据后端代码不同 ,大致可以分为反射型、存储型、DOM型。

​ 全局搜索用户的输入与输出,查找是否存在过滤。

XXE漏洞

​ XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

​ XML解析一般在导入配置、数据传输接口等场景会用到,xml解析器是否禁用外部实体。

全局搜索如下函数:

  1. javax.xml.parsers.DocumentBuilder
  2. javax.xml.stream.XMLStreamReader
  3. org.jdom.input.SAXBuilder
  4. org.jdom2.input.SAXBuilder
  5. javax.xml.parsers.SAXParser
  6. org.dom4j.io.SAXReader
  7. org.xml.sax.XMLReader
  8. javax.xml.transform.sax.SAXSource
  9. javax.xml.transform.TransformerFactory
  10. javax.xml.transform.sax.SAXTransformerFactory
  11. javax.xml.validation.SchemaFactory
  12. javax.xml.bind.Unmarshaller
  13. javax.xml.xpath.XPathEx

SSRF漏洞

​代码中提供了从其他服务器应用获取数据的功能但没有对目标地址做过滤与限制。

只要是能够对外发起网络请求的地方,就有可能会出现SSRF漏洞。重点查找以下函数。

  1. HttpClient.execute
  2. HttpClient.executeMethod
  3. HttpURLConnection.connect
  4. HttpURLConnection.getInputStream
  5. URL.openStream
  • new URL():构造一个url对象
  • openConnection():创建一个实例URLConncetion.
  • getInputStream():获取URL的字节流

CSRF篇

​ 跨站请求伪造是一种使已登录用户在不知情的情况下执行某种动作的攻击。因为攻击者看不到伪造请求的响应结果,所以CSRF攻击主要用来执行动作,而非窃取用户数据。当受害者是一个普通用户时,CSRF可以实现在其不知情的情况下转移用户资金、发送邮件等操作;但是如果受害者是一个具有管理员权限的用户时CSRF则可能威胁到整个Web系统的安全。

​ 一些增删改查方法,是否进行Referer头检验token检验 无法构造的随机数参数验证码密码

搜索session["token"]

XML漏洞

​ 一个用户,如果他被允许输入结构化的XML片段,则他可以在 XML 的数据域中注入 XML 标签来改写目标 XML 文档的结构与内容。

全局搜索如下字符串

  • xml
  • StreamSource
  • XMLConstants
  • StringReader
  • xmlString

在项目中搜索. Xsd 文件

任意文件操作类漏洞

​ 常见的一些java文件操作类的漏洞:任意文件的读取、下载、删除、修改,这类漏洞的成因基本相同,都是因为程序没有对文件和目录的权限进行严格控制,或者说程序没有验证请求的资源文件是否合法导致的。

全局搜索关键字或者方法

  • FileInputStream
  • getPath
  • getAbsolutePath

命令执行漏洞

服务端没有针对执行命令的函数进行过滤,导致攻击者可以提交恶意构造语句。java中常见如:Runtime.exec() Process ProcessBuilder.start

Java中的命令执行离不开调用反射的机制,在实际的场景往往离不开反序列化的利用。

  1. 服务端直接存在可执行函数(exec()等),且对传入的参数过滤不严格导致 RCE 漏洞
  2. 服务端不直接存在可执行函数(exec()等),且对传入的参数过滤不严格导致 RCE 漏洞
  3. 由表达式注入导致的RCE漏洞,常见的如:OGNLSpELMVELELFelJST+EL
  4. java后端模板引擎注入导致的 RCE 漏洞,常见的如:FreemarkerVelocityThymeleaf
  5. java一些脚本语言引起的 RCE 漏洞,常见的如:GroovyJavascriptEngine
  6. 由第三方开源组件引起的 RCE 漏洞,常见的如:FastjsonShiroXstreamStruts2weblogic

审计的时候可以重点寻找:

  • Runtime.exec()
  • Process
  • ProcessBuilder.start()

反序列化漏洞

​ 当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。

​ 反序列化操作常常出现在导入模版文件、网络通信、数据传输、日志格式化存储或者数据库存储等业务功能处,在代码审计时可重点关注一些反序列化操作函数并判断输入是否可控。

  • ObjectInputStream.readObject
  • ObjectInputStream.readUnshared
  • XMLDecoder.readObject
  • Yaml.load
  • XStream.fromXML
  • ObjectMapper.readValue
  • JSON.parseObject

中间件漏洞

  1. **中间件**是提供系统软件和应用软件之间连接的软件,它将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。容器就是中间件的一种。

​ 常见的JAVA Web中间件有:

​ Tomcat WebLogic WebShere Jboss Jetty Glasshfish

​ 直接打开pom.xml文件查看其 使用的中间件及其版本,然后到漏洞库里找漏洞即可。

业务逻辑漏洞

​ 常见的业务逻辑漏洞主要是越权,分为平行越权和垂直越权。在javaweb的各个功能点中都可能存在越权漏洞。

​ 主要原因还是因为程序没有对当前用户的权限进行严格控制,或者是后台没有判断当前用户id。

​ 在每个request.getParameter("userid");之后查看是否有检验当前用户与要进行增删改查的用户。

URL重定向漏洞

​ 接口从host头或者参数中取值,直接跳转到用户自定义的url,导致url重定向。

​ 查找sendRedirect,跳转的url是否用户可控,如果可控是否有进行过滤判断。

​ 特别是在删掉某个资源的斜杠,有可能就进行了302跳转,该处时常出现url重定向漏洞。

其他漏洞

​ java中存在的安全问题还有很多,比如ldap注入、jndi注入、rmi反序列化等

java代码审计的点的更多相关文章

  1. java代码审计中的一些常见漏洞及其特征函数

    文章来源:https://xz.aliyun.com/t/1633 最近在先知上看到之前有篇关于java代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...

  2. Java代码审计入门篇

    作者:i春秋核心白帽yanzmi 原文来自:https://bbs.ichunqiu.com/thread-42149-1-1.html 本期斗哥带来Java代码审计的一些环境和工具准备. Java这 ...

  3. java代码审计文章集合

    0x00 前言 java代码审计相关文章整理,持续更新. 0x01 java环境基础 搭建Java Web开发环境   配置IDEA编辑器开发java web,从0创建项目   IDEA动态调试   ...

  4. [代码审计]某租车系统JAVA代码审计[前台sql注入]

    0x00 前言 艰难徘徊这么久,终于迈出第一步,畏畏缩缩是阻碍大多数人前进的绊脚石,共勉. 系统是租车系统,这个系统是Adog师傅之前发在freebuf(http://www.freebuf.com/ ...

  5. Java代码审计连载之—SQL注入

    前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java ...

  6. ref:JAVA代码审计的一些Tips(附脚本)

    ref:https://xz.aliyun.com/t/1633/ JAVA代码审计的一些Tips(附脚本) 概述 本文重点介绍JAVA安全编码与代码审计基础知识,会以漏洞及安全编码示例的方式介绍JA ...

  7. Java代码审计-铁人下载系统

    初学 java 代码审计,跟着表哥们脚步,走一遍审计流程,就选了个没有使用 Java 框架的 java 系统,作为入门. 目的是为了熟悉代码审计流程,寻找漏洞的思路,入门记录. 准备工作 为了验证审计 ...

  8. 【代码审计】JAVA代码审计

    分享一些Java安全相关文章,其中大部分都涉及到代码的分析与审计. 大家总是在找Java的代码审计的文章,但好像很多人选择性失明. 其实Java没有和PHP一样的简单,所以你觉得你看到的文章不是入门级 ...

  9. Java代码审计之不安全的Java代码

    Java代码审计之不安全的Java代码 ​ 在打靶场的同时,需要想一下如果你是开发人员你会怎样去防御这种漏洞,而作为攻击方你又怎么去绕过开发人员的防御. 环境搭建 https://github.com ...

随机推荐

  1. 这就是艺术「GitHub 热点速览 v.22.25」

    作者:HelloGitHub-小鱼干 不知道写了那么久代码的你,是否还记得"代码写诗"这个词,它是用来形容代码的优雅.但是本周的项目,虽然你看到的是代码的成品,也会惊讶于它的艺术感 ...

  2. Vscode个性化设置:让一个小萌妹陪你敲代码

    前言 大家平时都用什么代码编辑器啊!我个人比较喜欢用vscode,因为有以下几点: 开源,免费: 自定义配置 集成git 智能提示强大 支持各种文件格式(html/jade/css/less/sass ...

  3. Jmter入门教程

    Jmter入门教程 本文已同步到公众号,欢迎关注: 1. 简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免 ...

  4. UiPathExcel读取操作

    一.Uipath操作Excel的相关基本概念 1.UiPath操作Excel的两组方法 App Integration > Excel   VS  System > File > W ...

  5. 项目: ATM+购物车

    ATM+购物车 项目文件: 介绍 以下为文件夹层次和内容: readme.md 1. 需求 模拟银行取款 + 购物全过程 1.注册 2.登录 3.提现 4.还款 5.转账 6.查看余额 7.查看购物车 ...

  6. 【C++】学生管理系统

    [C++]学生管理系统 一道非常经典的C语言题目,用C++实现   题目如下: 输入功能:由键盘输入10个学生的学号.姓名.三科成绩,并计算出平均成绩和总成绩,然后将它存入文件stud.dat. 插入 ...

  7. Trie 树总结

    Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...

  8. 从零开始在centos搭建博客(二)

    本篇为备份篇. 因为装的东西不多,所以需要备份的只有mysql和wordpress的文件夹. 备份mysql mysql备份命令 使用mysqldump命令,格式如下: # 这是格式 mysqldum ...

  9. 在less里面使用js函数

    .colorPaletteMixin() { @functions: ~`(function() { this.colorPalette = function() { return '123px'; ...

  10. 关于char[]数组通过scanf赋值使用上的一些问题。。

    关于char[]数组通过scanf赋值使用上的一些问题. 假如我们有这么一段代码 #include <stdio.h> int main(void){ char c1[2]; scanf( ...