网络安全——使用Java反序列化漏洞在受限环境中提权

综合渗透测试-使用Java反序列化漏洞在受限环境中提权

第一步,打开网络拓扑,启动实验虚拟机,分别查看虚拟机IP地址:

Windows 10

Linux

第二步,进入靶机Ubuntu,su到root用户,密码123456。使用命令docker run -p 8080:8080 -t webgoat/webgoat-8.0来启动搭建好的Webgoat靶场环境

环境启动完成后,在渗透机Win10中直接访问靶机的站点,使用PentestBox中的火狐浏览器(使用命令firefox)打开http://172.16.1.200:8080/WebGoat(由于我们将端口映射到了8080,访问时需跟上端口号来进行访问),然后点击页面下方的“Register new user”来注册个新账号进行实验。

 注册成功后,页面将会自动跳转到WebGoat的首页,页面的左侧为导航栏,选择不同的任务来进行实验,本次我们要进行的是反序列化实验,那么我们点击Insecure Deserialization(不安全的反序列化)来进行实验

跳转到下面的页面中,根据提示可以知:以下输入框接受序列化对象(字符串)要求我们对其进行序列化,题目的要求是我们需要在Token中输入我们序列化之后经过bashe64编码的Payload使页面响应延迟5S。

第三步,为了测试是否存在反序列化漏洞,我们可以使用Burp上面的反序列化漏洞扫描插件Java-Deserialization-Scanner。

通过点击桌面上BurpSuitePro运行Burp抓包软件。

通过Burp来对该网站进行拦截,查看一下他的请求包内容,具体步骤如下,点击proxy选项栏,然后进入Intercept设置页面,确保Intercept is on按钮为激活状态:

并且在Firefox浏览器中相应的打开代理模式,并设置为127.0.0.1:8080,具体步骤在这里就不在演示,我们直接看最后的选项。

并在此回到登录后的页面题目页面中,此过程中需保证intercept拦截选项为Intercept is off。

点击Intercept is on激活代理,并在该页面的提交框输入123456,我们就会得到下面的请求包:

右键点击下方的空白处,然后选择Send to Repeater

然后切换到Repeater中点击Go,转发该请求数据包,即可得到右边的回应包。

第四步,使用Java-Deserialization-Scanner来进行扫描,由于payload需要进行Base64编码,所以我们在测试的时候需要选择Attack(base64),否则是无法扫描出任何漏洞的。具体操作如下:

首先回到Repeater中,然后在请求包的空白处右键选择Send request to DS -Manual testing把请求包发送到插件中

然后我们进入Deserialization Scanner选项卡中,通过设置载荷位置token变量,将token后的位置变量设为插入点。

注意此时token中的变量发生了变化,由于payload需要进行Base64编码,所以在测试时我们需要选择Attack(Base64),否则将无法扫描出任何漏洞。

经测试,我们发现存在Hibernate的反序列化漏洞,下面我们来尝试一下利用利用ysoserial渗透测试模块中的现有针对Hibernate的payload。

第五步,右键空白处,选择Send to Exploitation tab,发送到溢出利用模块中

首先进入Configurations选项中,将Exploiting configuration中的Ysoserial path路径改为ysoserial-0.06-SNAPSHOT-all.jar

然后切换到Exploiting选项中,在ysoserial命令执行窗口输入命令Hibernate1 whoami,然后点击Attack Base64执行攻击指令。

在Request包将攻击的语句自动经过base64进行转码得到一个可用于攻击的token值。为了方便理解,接下来我们将通过手工注入的方式来进行实验。

第六步,在PentestBox的命令行下切换路径至C:\PentestBox\bin\BurpSuitepro,然后使用命令

使用ysoserial渗透测试框架生成一个经Base64加密后的payload,并将该数据该数据进行提交后,会在服务器的/tmp目录下生成一个test文件

由于标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。所以我们需要将上面生成的base64后的代码放入桌面下的小葵转码中进行转码,

(注:此处的URL代码由于小葵中的窗口不能显示完整需要将其下拉至代码最后)

第七步,切换到靶机Unbuntu中,然后使用命令docker ps查看当前后台运行的容器,并找到其ID,然后使用命令docker exec -I -t 容器ID /bin/bash进入到容器内部,查看其/tmp目录目前的文件,稍后我们将在攻击机中通过反序列化漏洞来生成一个新的文件到/tmp中

将编码URL格式后的字符串丢到burpsuite里的Reapeater中进行提交,若出现以下结果则需要重新拦截网页的POST请求包。

正常的情况如下所示:

第八步,切换到靶机Ubuntu中的容器里进行查看,发现已经成功生成test文件

既然已经确认了漏洞的存在,并且成功的利用,那么接下里的步骤就是尝试反弹shell了。

第九步,首先我们需要先分析一下在Webgoat中的Docker中的可执行的二进制程序,以便能够通过系统中内置的命令进行渗透,具体方法使用which命令来定位需要使用命令的路径来判断是否存在可以利用的命令

发现Docker中存在perl和bash命令,那么我们可以尝试生成一个可向我们发送反向shell的payload,虽然在ysoserial中已经自带了一些单行反向shell的payload,但经过测试发现,这些shell普遍的存在有局限性,不支持重定向和管道等shell操作符。

第十步,此时我们来尝试一下通过java来编写反向shell,首先需要修改的文件路径为:

C:\PentestBox\bin\BurpSuitepro\tmp\ysoserial\src\main\java\ysoserial\payloads\util\Gadgets.java文件的116行至118行。

下面为ysoserial中自带的命令执行的方法,但无法正常利用

我们来其进行修改,让它能够符合实验环境的需求,修改后的结果如下

接下来对运行mvn clean package -DskipTests -Dhibernate5对ysoserial进行重建并生成测试用的payload,其中172.16.1.100就是我们需要的反弹shell的服务器地址(可以是Win10渗透机地址或Kali渗透机地址),此处需要根据自己的实际情况设定。(由于该操作需要联网进行,环境中已将修改好的包放到了C:\PentestBox\bin\BurpSuitepro\ysoserial_complete.jar,只要将渗透机ip地址设置为172.16.1.100即可)

使用java -Dhibernate5 -jar ysoserial_complete.jar Hibernate1 "PYSec" | base64 -w0命令得到payload

第十一步,首先使用命令nc -lvvp 8088来开启本地的监听

利用Burpsuite发送我们生成的payload尝试反弹shell,

将转码后的URL格式的字符串插到token=后面

成功拿到靶机的shell权限

实验结束,关闭虚拟机。

猜你喜欢

转载自blog.csdn.net/qq_48609816/article/details/125922755