38-WEB漏洞-反序列化之PHP&JAVA全解(下)

这篇具有很好参考价值的文章主要介绍了38-WEB漏洞-反序列化之PHP&JAVA全解(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

一、Java中API实现

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

二、序列化理解

  • 序列化(Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。
  • 反序列化:从存储区中读取该数据,并将其还原为对象的过程,成为反序列化。

三、案例演示

3.1、本地

1、主函数:

  • 调用序列化方法
  • 将反序列化的的结果返回给person变量
  • 输出person变量

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

2、序列化方法:

  • 创建一个person的对象
  • 创建一个文件输出流(指向person.txt的文件),命名为oos
  • 将person对象的写入到文件输出流中

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

3、反序列化方法:

  • 创建一个文件输入流(指向person.txt的文件),命名为ois
  • 从到文件输入流中读取person对象的信息
  • 返回person对象(直接显示会乱码,一般用base64加密输出)

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java
4、运行结果:
38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

3.2、Java 反序列化及命令执行代码测试

1、源代码分析:

  • 使用exec方法执行字符串命令并返回一个process对象
  • 获取命令(process)的输入流给reader对象
  • 读取输入流的内容,打印输出(反序列化)

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

2、运行结果:
38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

3.3、WebGoat_Javaweb 靶场反序列化测试

1、启动靶场:
38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

2、进入靶场:
38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

3、理论分析:

  • 输入框内接受序列化的对象,并且将它反序列化(更改序列化的对象,将页面延迟5秒)
    38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

4、源代码分析:

  • 使用IDEA打开jar文件(https://www.cnblogs.com/liaowenhui/p/17353156.html)
  • 可以使用解压软件打开,再找到对应的jar文件解压出来后再使用IDEA打开。
    38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

  • 接受参数,base64解密,反序列化读取,返回读取的对象

  • 获取输出流,赋值给一个对象,然后写入输出流(序列化),返回base64编码
    38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

  • 这里存在命令执行(在调用读取输入流的时候,也就是读取反序列化的数据,并且把它当做命令执行)
    38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

5、漏洞分析:这里会将反序列化的数据进行读取,再进行命令执行。

  • rO0ABXQAVklmIHlvdSBkZXNlcmlhbGl6ZSBtZSBkb3duLCBJIHNoYWxsIGJlY29tZSBtb3JlIHBvd2VyZnVsIHRoYW4geW91IGNhbiBwb3NzaWJseSBpbWFnaW5l是序列化后加密形成
  • 序列化标志参考(可以确定是base64加密),因此要攻击,要如何构造payload?考虑对方的回显?==》反弹shell(解决回显)
  • 思路:要执行ipconfig =》序列化 =》base64加密 =》rO0AB格式字符串 =》payload
#补充知识点
下方的特征可以作为序列化的标志参考:
一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。
或者如果以aced开头,那么他就是这一段java序列化的16进制。|

6、 使用工具将命令构造成序列化语句

  • 命令分析
    • 生成组件,打开本地的计算器,保存到payload.bin文件中
    • 为什么要保存?还要进行base64加密
java  -Dhibernate5  -cp  hibernate-core-5.4.9.Final.jar;
ysoserial-master-30099844c6-1.jar
ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
  • 如何判断组件
    • 看工具的组建在源代码内是否出现过
    • 这里源代码出现了组件
java -jar ysoserial-all.jar

38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java
38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

  • 生成payload:
java  -Dhibernate5  -cp  hibernate-core-5.4.9.Final.jar;ysoserial-master-8eb5cbfbf6-1.jar ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
  • 生成了payload,利用Python程序base64加密
    38-WEB漏洞-反序列化之PHP&JAVA全解(下),小迪安全,web安全,学习,前端,php,java

  • 将加密后文本的代码复制到反序列化窗口,发现本地的计算器被打开。

3.4、2020-网鼎杯-朱雀组-Web-think_java 真题复现

https://blog.csdn.net/qq_36585338/article/details/128121566文章来源地址https://www.toymoban.com/news/detail-822645.html

四、涉及资源

  • https://github.com/frohoff/ysoserial/releases
  • https://github.com/WebGoat/WebGoat/releases
  • https://github.com/NickstaDB/SerializationDumper/releases/tag/1.12

到了这里,关于38-WEB漏洞-反序列化之PHP&JAVA全解(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Web安全--反序列化漏洞(java篇)

    序列化的意义就在于方便存储和传输,永久的保存到硬盘中,通常保存在一个文件中。 序列化:将java对象转换为字节序列的过程 反序列化:序列化的逆过程,从储存区读出字节序列还原成对象的过程 java应用在对用户的输入没有进行严格的检查时,即传入了不可信的数据做

    2024年02月09日
    浏览(55)
  • Day60:WEB攻防-PHP反序列化&POP链构造&魔术方法流程&漏洞触发条件&属性修改

    目录 PHP-DEMO1-序列化和反序列化 序列化操作 - 即类型转换 序列化案例 PHP-DEMO2-魔术方法触发规则 __construct(): //当对象new的时候会自动调用 __destruct()://当对象被销毁时会被自动调用 __sleep(): //serialize()执行时被自动调用 __wakeup(): //unserialize()时会被自动调用 __invoke(): //把对象当

    2024年04月27日
    浏览(39)
  • 反序列化漏洞(PHP)

    0x01. 序列化和反序列化是什么 序列化:变量转换为可保存或传输的字符串的过程; 反序列化:把序列化的字符串再转化成原来的变量使用 作用:可轻松地存储和传输数据,使程序更具维护性 0x02. 为什么会有序列化 序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型

    2024年02月06日
    浏览(48)
  • php反序列化漏洞基础

            序列化是将对象或类转换为字符串的过程 ,以便在程序运行过程中对其进行持久化存储或传输的操作。在PHP中,序列化主要用于将类对象或数组转换成字节流的形式,以便于存储在磁盘或传输到其他系统。         通过 序列化,可以将对象或类转换成一串字

    2024年01月20日
    浏览(63)
  • PHP反序列化漏洞原理

    1、原理: 序列化与反序列化是保证数据一致性的过程。 2、产生: 序列化与反序列化的过程中,用户可控 如果反序列化的参数受到攻击者的控制,就会产生漏洞。攻击者可以通过修改参数个数等方式来控制反序列化过程,从而导致代码执行、SQL注入、目录遍历等不可控后果。

    2024年01月16日
    浏览(62)
  • PHP反序列化漏洞-魔术方法绕过

    一、__wakeup()魔法函数绕过: 在PHP中,__wakeup()是一个魔术方法,用于在反序列化对象时自动调用。 当反序列化字符串中的对象属性个数大于实际属性个数时 ,可以利用这个漏洞进行绕过。 触发条件: PHP版本为5.6.25或早期版本,或者PHP7版本小于7.0.10。 反序列化字符串中的对

    2024年01月18日
    浏览(55)
  • 反序列化漏洞及PHP魔法函数

    目录 1、漏洞原理 2、序列化(以PHP语言为例) 3、反序列化 4、PHP魔法函数 (1)__wakeup() (2)__destruct() (3)__construct() (4)__toString() (5)__get() (6)__call() PHP反序列化漏洞也叫PHP对象注入,形成的原因是程序未对用户输入的序列化字符串进行检测,导致攻击者可以控制反

    2024年02月04日
    浏览(59)
  • PHP反序列化漏洞之魔术方法

    PHP魔术方法 (Magic Methods) 是一组特殊的方法,它们在特定的情况下会被自动调用,用于实现对象的特殊行为或提供额外功能。这些方法的名称都以双下划线开头和结尾,例如: __construct() 、 __toString() 等。 魔术方法可以帮助我们实现一些特殊的行为,例如对象的初始化、属性

    2024年02月16日
    浏览(49)
  • PHP反序列化漏洞-字符串逃逸

    字符串逃逸(闭合) 字符串逃逸(闭合)是一种在反序列化函数可控的情况下,通过修改序列化字符串中的敏感字符来达到字符串逃逸的方法。 具体而言,可以通过修改变量名等个数,使得序列化字符串中的字符个数与实际变量值个数不一致 。由于反序列化机制要求字符串

    2024年01月20日
    浏览(57)
  • php魔术方法和反序列化漏洞

    漏洞形成的根本原因就是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、GetShell 等一系列不可控的后果。反序列化漏洞并不是PHP 特有的,也存在于Java、Python 语言中,其原理基本相同。 反序列化是字节流转对象的过程

    2024年02月09日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包