Java常见漏洞——整数溢出漏洞、硬编码密码漏洞、不安全的随机数生成器

news2025/1/17 22:11:06

目录

前言:

(一)整数溢出漏洞

0x01 整数溢出漏洞介绍

1.1  上界溢出

1.2 下界溢出

0x02 整数溢出漏洞修复

(二)硬编码密码漏洞

修复案例:

(三)不安全的随机数生成器


前言:

        本次总结的漏洞在实战情况下,可能只是一个环节,包括我们经常遇到的WAF绕过,技术偏逆向破解,但是在web渗透测试中有一定的利用价值。

(一)整数溢出漏洞


        计算机程序中的整数都是有范围的,不同的数据类型范围也不同,这是由编译器决定的,超过这个范围就有可能会出现整数溢出的情况。
        比如说Java 的 int 32 位有符号整数类型,其最大值是 0x7fffffff ,最小值是0x80000000,即 int 表示的数的范围是在- 2147483648 2147483647 之间。当 int 类型的运算结果超出了这个范围时则发生了溢出,而且不会有任何异常抛出。整数溢出一般可以分为上界溢出和下界溢出两种。

0x01 整数溢出漏洞介绍


1.1  上界溢出

      int 类型二进制存储的第一位为符号位,0 表示正数, 1 表示负数, 2147483647 这个数字的二进制表达为 01111111 11111111 11111111 11111111 ,加 1 以后的值为 10000000
00000000 00000000 00000000 ,发生上界溢出,而 10000000 00000000 00000000 00000000 表示的是-2147483648 这个数字

1.2 下界溢出

        int 类型二进制存储的第一位为符号位, 0 表示正数, 1 表示负数, -2147483648 这个
数字的二进制表达为 10000000 00000000 00000000 00000000 ,减 1 以后的值为 01111111
11111111 11111111 11111111 ,发生下界溢出,而 01111111 11111111 11111111 11111111 表示
的是 2147483647 这个数字。 Java 程序溢出运行的案例如图 1-1  所示:

1  

图 1-1  Java 程序溢出运行的案例

0x02 整数溢出漏洞修复


Java 8 版本中,可以使用新的 Math#addExact() and Math#subtractExact()”方法,该方法将监测“ ArithmeticException ”溢出
public static boolean willAdditionOverflow(int left, int right) { 
     try { 
             Math.addExact(left, right); 
             return false; 
         } catch (ArithmeticException e) { 
         return true; 
         } 
    } 
public static boolean willSubtractionOverflow(int left, int right) { 
     try { 
             Math.subtractExact(left, right); 
             return false; 
         } catch (ArithmeticException e) { 
             return true; 
         } 
}

(二)硬编码密码漏洞


硬编码密码是指在系统中采用明文的形式存储密码,通常会导致严重的身份验证失败,这对于系统管理员而言可能很难检测到,一旦检测到,也很难修复。硬编码密码会造成密码泄露,其主要出现在以下几个方面
  1. 开发人员的安全意识不强:将代码托管到 github 等互联网平台,可能会造成源代码泄露,任何有该代码权限的人都能读取此密码。
  2. 程序员可以简单地将后端凭证硬编码前端软件中:该程序的任何用户都可以提取密码。因为从二进制文件中提取密码非常简单,所以会对带有硬编码密码的客户端系统构成很大的威胁。
         以下代码是使用硬编码的密码连接到数据库的示例:
DriverManager.getConnection(url,"scott","tiger");
        攻击者可以通过 javap –c 命令来访问反汇编的代码,反汇编的代码将包含所使用的密码值。

javap -c ConnMngr.class 
22: ldc #36; //String jdbc:mysql://ixne.com/rxsql 
24: ldc #38; //String scott 
26: ldc #17; //String tiger
        程序员在编写程序时应尽量避免对密码进行硬编码,而采用对密码加以模糊化或先经过 hash 处理再存储,或在外部资源文件中进行处理的方法。

