web漏洞-反序列化之JAVA全解(38)

web漏洞-反序列化之JAVA全解(38)_第1张图片

首先第一个就是概念。第二个是他的利用,一个好用的工具ysoserial,主要用来生成工具的paload,修复大差不差。

#概念:我们有时候需要保存某一个对象的信息,会进行一些操作,类似于反序列化,序列化的过程中的对象,就是我们所说的class的状态以二进制储存到文件的系统中,然后另外一个系统对这个二进制进行读取,再来还原,如下图这样web漏洞-反序列化之JAVA全解(38)_第2张图片

 序列化那段英文字母的意思是,写入对象

反序列化英文字母意思,读取对象

就相当于序列化就是把序列的字节写到输出流里面

反序列化就是把源输出流里面转换成一个对象

类似于存档,读档吧,跟php一样的相互转换

序列化:将对象的状态信息转换为可以储存或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性储存区。

反序列化:从储存区中读取该数据,并将其还原为对象的过程,称为反序列化。

##简单的java代码演示

#主函数

---调用序列化方法

---将反序列化的的结果返回给person变量

---输出person变量 

web漏洞-反序列化之JAVA全解(38)_第3张图片

#序列化方法

---创建一个person的对象

---创建一个文件输出流(指向person.txt的文件),命名为oos

---将person对象的写入到文件输出流中 

 将对象person序列化之后写入到d盘里面person.txt文件里面。使用到了oos.write0bject(person)去写入。

web漏洞-反序列化之JAVA全解(38)_第4张图片

#反序列化方法

---创建一个文件输入流(指向person.txt的文件),命名为ois

---从到文件输入流中读取person对象的信息

---返回person对象(直接显示会乱码,一般用base64加密输出) 

 这个代码就是读取那个文本对他进行还原。

一个就是将数据写到对应的文件,一个是将文件进行读取进行还原。

我先只执行序列化,看一下储存文件

 这个就是对象序列化之后的样子。

然后在打开反序列化,执行一下,输出反序列化之后的值

 就转换为了原来的对象。

他有什么作用,我们可以看一下下图新代码

web漏洞-反序列化之JAVA全解(38)_第5张图片

 这个代码是java里面执行命令的代码,写为ipconfig就输出的结果就和命令提示符的结果一样,假如那个绿色的字符串是一个可控变量,变量来源于假如是是一个代码读取数据的d盘文件里面的,假如里面是ipconfig,而这个代码就执行ipconfig。

##WebGoat_Javaweb 靶场反序列化测试

打开靶场

web漏洞-反序列化之JAVA全解(38)_第6张图片

 看源码web漏洞-反序列化之JAVA全解(38)_第7张图片

 web漏洞-反序列化之JAVA全解(38)_第8张图片

 exec命令执行代码,然后这一串代码就是接受你输入的数据,进行对象的还原,进行命令执行,这就是对应的靶场漏洞。

而攻击他有两种方式,一种是结合上面组件攻击,第二种就是没有组件自定义pyload,

用第二种方法我们就用到上面提到的工具了,

攻击过程:xiaodi转换为一堆储存在txt里面的乱码,称为序列化

txt一堆乱码转换为xiaodi,称为反序列化。

rO0ABXQAVklmIHlvdSBkZXNlcmlhbGl6ZSBtZSBkb3duLCBJIHNoYWxsIGJlY29tZSBtb3JlIHBvd2VyZnVsIHRoYW4geW91IGNhbiBwb3NzaWJseSBpbWFnaW5l 

他变成那串数字经过了两步,序列化+base64加密

我要攻击他该怎么去构造pyload?

假如我要写一个ipconfig

问题1:对方回显吗?回显就是可以看到,不回显就是他执行了但看不到。所以大部分反序列化漏洞都会进行一个操作,“反弹shell”,这个就能解决回显问题,就是把对方执行命令的会话反弹到另一个服务器上去。

反弹的命令:ip地址>这个要根据操作系统写语句

假如现在我要写一个pyload,要写ipconfig,先进性序列化,然后在进行base64加密,获得一个rO0AB格式的字符串,就是pyload。。而自己一个一个去写很麻烦。

所以用工具帮你去操作,工具命令

 然后组件里面hibernate是调用的组件。这个组件能不能调用就对比工具执行时候显示出来的web漏洞-反序列化之JAVA全解(38)_第9张图片

 就和图中这些对比,看在源代码中有没有,有就可以调用。执行那个calc.exe,这个电脑上计算机,然后结果都输入到pylioad.bin里面,这个工具只能到序列化这一步,

