JAVA安全学习 Day 1

这篇具有很好参考价值的文章主要介绍了JAVA安全学习 Day 1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JAVA ClassLoader机制

谈起JAVA就不得不谈起他的基本类的加载机制
谈一下我的粗略理解:
我一开始也不理解为什么学习java安全要从一个classloader讲起,似乎有点太基层了,但是学到后面的cc链,才有了更明显的理解,因为只有深入理解了java的classloader机制才会在后面构造cc链的时候不会卡手。
其实更基本的来说,因为以后构造cc链的时候,有很多时候会用到类的动态加载,而java的classloader机制是类加载的基础,所以这边我就合在一起来说。
依照大一的一点JAVA基础能勉强让我看懂JAVA代码,但是说句实话,有点不太想看,但是我还是建议初学者先去学习JAVA的基本功,然后深入去研究一下这部分的代码,这样才能有长足的进步。
我这边打算执果索因去讨论一下java的这部分机制(因为我自己在学习的时候很讨厌这种不知道为啥要从这里开始学起的感觉)

[========]

JAVA安全

我对JAVA语言实在算不上有什么好感,但是现在主流的公司包括网页底层代码都在使用JAVA,而安全是个伴生行业,这也就注定了你必须去接触市场上常见的业务,才能做好安全,我所认为的安全是绝对不可能说脱离业务自主存在的。
JAVA的诸多组件和中间件都存在一些常见的反序列化漏洞,也许你知道PHP的反序列化漏洞,那是利用PHP的一些魔术方法执行来做到恶意的利用,而JAVA也是一样的,尤其是重写的readobject方法反序列化代码时会出现执行恶意类中方法的情况。
因此到这里,我们发现我们可以构造恶意的类序列化,传到服务器,让其进行解析,从而达到我们所需要的结果,那么问题来了,我们怎么利用呢?
这就跟后面我们要提到的组件漏洞,jndi注入这类型的漏洞有关系了,但是现在我们需要知道一件事,就是我们要利用漏洞一定要构造一个恶意的类,这里的构造就需要我们掌握类加载的机制了,就是因此我们要先来搞清楚类加载机制。
[========]

类加载机制

java的类加载分为两种方式:

  1. 显式 常见的有利用JAVA反射或ClassLoader来加载(类动态加载)
Class.forName("java.lang.Runtime")

this.getClass().getClassLoader().loadClass("java.lang.Runtime")
  1. 隐式 常见的是 类名.方法名 或 new
Runtime.getRuntime()
new Runtime()

Classloader加载流程

  1. 首先调用loadClass方法加载
  2. 使用findClass方法坚持加载的类有无初始化,有的话直接返回了
  3. 没有的情况,会检查是否有父类的Classloader,如果有就父类加载,如果没有就使用Bootstrap加载
  4. 如果第三步依旧无法加载出来,讲调用自身的findclass方法加载
  5. 如果当前的加载器重写了findclass方法并且加载到了,就使用defineclass去注册该类;如果没有重写,返回类加载失败
  6. 如果调用loadclass传入的resolve为true,还需要调用resolove方法链接类
  7. 返回一个java.lang.Class对象

[========]

JAVA反射机制

简单来说就是通过Class,Constructor,Method,Field这几个类来对我们需要的类做一个完全的反射。
此时我们假设存在一个User类,他有常见的属性name,age,不常见的属性像Dog,常见的方法getName,getAge,那么我们怎么通过反射去获取他的属性并调用他的方法呢?
获得实例:
Class out = Class.forName('com.test.User');
获得方法:
Method method = out.getMethod('setname',String.class);
调用方法:
methond.invoke((new User()),"heise");
反射调用成员变量:

获取当前类的所有成员变量:

Field field = out.getDeclaredFields(--); "--为指定变量即可获得特定变量0"
获得成员变量值:
Object obj = field.get(类实例对象)
修改成员变量值:
field.set(类实例对象,修改后的值)
那么加入我们取出来的变量为private不能修改呢?
field.setAccessible(true)即可
如果我们要修改的值为final呢?
// 修改成员变量的Field对象的modifiers值
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);文章来源地址https://www.toymoban.com/news/detail-857925.html