修复案例:

        在上述修复代码中,首先将数据库连接的用户名密码加密放入 db.properties 文件中,如图 1-2  所示

 

图 1-2 用户名密码先加密放入 db.properties 文件中
      
     然后通过代码读取数据库配置文件,最后进行数据库的连接,这样就避免了硬编码产生的漏洞。
        示例:读取 properties 属性文件到输入流中,从输入流中加载属性列表,获取数据库连接属性值,然后进行数据库连接,这样就不会出现硬编码漏洞了。

// 读取 properties 属性文件到输入流中
InputStream is = PropertiesTest.class.getResourceAsStream("/db.properties"); 
// 从输入流中加载属性列表
properties.load(is); 
// 获取数据库连接属性值
DRIVER_CLASS = properties.getProperty("DRIVER_CLASS"); 
DB_URL = properties.getProperty("DB_URL"); 
DB_USER = properties.getProperty("DB_USER"); 
DB_PASSWORD = properties.getProperty("DB_PASSWORD"); 
// 加载数据库驱动类
Class.forName(DRIVER_CLASS);

(三)不安全的随机数生成器


随机数是专门的随机试验的结果。产生随机数有多种不同的方法,这些方法被称为随机数发生器。随机数最重要的特性是:它所产生的后面的那个数与前面的那个数毫无关系。根据密码学原理,随机数生成器分为以下三类。
  1. 统计学伪随机数生成器(PRNG):伪随机数生成器从一个初始化的种子值开始计算得到序列,从种子开始,然后从种子中计算出后续值,当种子确定后生成的随机数也是确定的,但其输出结果很容易预测,因此容易复制数值流。
  2. 密码学安全随机数生成器(CSPRNG):密码学安全伪随机性是统计学伪随机数生成器的一个特例,给定随机样本的一部分和随机算法,不能有效地演算出随机样本的剩余部分。
  3. 真随机数生成器:其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在。可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),则可以认为用这个方法演算出来了真随机数。

        使用计算机产生真随机数的方法是获取 CPU 频率与温度的不确定性,以及统计一段时间内的运算次数每次都会产生不同的值,系统时间的误差以及声卡的底噪等。在实际应用中往往使用伪随机数就足够了。计算机或计算器产生的随机数有很长的周期性。实际上它们不真正地随机,因为它们是可以计算出来的,但是它们具有类似于随机数的统计特征。这样的发生器称为伪随机数发器

        Java 中的“ java.util.Random ”工具类 LCG 线性同余法伪随机数生成器,可以根据种子和算法生成随机数。此算法的缺陷就是可预测性,攻击者可能会猜测将要生成的下一个值,并使用此猜测来模拟其他用户或访问敏感信息。“java.util.Random ”工具类没带参数构造函数生成的 Random 对象的种子默认是当前系统时间的毫秒数,故进入到 Random 类中查看其种子默认是当前的系统时间,如图 3-1  所示。
图 3-1 进入 Random 类中查看其种子默认是当前的系统时间
Random 函数的使用方式:
Random random = new Random(); 
int r = random.nextInt(); // 生成一个随机数

 只要种子一样,其输出的随机序列也是一样的,如设置两个随机数列种子都是 1,则输出的随机数列也是完全相同的,如图 3-2 所示。

图 3-2 随机数列种子一样,其输出的随机序列也一样

 

        “java.util.Random ”不是加密安全的。可以使用 SecureRandom 来获取密码安全的伪随机数生成器,以供对安全敏感的应用程序使用。“java.Security.SecureRandom ”工具类提供加密的强随机数生成器(RNG) ,要求种子必须是不可预知的,产生非确定性输出。操作系统收集了一些随机事件,比如鼠标点击、键盘点击,等等。SecureRandom 使用这些随机事件作为种子。SecureRandom 函数的使用方式:
SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG"); 
int r = secureRandom2.nextInt(); // 生成一个随机数
使用 SecureRandom 生成伪随机,因为 SecureRandom 使用鼠标点击、键盘点击等等这些随机事件作为种子,故其生成的随机数列完全不同,安全性要高,所以建议使用
java.Security.SecureRandom 工具类来代替“ java.util.Random ”工具类,如图 3 -3  所示。
图 3-3 使用 java.Security.SecureRandom 工具类生成随机数序列

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1、Shell 概述

文章目录1、Shell 概述1.1 Linux 提供的 Shell 解析器有1.2 bash 和 sh 的关系1.3 Centos 默认的解析器是 bash尚硅谷2022版Linux扩展篇Shell教程-讲师:武晟然 壁立千仞 无欲则刚 1、Shell 概述 硬件–>操作系统核心(Linux内核)–>解释…

ubuntu2004 有线与另一个Ubuntu系统通信

在Ubuntu2004(从机)打开一个终端,输入如下配置有线网络ip,其中eth0 为有线网络的名称,up使能有线网络eth0: ifconfig eth0 192.169.10.2 up 并在.bashrc文件中输入 export ROS_MASTER_URIhttp://192.169.10.1:11311 …

Java多线程之线程池

Java高并发应用开发过程中会频繁的创建和销毁线程,为了节约成本和提升性能,往往会使用线程池来统一管理线程,使用线程池主要有以下几点优势 降低资源消耗:重复利用已创建的线程降低线程创建和销毁造成的消耗 提高响应速度&#xf…

ImageNet classification with deep convolutional neural networks