之后还要进行base64加密,就可以直接写一个base64加密的python脚本,web漏洞-反序列化之JAVA全解(38)_第10张图片

 打开pylioad.bin,对里面的内容进行加密,保存到pylioad.txt里面。

打开pylioad.txt,里面web漏洞-反序列化之JAVA全解(38)_第11张图片

全复制之后web漏洞-反序列化之JAVA全解(38)_第12张图片 

 点提交,看会不会执行计算机web漏洞-反序列化之JAVA全解(38)_第13张图片

 原因就是有计算机的执行命令

这里来结合一下开头思维导图内的知识点,黑盒测试里面数据格式点,刚刚那个图片就说了指定的字符串开头一定是序列化加密值,

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

这里还涉及到sql注入

web漏洞-反序列化之JAVA全解(38)_第14张图片

打开sqldict

web漏洞-反序列化之JAVA全解(38)_第15张图片

白盒代码审计完之后发现有sql注入漏洞,打开网站,抓一下数据包看看web漏洞-反序列化之JAVA全解(38)_第16张图片

 代码审计在那个sqldict有sql注入漏洞,然后请求地址在第一个代码就显示了common/test/sqldict对应的文件地址,代码里面接受dbname和teblename的值,然后上面语句里面有dbname值,

注入语句便是

web漏洞-反序列化之JAVA全解(38)_第17张图片

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

这个注入代码是因为前面语句告诉了,dbname,参数是myapp,剩下的可以猜出来的。

web漏洞-反序列化之JAVA全解(38)_第18张图片

 然后获取到账户和密码在他的导入模块里面有接口

web漏洞-反序列化之JAVA全解(38)_第19张图片

就通过访问开发接口实现账户密码的登录,这个接口是默认的

 访问那个接口地址,打开账户相关就看到一个登录web漏洞-反序列化之JAVA全解(38)_第20张图片

 输入账号密码,发送数据包web漏洞-反序列化之JAVA全解(38)_第21张图片

 web漏洞-反序列化之JAVA全解(38)_第22张图片

然后在登录成功上面有一个数据,而且是rO0AB开头的字符串,序列化之后base64加密值,

返回数据里面有这个东西,又涉及到序列化,把值序列化之后展现出来,

而点开那个获取当前用户信息,就会出现一个框让我们填写tokenweb漏洞-反序列化之JAVA全解(38)_第23张图片 

 而token就是那个序列化值,赋值那个值粘贴到这里,看返回

web漏洞-反序列化之JAVA全解(38)_第24张图片

 因为是网站的返回东西,肯定会和网站有关web漏洞-反序列化之JAVA全解(38)_第25张图片

 先进行base64解密,用python写一个解密脚本

再用反序列化工具去还原,web漏洞-反序列化之JAVA全解(38)_第26张图片

 下面反序列化之后的结果。

想有攻击他,web漏洞-反序列化之JAVA全解(38)_第27张图片

 抓那个查看用户信息的包,在请求数据包里面有这个数据

web漏洞-反序列化之JAVA全解(38)_第28张图片这样一对比,就是一个反序列和序列化的过程, 

所以在请求数据包里面,他对序列化值有接受,我们就可以构造一个攻击性的pyload发送过去,

就用到那个生成pyload的工具 这里因为不知道他的模组,就直接用的工具,生成向外网发送的语句,发送到那个ip地址的,写到xiaodi.bin文件里面,(linux的curl是发送的)

生成出来之后再去python脚本base64加密一下,然后打印出来

复制好,粘贴到请求数据包里面web漏洞-反序列化之JAVA全解(38)_第29张图片 web漏洞-反序列化之JAVA全解(38)_第30张图片

 发送出去数据包,监听端口里有数据

这个反序列化漏洞是在对方回显的数据格式上面发现的,

产生反序列化漏洞的原因我是在登录,还是查看用户信息,是在查看信息的时候发送的请求数据包里面有序列化值发送出去,而且接受并显示数据,所以攻击语句写在请求数据包里面,写他对应的格式;

这个漏洞该如何检测到,数据格式点,http数据包请求中的参数看看,各种协议里面

白盒第一点就是找函数,web漏洞-反序列化之JAVA全解(38)_第31张图片这些函数都涉及到读取对象的, 一般用这个函数的意思都是在对象中获取数据,获取对象数据,在操作中设计序列化或者反序列化,这是漏洞产生根本原因。

第二点是在组件里面找,在那个yeoserial里面有的组件,在代码里面可能也有

第三个就是代码点,rce代码点,执行漏洞的代码点;然后再数据认证,刚刚那个题目就是登录数据包里面有序列化操作。

 

i

s

s

你可能感兴趣的:(web安全学习笔记,java,开发语言)