当前位置: 首页 > news >正文

java代码审计的点

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语句

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

Hibernate框架

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

Mybatis框架

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

XSS漏洞的点

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

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

XXE漏洞

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

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

全局搜索如下函数:

javax.xml.parsers.DocumentBuilder
javax.xml.stream.XMLStreamReader
org.jdom.input.SAXBuilder
org.jdom2.input.SAXBuilder
javax.xml.parsers.SAXParser
org.dom4j.io.SAXReader 
org.xml.sax.XMLReader
javax.xml.transform.sax.SAXSource 
javax.xml.transform.TransformerFactory 
javax.xml.transform.sax.SAXTransformerFactory 
javax.xml.validation.SchemaFactory
javax.xml.bind.Unmarshaller
javax.xml.xpath.XPathEx

SSRF漏洞

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

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

HttpClient.execute
HttpClient.executeMethod
HttpURLConnection.connect
HttpURLConnection.getInputStream
URL.openStream
new URL()
openConnection()
getInputStream()

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中的命令执行离不开调用反射的机制,在实际的场景往往离不开反序列化的利用。

服务端直接存在可执行函数(exec()等),且对传入的参数过滤不严格导致 RCE 漏洞
服务端不直接存在可执行函数(exec()等),且对传入的参数过滤不严格导致 RCE 漏洞
由表达式注入导致的RCE漏洞,常见的如:OGNL、SpEL、MVEL、EL、Fel、JST+EL等
由java后端模板引擎注入导致的 RCE 漏洞,常见的如:Freemarker、Velocity、Thymeleaf等
由java一些脚本语言引起的 RCE 漏洞,常见的如:Groovy、JavascriptEngine等
由第三方开源组件引起的 RCE 漏洞,常见的如:Fastjson、Shiro、Xstream、Struts2、weblogic等

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

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

反序列化漏洞

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

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

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

中间件漏洞

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

​ 常见的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反序列化等

相关文章:

  • alsa-lib和alsa-utils移植
  • SAP 电商云 Spartacus 服务器端渲染的单步调试详细步骤
  • 尚硅谷Vue系列教程学习笔记(12)
  • Flutter 高级教程之如何开发iOS Widget小组件展示SQLite本地数据库数据(教程含完整源码)
  • 5大指标:评估RPA项目的ROI,实现投资回报最大化
  • 神经网络模型的基本原理,神经网络模型是干嘛的
  • 猿创征文|【vue3学习】vue3中实现深拷贝
  • TiUP 镜像参考指南
  • 鹏城AI靶场助力大规模高质量中文语料数据集安全开放
  • 安装node, 配置npm全局安装位置,安装Vue.
  • 神经网络理论及应用答案,神经网络理论名词解释
  • 国产香氛品牌别样的生意经
  • Java-基于SSM的健身后台管理系统
  • 【CCIE 实验】BGP 13条选路原则实验
  • 购买发票自动化软件(或者文档管理系统)需要注意的问题
  • 2017 年终总结 —— 在路上
  • AHK 中 = 和 == 等比较运算符的用法
  • CSS居中完全指南——构建CSS居中决策树
  • Fundebug计费标准解释:事件数是如何定义的?
  • scrapy学习之路4(itemloder的使用)
  • spring cloud gateway 源码解析(4)跨域问题处理
  • spring security oauth2 password授权模式
  • ViewService——一种保证客户端与服务端同步的方法
  • 动态魔术使用DBMS_SQL
  • 记一次用 NodeJs 实现模拟登录的思路
  • 力扣(LeetCode)357
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • "无招胜有招"nbsp;史上最全的互…
  • #Linux(帮助手册)
  • (1)SpringCloud 整合Python
  • (1)常见O(n^2)排序算法解析
  • (10)STL算法之搜索(二) 二分查找
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4)logging(日志模块)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十)T检验-第一部分
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net6Api后台+uniapp导出Excel
  • .Net多线程总结
  • /etc/motd and /etc/issue
  • [1127]图形打印 sdutOJ
  • [1181]linux两台服务器之间传输文件和文件夹
  • [AX]AX2012 R2 出差申请和支出报告
  • [bzoj 3534][Sdoi2014] 重建
  • [BZOJ3223]文艺平衡树