到了这里,关于JAVA安全学习 Day 1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++代码之美】你不得不知道的经典代码

    斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 如下代码是15阶的斐波那契数列: 代码如下: 输出结果: 打印

    2024年02月01日
    浏览(51)
  • 程序员不得不了解的计算机进制转换

    最近在备考软考的软件设计师考试,学到了关于计算机的数据表示,由于我是半路出家学的Java,导致计算机基础知识很差,在这里记录一下学习感受 早期计算机的存储介质是晶体管,晶体管根据电压不同,只能表示2种状态,也就是0和1 计算机使用二进制运算更加方便 更详细

    2024年02月05日
    浏览(40)
  • AI绘画想生成好看的图,这些技巧不得不掌握

    现在,很多的人用AI绘画进行创作,但作出来的画却千差万别,有的好看,有的牵强,找不到那种惊艳的感觉。#AI绘画# 究竟如何才能让ai创作出好看的画面呢,不但逼真,还能一眼惊叹? 当然是有技巧,这些技巧如果你掌握了,我相信你一样能生产出惊艳的画作。 图源:数

    2024年02月09日
    浏览(42)
  • 或许有一天,你不得不硬着头皮去优化FPGA

        上篇(为啥FPGA资源/时序都有很大的优化空间?)提到过:因为大家一直都没去怎么优化FPGA,然后就导致FPGA可以优化的空间很大。工作中会有一批人知道可以优化但很少去承担优化的工作,也有一批人不知道能怎么优化,还有一批人开始要硬着头皮开始优化FPGA了,那这

    2024年04月23日
    浏览(41)
  • 超详细,AI绘画里你不得不知道的SD算法详解

    前言 哈喽,各位小伙伴们大家好,说到AI绘画,可谓是近几年来异军突起,犹如洪水猛兽一般,各种的本土化,商业化。但是相信也有很多朋友跟我一样,对AI绘画的原理一知半解,甚至根本不知道它是怎么工作的。这样只靠着在网上复制粘贴别人的prompt,是没有点好处的,

    2024年02月11日
    浏览(90)
  • 不得不承认,我们都太低估鸿蒙了 !_harmony next 展示

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料

    2024年04月25日
    浏览(43)
  • 【Github】作为程序员不得不知道的几款Github加速神器

    众所周知,近几年国内用户在访问 Github 时,经常间歇性无法访问 Github 。 接下来推荐几款 作为程序员不得不知道的 Github加速神器 。 FastGithub 是一款 Github 加速神器,解决github打不开、用户头像无法加载、releases无法上传下载、git-clone、git-pull、git-push失败等问题。 它支持多

    2024年02月12日
    浏览(50)
  • C语言实现单链表(超多配图,这下不得不学会单链表了)

    目录 一:什么是链表? 二:创建源文件和头文件 (1)头文件 (2)源文件 三:实参和形参 四:一步步实现单向链表 (1)建立一个头指针并置空 (2)打印链表,便于观察测试 (3)创建一个新的结点 (4)尾部插入数据 (5)头部插入 (6)尾部删除 (7)头部删除 (8)查找 (

    2024年01月24日
    浏览(50)
  • 进阶高级Python开发工程师,不得不掌握的Python高并发编程

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+         Python成为时下技术革新的弄潮儿,全民Python的发展趋势让人们不再满足于简单地

    2024年02月17日
    浏览(47)
  • 最流行的AI绘图工具Midjourney,你不得不知道的使用技巧

    ​关注文章下方公众号,可免费获取AIGC最新学习资料   本文字数:1500,阅读时长大约:10分钟 Midjourney成为了最受欢迎的生成式AI工具之一。它的使用很简单。输入一些文本,Midjourney背后的大脑(或计算机)将自动为您绘制生动的图像。但与DALL-E等其他AI图像生成器不同,您

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包