使用深度卷积神经网络进行ImageNet图像分类 目录 1.引言 2.网络结构 2.1 小细节 2.2 代码部分 3. 创新点 3.1 非线性激活函数ReLU(提速) 3.2 多GPU训练(提速) 3.3局部响应归一化(增强泛化能力,已不…

我国天宫空间站以及各个仓位介绍

一、天宫空间站 天宫空间站(China Space Station)是中国从2021年开始建设的一个模块化空间站系统,为人类自1986年的和平号空间站及1998年的国际空间站后所建造的第三座大型在轨空间实验平台,基本构型由天和核心舱、问天实验舱和梦…

Head First设计模式(阅读笔记)-07.适配器模式

火鸡冒充鸭子 现在缺少一个绿头鸭对象,需要用野生火鸡对象冒充一下,但是二者的接口都不一样该怎么去冒充呢? // 鸭子接口 public interface Duck{public void quack(); // 呱呱叫public void fly(); // 飞行 } // 火鸡接口 public interfac…

应力奇异,你是一个神奇的应力!

在用ANSYS进行压力容器应力分析计算的时候,总会出现一些应力集中的问题,而且,有些应力集中点竟然没办法采用倒圆角的办法消除,采用网格加密方法时,甚至应力值比之前更大。这个情况,大家通常称为应力奇异。 …

springboot-mybatisplus-redis二级缓存

前言 mybatis可以自己带有二级缓存的实现&#xff0c;这里加上redis是想把东西缓存到redis中&#xff0c;而不是mybaits自带的map中。这也就构成了我们看到的springboot mybatisplus redis实现二级缓存的题目。 具体步骤如下&#xff1a; 首先加入需要的依赖 <dependenc…

《InnoDB引擎六》InnoDB 1.0.x版本之前的Master Thread

Master Thread 工作方式 在后台线程中提到&#xff0c;Master Thread是核心的后台线程。InnoDB存储引擎的主要工作都是在一个单独线程中完成的。 InnoDB 1.0.x版本之前的Master Thread Master Thread具有最高的线程优先级别。内部由多个循环组成&#xff1a;主循环(loop)、后台…

[附源码]SSM计算机毕业设计医院仪器设备管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于萤火虫算法优化的BP神经网络预测模型(Matlab代码实现)

目录 1 概述 2 萤火虫算法 3 萤火虫算法优化BP神经网络的算法设计 3.1 基本思想 3.2 萤火虫算法优化BP神经网络算法 4 运行结果 5 参考文献 6 Matlab代码及文章 1 概述 现实的世界中混沌现象无处不在,大至宇宙,小到基本粒子,都受到混沌理论支配.如气候变化会出 现混沌…

(三)DepthAI-python相关接口:OAK Nodes

消息快播&#xff1a;OpenCV众筹了一款ROS2机器人rae&#xff0c;开源、功能强、上手简单。来瞅瞅~ 编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查…

[MySQL]-压力测试_TPCC-MySQL

[MySQL]-压力测试_TPCC-MySQL 森格 | 2022年10月 对数据库学习来说&#xff0c;压力测试也是十分必要的一环&#xff0c;本文章主要介绍了TPCC-MySQL这个工具的使用。 一、基本概念 1.1 基准测试VS压力测试 基准测试&#xff1a; 直接简单、易于比较&#xff0c;用于评估服务…

CAD必练图形

这次我们用CAD梦想画图软件绘制一个CAD新手必练图形&#xff0c;它用到的有CAD矩形、直线、圆弧、等分等命令结合起来完成绘制的&#xff0c;可以跟着一起操作一下。 目标图形 操作步骤 1.使用CAD矩形命令&#xff08;快捷键&#xff1a;REC&#xff09;绘制一个长80宽30的矩…

为什么macbook不能删除u盘里东西?苹果电脑如何删除u盘文件

为什么macbook不能删除u盘里东西&#xff1f;有时候&#xff0c;我们会发现U盘不能够在Mac上正常使用&#xff0c;只能够读取U盘上的文件数据&#xff0c;但是若想要对其进行删除或者是编辑操作&#xff0c;完全不能够实现&#xff0c;本文为大家详细介绍了不同情况的不同解决方…

云原生主题学习月|共同学习全球领先的亚马逊云科技云原生课程,组团共学拿奖励~

CSDN 已上线亚马逊云科技超过 60 门中文数字化培训课程&#xff0c;希望为学习者提供亚马逊云科技基础技能知识和最佳实践。 每门课程时长从十分钟到几小时不等&#xff0c;由亚马逊云科技专家打造&#xff0c;其中包括最受欢迎的《亚马逊云科技云从业者必修知识》&#xff0c…

vue3发送验证码倒计时 (防止连点、封装复用)

一、实现思路 倒计时 流程图二、实现一个简单的验证码倒计时 //倒计时初始变量 const codeNum ref(60); // 定时器id let clearId: number; // 发送验证码 const sendCode async () > { // 防止下次点击 如果倒计时的时间不是60 就不执行下面逻辑if (codeNum.value ! 60)…

AcWing算法学习第三节---高精度问题.

系列文章目录 第一节快速排序 第二节二分法 学习路上的风景&#xff0c;我陪你一起去看&#xff0c;编程路上的算法&#xff0c;我陪你一起去学&#xff0c;朋友们你们好&#xff0c;我是夏目浅石&#xff0c;蟹蟹你点开文章和我一同进步&#xff0c;加油&#xff01;遇见更好…

2022Q3手机配件增长榜:手机壳、数据线等供求不断增加

本篇我们将继续来分析22年Q3季度中手机通讯行业的高增长概念。在手机通讯行业中&#xff0c;我们发现了3个高增长品类&#xff0c;分别是&#xff1a;手机耳机、手机壳、数据线。 一、手机配件类高增长概念——手机耳机 手机耳机可以分为不同种类&#xff0c;如&#xff1a;开放…

现代物流有哪些特点?

现代物流的特点有系统化、网络化、信息化、专用化和准时性和柔性化。 现代物流特点一&#xff1a;系统化 现代物流强调了物流体系是一个具有综合性和系统性的过程&#xff0c;以优化物流管理体系为目标&#xff0c;降低物流运营管理成本&#xff0c;实现企业效益提升&#xff0…