Web应急基础指南
字数 2652 2025-08-20 18:18:10
Web应急响应基础指南
1. 总述
Web应急响应主要针对基于webshell和各类web漏洞(如SQL注入、RCE)的安全事件。虽然从抽象定义角度独立于操作系统(Windows或Linux),但在实际操作中常与操作系统密切相关。
本文重点:
- 仅涉及Web部分,不包含攻击队后续维权手段(如CS马)
- 不涉及安全设备日志分析(因厂商设备多、接触有限、客户可能无设备)
- 基于原始Web日志进行分析
2. 信息搜集
2.1 确定网站使用的服务器类型
2.1.1 访问网站
通过浏览网站可判断服务器/应用语言:
- 响应头中的
Server字段 - 特定URL路径特征(如
.aspx表示.NET) - 错误页面特征
2.1.2 查看进程
Windows:
tasklist | findstr "httpd apache nginx java javaw inetinfo"
Linux:
ps -aux | grep -E "apache|httpd|nginx|java|tomcat"
常见进程名:
- Apache: httpd, apache2
- Nginx: nginx
- Tomcat: java/javaw
- IIS: inetinfo
2.2 常见日志位置
Linux下:
| 服务器 | 日志路径 | 配置文件路径 | 主要日志文件 |
|---|---|---|---|
| Apache | /usr/local/apache/logs/, /var/log/apache2/ | httpd.conf | access.log, error.log |
| Nginx | /etc/nginx/logs/, /var/log/nginx/ | nginx.conf | access.log, error.log |
| Tomcat | $CATALINA_HOME | - | catalina.out, localhost.yyyy-mm-dd.log |
Windows下:
| 服务器 | 日志路径 | 配置文件路径 | 主要日志文件 |
|---|---|---|---|
| IIS | %SystemRoot%\System32\LogFiles\ | - | - |
| Apache | 安装路径(非固定) | httpd.conf | access.log, error.log |
| Nginx | 安装路径(非固定) | nginx.conf | access.log, error.log |
| Tomcat | %CATALINA_HOME% | - | catalina.out, localhost.yyyy-mm-dd.log |
搜索日志文件方法:
- Linux:
find / -name "access.log" - Windows: 使用Everything工具搜索
2.3 Web应用中的日志
查找方法:
- 在根目录下搜索log文件
- 登录网站数据库,查询是否有log表
常见框架日志:
- ThinkPHP: 自带日志功能
- 小CMS: 通常有admin_log表
2.4 Docker中的日志
操作命令:
docker ps -a # 列出所有容器
docker exec -it <id> /bin/bash # 进入容器shell
docker cp <id>:/etc/passwd /tmp/ # 拷贝容器文件到本地
3. 分析研判
3.1 常见日志格式
Apache访问日志示例:
访问IP - - [访问时间(服务器时间)] "请求方式 请求路由 HTTP协议版本" 响应码 -
3.2 使用工具分析日志
推荐工具:360星图
- 修改
conf/config.ini中的日志路径 - 启动分析
- 查看
result文件夹中的报告
3.3 使用命令进行日志统计
常用命令组合:
- 统计访问次数最多的IP:
cut -d - -f 1 [file] | sort | uniq -c | sort -rn | head -20
- 统计访问IP数量:
awk '{print $1}' [file] | sort | uniq | wc -l
- 统计特定页面访问次数:
grep "/index.php" [file] | wc -l
- 统计每个IP访问的页面数量:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' [file]
- 查找IP访问的页面:
grep ^[ip] [file] | awk '{print $1,$7}'
- 统计特定时间的访问IP数:
awk '{print $4,$1}' [file] | grep [time_11/Jun/2020:14] | awk '{print $2}' | sort | uniq | wc -l
3.4 黑页与黑链的研判
常见篡改方式:
- 仅改写TITLE
- 根据UA判断(PC端不改写)
- 根据IP判断(境外展示被改写首页)
- 使用JS脚本定时跳转
- 仅改写META
- 修改服务器拦截规则进行劫持
判断方法:
- 访问首页并抓包
- 检查加载的可疑外部JS
- 分析跳转顺序
示例:META篡改
- 篡改内容可能被实体编码
- 解码后可发现黑产导航内容
3.5 特殊情况:反向代理
特征:
- 日志中所有访问IP相同(反向代理服务器IP)
- 可通过User-Agent头区分真实访问者
4. 排查修复
4.1 排查
4.1.1 判断后门
判断依据:
- 创建时间:
find / -name "*.php" -newermt "2023-01-01" -printf '%T+ %p\n' | sort -r - 文件内容:使用D盾等工具查杀
- 访问日志:通过日志反推攻击时间
4.1.2 内存马排查
- PHP内存马:通过被反复落地的文件反推
- Java内存马:读取注册组件名和字节码
4.2 修复
步骤:
- 删除webshell
- 修补漏洞(需代码审计)
- 根据业务需求调整修复方案
4.3 PHP内存马的排查与修复
特征代码:
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__);
$c = 'webshell内容';
while(true){
if(!file_exists("back.php")){
file_put_contents("back.php", $c);
}
usleep(1000000);
}
?>
修复方法:
- 使用空白文件占位
- 定时扫描并删除生成文件
- 重启服务(最后手段)
4.4 Java内存马的排查与修复
4.4.1 agent内存马
- 难以彻底清除,建议重启
4.4.2 组件内存马(servlet/filter/listener)
排查工具:arthas
- 列出Java进程:
jps - 连接进程:
java -jar arthas-boot.jar [pid] - 查询所有Filter:
sc *.Filter - 反编译可疑类:
jad --source-only 类名
4.5 示例:Filter内存马排查
- 使用jps获取PID
- 使用arthas连接
- 查询Filter并反编译可疑类
- 检查Classloader(特别注意匿名或子类实现的classloader)
4.6 示例:Windows应急
4.6.1 日志审计
- 查看日志行数
- 访问网站判断类型(如CMS系统)
- 搜索历史漏洞
- 对比POC查找可疑请求
4.6.2 查找后门
- 使用D盾扫描网站根目录
- 在日志中搜索可疑文件访问记录
- 确认webshell类型(如冰蝎)
4.6.3 漏洞修补
- 查找漏洞函数
- 分析漏洞点(如未过滤的上传扩展名)
- 添加安全校验(如文件名正则)
- 修改弱口令
- 检查数据库连接配置
PHP修补示例:
if(preg_match("/[a-zA-Z0-9-_]*\.?[a-zA-Z0-9-_]*$/", $file['name']) or
preg_match("/[a-zA-Z0-9-_]*\.?[a-zA-Z0-9-_]*$/", $file['tmp_name'])){
Error('你的格式有误!');
}
数据库密码修改(MySQL):
UPDATE hongcms.hong_user SET password="6c10cac8a7ceb242e31e349d1bba9cd8" WHERE username="admin";
5. 攻击溯源
主要方法:
- 通过攻击IP进行溯源
- 使用微步等工具查询IP情报
- 判断是住宅IP还是服务器IP
- 对服务器IP的额外操作:
- 探测运行的服务
- 查询绑定域名的WHOIS信息
难点:
- 攻击IP未绑定域名或未运行服务时溯源困难
- 移动基站IP难以追踪
6. 总结
Web应急响应关键点:
- 快速定位日志文件
- 准确判断攻击入口
- 彻底清除后门文件
- 有效修补漏洞
- 做好防御加固
注意事项:
- 修补前需了解业务需求
- 重启服务前需与客户协商
- 记录完整处理过程便于复盘