从Webshell查杀到内网渗透:一次完整的应急响应实战复盘 1. 项目概述一次完整的应急响应实战复盘最近在复盘一个内部红蓝对抗的案例从发现一个可疑的Webshell开始一路追查最终演变成了一次深入内网的渗透测试。整个过程就像一次“数字侦探”的破案之旅既有技术上的硬碰硬也有思路上的迂回与博弈。今天我就把这个完整的“应急响应实战从Webshell查杀到内网渗透”的过程拆解开来分享给大家。这不仅仅是工具的使用记录更多的是在真实对抗环境下的决策思路、排查技巧和那些容易踩坑的细节。无论你是负责安全运维的工程师还是对攻防对抗感兴趣的研究者相信这篇从实战中沉淀下来的经验都能给你带来一些启发。整个事件始于一次常规的Web日志审计一个不起眼的404请求里藏着一个奇怪的参数最终牵出了一个隐藏的后门并以此为跳板揭示了内网中更多被控的资产。我会按照事件发展的自然时间线从外部威胁发现Webshell查杀到入侵痕迹分析再到横向移动与权限提升最后进行影响面评估与加固为你还原一个立体的应急响应场景。2. 应急响应的核心思路与前期准备应急响应不是机械地运行脚本而是一场与攻击者赛跑、比拼信息获取和分析能力的战斗。在真正动手之前建立清晰的思路和做好充分的准备往往能事半功倍。2.1 建立“假设已被入侵”的心态这是所有应急响应工作的基石。一旦发现任何蛛丝马迹比如异常的日志条目、可疑的网络连接或者陌生的进程首先要做的不是去“证明它没问题”而是“假设它已经被入侵了我们需要找到证据链”。这种思维模式的转变至关重要。它意味着你的每一个操作从查看文件到分析进程都会带着取证和保存证据的目的进行避免在排查过程中无意破坏了攻击痕迹。注意在应急响应初期切忌在未做任何备份和记录的情况下直接删除可疑文件或重启服务。这可能会丢失关键的攻击载荷、内存中的恶意进程信息或者破坏攻击者的持久化机制让后续的溯源分析变得异常困难。2.2 工具包与环境的准备“工欲善其事必先利其器”。一个随时可用的、干净的工具包是应急响应的生命线。我的本地工具箱通常包含以下几个类别静态查杀工具用于快速扫描已知特征的恶意文件。我会准备多个引擎因为单一工具可能存在误报或漏报。D盾对于Windows服务器上的ASP、ASPX、PHP后门查杀非常敏感规则库更新快能发现很多变形后门。河马Webshell查杀支持多平台Linux/Windows对PHP、JSP等文件的检测能力不错可以作为交叉验证。ClamAV开源杀毒引擎可以用于对全盘文件进行快速扫描发现已知的病毒或后门。动态分析工具用于分析系统运行时状态。Sysinternals Suite在Windows环境下不可或缺尤其是Process Explorer进程查看、Autoruns自启动项分析、Procmon进程监控是神器。Linux常用命令集提前准备好脚本或Alias快速查看ps auxf进程树、netstat -antp网络连接、lsof -p PID进程打开文件、ss -antp等。取证与日志分析工具Log Parser用于快速分析Windows IIS、安全事件等日志。Ripgrep (rg)或Grep在Linux下进行高速文本搜索比原生grep快很多。Web日志分析脚本自己写或收集一些脚本用于快速统计IP访问频次、定位异常URI等。远程安全传输工具用于将可疑文件从生产环境安全地下载到分析环境避免直接在生产环境分析可能带来的二次风险。SCP / SFTP最基础可靠的方式。搭建临时的HTTPS文件服务器使用Python的http.server模块python3 -m http.server 8443或简单的Go静态服务器通过加密通道下载。在本次实战中我首先通过SCP将整个Web目录/var/www/html备份到了本地分析机。这里有个关键技巧使用tar命令打包时保留所有文件属性tar czvf web_backup.tar.gz --atime-preservesystem /var/www/html并且记录下打包前后的md5sum值确保取证文件的完整性。3. Webshell的发现、查杀与深度分析Webshell是攻击者维持访问的常见手段也是我们应急响应的第一个突破口。3.1 从异常日志到可疑文件定位一切始于一条Nginx访问日志192.168.1.100 - - [15/Oct/2023:14:22:33 0800] POST /upload/include/upload.php HTTP/1.1 404 168 - Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)这条日志的异常点在于/upload/include/upload.php这个路径在我已知的应用程序中根本不存在返回404但攻击者却在尝试访问。这强烈暗示着攻击者可能在尝试连接一个他之前上传的、但我们尚未发现的Webshell。通常攻击者会利用文件上传漏洞将Webshell传到诸如/upload/、/images/、/include/这类可写目录下。我的第一步是立即登录服务器检查/upload/include/目录。果然目录存在但里面空空如也。攻击者可能已经删除了文件或者文件被隐藏了。在Linux下我立刻使用ls -la命令查看所有文件包括隐藏文件发现了一个名为.Mysqli.php的文件注意开头的点号。这就是一个典型的隐藏Webshell。3.2 多引擎交叉查杀与人工研判发现可疑文件后我并没有急于打开它避免触发可能存在的危险代码而是将整个Web目录备份到本地开始进行静态查杀。使用河马查杀扫描河马报告了几个低风险的可疑文件主要是某些编码过的模板文件经过人工复核后排除了。使用D盾扫描D盾的报警更加“激进”和直接。它高亮报出了几个文件其中就包括.Mysqli.php和/wap/top.php将其标记为“后门”。查杀工具的使用心得 工具的结果永远只是参考不能代替人工分析。D盾虽然敏感但有时会对一些使用了eval、assert或复杂字符串处理函数的正常代码如某些框架的模板引擎产生误报。河马相对保守漏报的可能性更高。因此交叉验证和人工研判是必须的。我的流程是先用D盾快速圈定“高危嫌疑”范围再用河马辅助过滤最后对每一个告警文件进行人工代码审计。3.3 Webshell代码分析与攻击者画像将.Mysqli.php和top.php下载到隔离的虚拟机中开始进行代码分析。.Mysqli.php分析 打开文件开头几行代码就非常典型error_reporting(0); session_start(); $key e45e329feb5d925b; // 这段是32位MD5的前16位是连接密码 $_SESSION[k] $key; // ... 后续是大量的加解密和流量混淆代码看到$key和这套代码结构我立刻联想到两款流行的Webshell管理工具冰蝎Behinder和哥斯拉Godzilla。经过比对代码特征特别是加解密函数和SESSION的处理方式确认这是哥斯拉的Webshell。其默认连接密码e45e329feb5d925b实际上是字符串pass的MD5值的前16位。这一步不仅确认了后门还初步刻画了攻击者他使用了公开的、流行的攻击工具。top.php分析免杀马 这个文件看起来“干净”很多没有明显的eval或system函数。但仔细看它定义了一个类类的方法中通过复杂的字符串拼接、base64_decode、gzinflate多层解码最终动态执行解码后的内容。这是一种常见的免杀技巧将核心的恶意代码进行编码和混淆绕过基于简单特征码的查杀工具。人工解码后发现其核心功能与.Mysqli.php类似但增加了文件管理、数据库连接等更多功能。通过这两个Webshell我们得到了关键信息攻击入口点很可能是/upload/目录下的文件上传漏洞。攻击者工具使用哥斯拉Godzilla。攻击者行为不仅留下了标准shell还部署了经过免杀处理的加强版shell说明其意图进行长期控制。攻击路径/upload/include/.Mysqli.php隐藏shell和/wap/top.php免杀马。4. 入侵痕迹排查与持久化机制挖掘清除Webshell只是治标找到攻击者是如何进来的、以及他还留下了哪些“后手”才是治本的关键。这一步的目标是清理攻击路径和所有持久化后门。4.1 文件系统与时间线分析我使用find命令结合时间戳查找在Webshell创建时间点附近被修改过的文件。# 查找最近7天内被修改的PHP文件 find /var/www/html -name *.php -type f -mtime -7 # 查找所有隐藏文件 find /var/www/html -name “.*” -type f # 查找最近3天内被修改的所有文件并按时间排序 find / -type f -mtime -3 2/dev/null | xargs ls -la 2/dev/null | sort -k6,7通过时间线分析除了已发现的Webshell还在/tmp目录下发现了一个可疑的.bash_history文件正常应在用户家目录里面记录了一些wget下载命令和chmod x的操作指向另一个内网IP。这成为了我们向内网渗透的重要线索。4.2 进程与网络连接排查在Web服务器上使用netstat -antp或ss -antp查看异常的网络连接。发现了一个到内网地址172.16.100.20:4444的稳定TCP连接对应的进程是一个名为[kworker/0:0]的伪装进程正常的kworker进程不应有对外网络连接。使用ls -l /proc/PID/exe查看该进程的真实执行路径发现它指向/tmp/.systemd-private-xxxx目录下的一个二进制文件。这是一个典型的进程伪装和守护进程技术。4.3 持久化机制检查攻击者为了在系统重启后仍能保持控制通常会设置持久化。LinuxCrontab检查/etc/crontab/var/spool/cron/目录下的用户cron任务。发现了一条每5分钟从远程服务器下载并执行脚本的任务。Systemd Service检查/etc/systemd/system/下是否有可疑的service文件。发现了一个名为networkscan.service的恶意服务用于维持反向Shell。SSH密钥检查~/.ssh/authorized_keys看是否被添加了攻击者的公钥。幸运的是这次没有。动态链接库劫持检查/etc/ld.so.preload未发现异常。Windows在后续内网渗透中发现注册表Run键HKCU\Software\Microsoft\Windows\CurrentVersion\Run和HKLM\...\Run。计划任务使用schtasks命令或查看C:\Windows\System32\Tasks。服务使用sc query或Get-WmiObject Win32_Service查找非微软的、描述可疑的服务。WMI事件订阅一种高级持久化技术使用Get-WMIObject -Namespace root\Subscription -Class __EventFilter等命令查询。4.4 Web日志深度挖掘回到最初的Web日志以发现Webshell的时间点为基准向前追溯一段时间如24小时过滤所有POST请求到上传目录的日志。grep “POST.*/upload/” access.log | awk ‘{print $1, $4, $5, $7, $9}’ | sort | uniq -c | sort -nr通过这个命令我找到了那个上传Webshell的原始请求IP一个代理IP以及上传时使用的User-Agent一个修改过的浏览器UA但包含特定工具特征。这些信息对于后续的威胁情报关联和攻击者画像非常有价值。5. 以失陷主机为跳板的内网渗透实战在确认Web服务器假设其IP为192.168.1.10完全失陷并发现了攻击者向内网172.16.100.0/24网段进行横向移动的痕迹后我们的角色从“防御方”暂时转变为“攻击方”目的是摸清攻击者在内网的行动轨迹和影响范围。注意此阶段所有操作必须在授权和法律允许的范围内进行通常是在隔离的测试环境或已获得明确授权的红队演练中。5.1 内网信息收集首先在已控的Web服务器上进行初步的信息收集网络信息ip addr show # 查看网卡信息发现除了eth0(192.168.1.10)还有docker0或其它虚拟网卡 route -n # 查看路由表 cat /etc/resolv.conf # 查看DNS服务器 arp -a # 查看ARP缓存发现内网活跃主机发现该服务器是双网卡eth1的IP是172.16.100.5属于内网开发/测试网段。主机信息uname -a # 系统版本 cat /etc/passwd # 用户列表 history # 命令历史攻击者可能未清理干净 sudo -l # 当前用户有哪些sudo权限发现当前Web服务运行在www-data用户下但该用户被意外地配置了NOPASSWD的sudo权限这是一个严重的配置错误也是攻击者能进一步渗透的关键。凭证收集查找配置文件grep -r “password\|passwd\|PWD” /var/www/html /etc/ –include“*.php” –include“*.conf” –include“*.yml”查找数据库连接文件可能存有明文密码。尝试从内存或进程信息中寻找密码如使用strings /proc/PID/environ。5.2 横向移动技术实践利用收集到的信息开始尝试横向移动。SSH密钥利用在www-data用户的.ssh目录下找到了用于连接其他服务器的私钥id_rsa。使用该私钥尝试连接内网其他常见IP如172.16.100.20。chmod 600 found_id_rsa ssh -i found_id_rsa user172.16.100.20成功连接到了内网的一台开发服务器Dev Server。密码爆破与喷洒如果没有密钥可以从配置文件、历史命令中收集可能的用户名密码组合使用如hydra、medusa等工具进行针对性的密码喷洒Password Spraying。务必注意爆破速率避免触发账户锁定策略。利用配置错误在Dev Server上发现了一个所有人都可读写的NFS共享目录里面存放着其他服务器的备份脚本和配置文件其中包含数据库密码。这就是典型的“信任边界”模糊导致的安全问题。利用漏洞对内网存活主机进行快速端口扫描使用nmap或masscan注意控制速度发现一台172.16.100.100的主机开放了8080端口运行着一个存在已知漏洞的Jenkins旧版本。利用公开的EXP成功获取了该主机的权限。5.3 权限提升与持久化维持在横向移动获得新主机权限后通常只是普通用户。需要提权至root/Administrator以获取完全控制。Linux提权内核漏洞使用uname -a查看内核版本搜索对应的本地提权EXP如DirtyCow, CVE-2021-4034等。在测试环境需谨慎生产环境严禁直接使用。SUID/GUID文件查找设置了SUID位的文件find / -perm -us -type f 2/dev/null看看是否有find、vim、bash等可被利用。sudo权限滥用使用sudo -l查看当前用户能以root身份运行哪些命令。如果允许运行vi、python、perl等可以直接提权。Windows提权系统信息收集使用systeminfo查看补丁情况寻找缺失的补丁对应的提权EXP。服务权限使用accesschk.exeSysinternals工具检查是否有服务配置了脆弱的权限允许用户修改或重启。AlwaysInstallElevated检查注册表键值如果启用任何MSI文件都将以SYSTEM权限安装。在本次实战中在开发服务器上利用一个具有SUID权限的、旧版本的python2.7成功提权到了root。5.4 内网渗透中的隐蔽与对抗真实的攻击者会极力隐藏自己。我们在模拟渗透时也要注意这些点以理解防御方该如何检测流量隐蔽使用加密隧道如SSH隧道、DNS隧道、ICMP隧道或基于HTTPS的C2命令与控制通信避免明文传输。日志清理攻击者会清理bash_history、web日志、auth.log等。我们可以通过检查日志文件的完整性如stat查看修改时间、文件大小是否异常、或者部署集中式日志审计来对抗。进程注入与隐藏使用ptrace注入、LD_PRELOAD劫持等技术将恶意代码注入到合法进程中。防御方需检查进程的内存映射/proc/PID/maps和加载的共享库。定时任务伪装将恶意任务放在/etc/cron.hourly/等目录下或者使用systemd定时器比直接写crontab更隐蔽。6. 事件总结、加固建议与常见问题排查完成渗透测试和影响评估后需要将视角切换回防御者撰写应急响应报告并给出加固方案。6.1 事件时间线与攻击链还原根据所有发现我们可以绘制出完整的攻击链初始入侵攻击者利用网站/upload/接口的文件上传漏洞未做文件类型和内容校验上传了哥斯拉Webshell.Mysqli.php。权限维持上传免杀Webshelltop.php并尝试通过www-data用户的sudo权限向/etc/crontab写入定时任务下载持久化后门。内网探测在Web服务器上利用arp-scan、nmap对内网172.16.100.0/24进行扫描。横向移动通过发现的SSH私钥成功登录开发服务器172.16.100.20。通过开发服务器上的NFS共享窃取数据库服务器凭证。利用Jenkins漏洞攻陷构建服务器172.16.100.100。数据窃取从数据库服务器中窃取了部分用户数据。6.2 系统加固与安全建议针对暴露出的问题提出具体的加固措施修补漏洞立即修复文件上传漏洞实施白名单文件类型校验重命名上传文件将上传目录设置为不可执行。升级存在漏洞的Jenkins到最新版本。权限收紧遵循最小权限原则移除www-data用户的sudo权限。检查所有服务器的sudo配置清理不必要的授权。检查并修复NFS共享目录的读写权限遵循最小化共享原则。加强监控部署HIDS主机入侵检测系统监控关键文件如Webshell、/etc/crontab、~/.ssh/authorized_keys的变更。部署NIDS网络入侵检测系统监控内网异常流量如SSH爆破、异常端口扫描。启用并集中管理所有服务器的日志Syslog确保日志的完整性和不可篡改性。网络隔离将Web服务器置于DMZ区与内网核心业务区域如数据库、开发服务器进行严格的网络访问控制ACL仅开放必要的端口。考虑对内部服务器实施零信任网络访问即使在内网访问也需要认证和授权。定期安全评估定期进行漏洞扫描和渗透测试主动发现潜在风险。对员工进行安全意识培训特别是开发人员避免将敏感信息如密码、密钥硬编码在代码或配置文件中。6.3 应急响应常见问题与排查技巧实录在实际应急中经常会遇到一些棘手的情况这里分享一些快速排查的技巧问题现象可能原因排查命令/思路CPU/内存占用异常高挖矿木马、DDoS僵尸程序、被入侵后作为代理跳板top/htop查看进程netstat -antp查看异常外连检查/tmp、/dev/shm下有无可疑文件使用chkrootkit、rkhunter扫描。网站被挂黑页或暗链Web目录被篡改存在Webshell或写入权限过松查找最近被修改的网页文件检查upload、images等目录的权限应为755用户组非root使用Webshell查杀工具全盘扫描。服务器向外发起大量连接被植入后门正在作为代理、进行DDoS或数据外传ss -antp或netstat -antp查看ESTABLISHED连接使用tcpdump抓包分析流量特征检查iptables/firewalld规则是否被篡改。密码突然失效无法登录SSH密钥被篡改/etc/passwd或/etc/shadow被修改通过控制台或带外管理登录检查~/.ssh/authorized_keys检查/etc/passwd中用户shell是否被改为/bin/false。收到云平台安全告警实例可能已被入侵存在恶意行为立即登录控制台隔离实例关机或断网创建快照用于后续取证按上述流程从头开始排查。最重要的心得应急响应没有银弹。工具能帮你提高效率但真正的核心是分析思路和对系统的熟悉程度。平时多积累系统知识了解各种服务、日志、配置文件的正常状态才能在异常出现时第一时间感知。每一次应急都是一次学习复盘时多问几个“为什么”和“如果”你的防御能力就会在这一次次的实战中稳步提升。