目录
第二章:Linux的Apache日志分析
1、提交当天访问次数最多的IP,即黑客IP
2、黑客使用的浏览器指纹是什么,提交指纹的md5
3、查看index.php页面被访问的次数,提交次数:
4、查看黑客IP访问了多少次,提交次数:
5、查看2023年8月03日8时这一个小时内有多少IP访问,提交次数
第二章:MySQL的应急响应:
1.黑客第一次写入的shell flag{关键字符串}
2.黑客反弹shell的ip flag{ip}
3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
4.黑客获取的权限 flag{whoami后的值}
第二章日志分析-Redis应急响应
1.通过本地 PC SSH到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交
2.通过本地 PC SSH到服务器并且分析黑客第一次上传的恶意文件,将黑客上传的恶意文件里面的 FLAG 提交;
3.通过本地 PC SSH到服务器并且分析黑客反弹 shell 的IP 为多少,将反弹 shell 的IP 作为 FLAG 提交;
4.通过本地 PC SSH到服务器并且溯源分析黑客的用户名,并且找到黑客使用的工具里的关键字符串(flag{黑客的用户-关键字符串} 注关键字符串 xxx-xxx-xxx)。将用户名和关键字符串作为 FLAG提交
5.通过本地 PC SSH到服务器并且分析黑客篡改的命令,将黑客篡改的命令里面的关键字符串作为 FLAG 提交;
第二章:Linux的Apache日志分析
先来介绍一下什么是Linux的Apache日志:
Linux的Apache日志是记录Apache服务器活动的文件。主要分为访问日志和错误日志两类:
1.访问日志:记录客户端的访问信息,如IP地址、请求时间、请求方法、URL等,默认文件名为access_log,可通过CustomLog参数设置其位置和文件名。
2.错误日志:记录Apache启动和运行时产生的错误信息,默认文件名为error_log,可通过ErrorLog参数进行设置。
Linux系统中,这些日志文件通常存储在/var/log/apache2/或/var/log/httpd/目录下,管理员可以使用cat、tail、grep、awk等命令行工具查看和分析日志内容,以了解服务器运行状态、客户端访问情况及排查问题,同时,Apache的配置文件中也包含了日志文件的位置信息,可通过查看配置文件找到日志文件的确切路径
开启环境,直接连上Xshell
1、提交当天访问次数最多的IP,即黑客IP
直接在日志中筛选ssh登录信息:
Apache日志一般在:/var/log/auth.log.1
grep 'sshd' /var/log/auth.log.1
发现大量的相同IP,提交一下试试
flag{192.168.200.2}
2、黑客使用的浏览器指纹是什么,提交指纹的md5
黑客IP已经知道,直接在日志中筛选黑客IP的请求数据
首先先进入网站目录,再在日志中筛选访问数据
cd /var/log/apache2
cat access.log.1 |grep 192.168.200.2 |more
命令解析:
-
cat access.log.1
:cat
是一个命令,用于连接文件并打印到标准输出设备上(通常是终端或屏幕)。access.log.1
是cat
命令要读取和打印内容的文件名。这个文件可能是一个访问日志,记录了某个服务(如 Web 服务器)的访问记录。
-
|
(管道):- 管道符号
|
用于将前一个命令的输出作为后一个命令的输入。 - 在这个命令串中,
cat
命令的输出(即access.log.1
文件的内容)被传递给grep
命令。
- 管道符号
-
grep 192.168.200.2
:grep
是一个命令,用于在文本中搜索特定的字符串或模式。192.168.200.2
是grep
命令要搜索的字符串,这里是一个 IP 地址。grep
会从它的输入(在这个例子中是cat
命令的输出)中查找所有包含192.168.200.2
字符串的行,并将这些行输出。
-
| more
:- 再次使用管道符号
|
,将grep
命令的输出传递给more
命令。 more
是一个命令,用于分页显示文本。当输出内容很多时,more
命令会暂停显示,并等待用户输入命令来继续显示下一页或退出。- 在这个上下文中,
more
命令允许用户逐页查看grep
命令找到的所有包含192.168.200.2
字符串的行
- 再次使用管道符号
在这个日志中发现了黑客的浏览器指纹
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
将其进行MD5加密:MD5 在线加密工具 | 菜鸟工具 (jyshare.com)
flag{2d6330f380f44ac20f3a02eed0958f66}
3、查看index.php页面被访问的次数,提交次数:
wc -l 查看次数, 筛选一下
cat access.log.1 | grep "/index.php" | wc -l
命令解析:
-
cat access.log.1
这个命令使用
cat
工具来显示access.log.1
文件的内容。cat
是concatenate(连接)的缩写,但在这里它被用来简单地输出文件的内容到标准输出(通常是终端屏幕)。 -
| grep "/index.php"
管道符号
|
将cat
命令的输出传递给grep
工具。grep
是一个文本搜索工具,用于搜索包含指定模式的行。在这里,/index.php
是搜索模式,意味着grep
会输出所有包含/index.php
文本的行。这些行通常是访问日志中请求/index.php
页面的记录。 -
| wc -l
再次使用管道符号将
grep
的输出传递给wc
工具。wc
是一个用于计算字数的程序,但在这里我们使用-l
选项来告诉它只计算行数。因此,wc -l
会输出一个数字,表示grep
找到的包含/index.php
的行数
flag{27}
4、查看黑客IP访问了多少次,提交次数:
三种方式:选其一即可(在日志中筛选黑客IP访问的次数)
cat access.log.1 | grep 192.168.200.2 | wc -lcat access.log.1 | grep 192.168.200.2 | cut -d' ' -f1 | sort | uniq -cgrep 192.168.200.2 access.log.1 | cut -d' ' -f1 | sort | uniq -c
命令解析:
-
grep 192.168.200.2 access.log.1
这个命令使用
grep
工具在access.log.1
文件中搜索包含192.168.200.2
的行。grep
会输出所有包含这个IP地址的日志条目。 -
| cut -d' ' -f1
管道符号
|
将grep
命令的输出传递给cut
工具。cut
用于按列分割文本,这里使用-d' '
指定空格作为字段分隔符,-f1
指定提取第一个字段,即每行的第一个空格分隔的部分。在标准的Apache访问日志格式中,这通常是IP地址。但是,如果日志格式有所不同,或者如果IP地址后面紧跟着其他信息而没有空格分隔,这个命令可能不会按预期工作。 -
| sort
再次使用管道符号将
cut
的输出传递给sort
工具。sort
会对输入进行排序,默认情况下是按字典顺序(即ASCII顺序)排序。在这个上下文中,它会对提取出的IP地址进行排序,但由于我们实际上只关心一个特定的IP地址,这个排序步骤可能是多余的。 -
| uniq -c
最后,使用
uniq
工具来统计每个唯一行的出现次数。-c
选项会在每个唯一行的前面加上一个计数。在这个特定的命令中,由于我们之前已经使用grep
过滤了特定的IP地址,并且(理论上)cut
只提取了IP地址,所以uniq -c
应该会为这个特定的IP地址返回一个计数,表示它在日志中出现的次数。
发现访问了6555次
flag{6555}
5、查看2023年8月03日8时这一个小时内有多少IP访问,提交次数
筛选这个时间段内的IP,也是有三种筛选方式,任选其一即可
cat access.log.1 | grep 03/Aug/2023:08: | awk '{print $1}' | sort -nr| uniq -c | wc -lcat access.log.1 | grep 03/Aug/2023:08: | awk '{print $1}' | sort -nr| uniq -cgrep 03/Aug/2023:08: access.log.1 | awk '{print $1}' | sort -nr | uniq -c | wc -l
命令解析:
-
grep 03/Aug/2023:08: access.log.1
这个命令使用
grep
工具在access.log.1
文件中搜索包含03/Aug/2023:08
的行。这意味着它会找到所有在该日期和时间(具体到小时)发生的请求记录。 -
| awk '{print $1}'
管道符号
|
将grep
命令的输出传递给awk
工具。awk
是一个强大的文本处理工具,这里使用它来打印每行的第一个字段,通常这是日志中的IP地址。 -
| sort -nr
再次使用管道符号将
awk
的输出传递给sort
工具。-n
选项告诉sort
以数值顺序排序,而-r
选项则指定逆序(从大到小)。在这个上下文中,它可能是对IP地址进行排序,但由于IP地址不是纯数字,这个排序可能不是按预期进行的。通常,对IP地址排序需要更复杂的处理。 -
| uniq -c
接下来,使用
uniq
工具来统计每个唯一IP地址的出现次数。-c
选项会在每个唯一行的前面加上一个计数。 -
| wc -l
最后,使用
wc
工具的-l
选项来计算行数。在这个上下文中,它实际上是在计算唯一IP地址的数量,因为uniq -c
已经为每个唯一IP地址生成了一行。
这里我选的第三种方式
发现5次
flag{5}
第二章:MySQL的应急响应:
先来介绍一下什么是MySQL:
MySQL是一种开源的关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)进行数据库管理。
一些MySQL特点:
1.开源特性:MySQL是开放源代码的,任何人都可以在GPL许可下下载并修改。
2.关系型数据库:数据保存在不同的表中,提高了速度和灵活性。
3.SQL语言:使用最常用的数据库管理语言SQL进行数据操作。
4.广泛应用:MySQL是最流行的RDBMS之一,特别在WEB应用方面表现出色。
5.高性能:优化了SQL查询算法,支持多线程,充分利用CPU资源。
6.多语言支持:提供多种语言支持,包括中文、日文等。
7.跨平台性:使用C和C++编写,源代码可移植性强。
MySQL因其速度、可靠性和适应性而广受好评,是许多中小型和大型网站的首选数据库
开启环境,直接连上Xshell
在开始之前,先介绍一下MySQL的常见提权函数
MySQL常见提权函数:
利用INTO OUTFILE 写入文件:SELECT '' INTO OUTFILE '/var/www/html/shell.php';
利用 LOAD_FILE 读取文件:SELECT LOAD_FILE('/etc/passwd');
以及利用 UDF来写入自定义函数进行提权
MySQL的默认插件目录:/usr/lib/mysql/plugin/
攻击者一般将UDF提权放在默认插件目录,因为其目录有权限加载和执行该目录中的共享库文件。件必须放置在 MySQL 的插件目录中,才能被 MySQL 识别和加载。由于 MySQL 服务运行时需要访问插件目录,通常该目录的权限设置相对宽松,允许 MySQL 服务有读写权限
1.黑客第一次写入的shell flag{关键字符串}
老样子查找可疑文件:
cd /var/www/htmlfind ./ type f -name "*.jsp" | xargs grep "exec("find ./ type f -name "*.php" | xargs grep "eval("find ./ type f -name "*.asp" | xargs grep "execute("find ./ type f -name "*.aspx" | xargs grep "eval("
命令解析:
-
find ./ type f -name "*.php"
这个命令使用
find
工具在当前目录(./
)及其所有子目录中搜索文件。type f
指定只查找文件(而不是目录或其他类型的文件系统对象)。-name "*.php"
是一个条件,指定只匹配文件名以.php
结尾的文件。因此,这个命令会输出所有符合条件的文件的路径。 -
| xargs grep "eval("
管道符号
|
将find
命令的输出传递给xargs
工具。xargs
用于构建并执行命令行,它将从标准输入接收到的数据作为参数传递给指定的命令。在这里,xargs
将find
找到的每个文件路径作为参数传递给grep
命令。
发现 sh.php 查看
cat ./sh.php
其实这里还有另一种方式,通过Xshell的FTP,将这个根目录下载到本地,通过D盾扫描,也可以看到webshell
flag{ccfda79e-7aa1-4275-bc26-a6189eb9a20b}
2.黑客反弹shell的ip flag{ip}
因为本题是关于Mysql的应急,一般思路是先看数据库信息,先进入数据库目录
cd /var/log/mysql/
正好发现一个error.log ,查看
cat error.log
在往下翻时,发现一个1.sh被保存了,不知道这个是什么文件,直接查找分析
find / -name "1.sh"
查看这个文件
cat /tmp/1.sh
发现这是一个反弹shell,直接提交即可
flag{192.168.100.13}
3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
进入网站的根目录,查看是否能发现密码:
cd /var/www/html
find ./ -name "*.php" | xargs grep "root"
命令解析:
-
find ./ -name "*.php"
这个命令使用
find
工具在当前目录(./
)及其所有子目录中搜索文件。-name "*.php"
是一个条件,指定只匹配文件名以.php
结尾的文件。因此,这个命令会输出所有符合条件的文件的路径。 -
| xargs grep "root"
管道符号
|
将find
命令的输出传递给xargs
工具。xargs
用于构建并执行命令行,它将从标准输入接收到的数据(在这里是find
命令输出的文件路径列表)作为参数传递给grep
命令。grep "root"
是搜索命令,用于在每个文件中搜索包含字符串root
的行。grep
会输出所有包含该字符串的行,前面会带有它们所在文件的路径,以便你知道每个匹配项来自哪个文件。
发现账号密码
连接数据库:
mysql -uroot -p334cc35b3c704593
查看MySQL配置,因为是要找提权文件,当然先看MySQL配置
show global variables like '%secure%';
发现secure_file_priv
为空,这很有可能造成UDF提权
secure_file_priv
变量用于限制 MySQL 服务进程访问文件系统的能力。具体来说,它定义了允许 LOAD DATA 和 SELECT … INTO OUTFILE 操作的路径。如果这个变量为空,表示 MySQL 可以访问服务器上的任何路径,没有任何限制。
UDF提权:
UDF 提权是利用 MySQL 的用户定义函数进行权限提升的攻击方法。攻击者可以编写恶意的 UDF 插件,并将其加载到 MySQL 中,从而执行系统级别的命令
一般来说进行UDF提权时,一般会将恶意函数写入到MySQL的默认插件中去,那么看一下MySQL默认插件目录
MySQL的默认插件目录:
cd /usr/lib/mysql/plugin/
查看权限:
ls -la
发现udf.so,不用想,这应该是写入的提权文件
查看一下这个文件
cat udf.so
发现这是一个一句话木马
拼接路径加密
/usr/lib/mysql/plugin/udf.so
flag{b1818bde4e310f3d23f1005185b973e7}
4.黑客获取的权限 flag{whoami后的值}
题目让我们找黑客获取的权限,因为进行了UDF提权,肯定写入了自定义函数
我们去数据库中查询一下新增的函数有那些
还是先登录进去数据库
mysql -uroot -p334cc35b3c704593
查询新增函数:
SELECT * FROM mysql.func;
发现了 sys_eval 就是新增的函数
我们直接用这个函数去执行命令
select sys_eval('whoami');
flag{mysql}
第二章日志分析-Redis应急响应
先来介绍一下什么是Redis
Redis是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 支持多种数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)与范围查询、bitmaps、hyperloglogs 和 地理空间(geospatial)索引半径查询。
以下是 Redis 的一些关键特性:
1.速度快:由于 Redis 是基于内存的,并且使用了高效的数据结构,因此读写速度非常快。
原子性:Redis 的所有命令都是原子性的,这意味着它们会被完整地执行,而不会在执行过程中被其他命令中断。
2.丰富的数据类型:Redis 支持多种基本和高级的数据结构,这使得它能够灵活地处理各种类型的数据。
3.持久性:Redis 支持两种持久化机制:RDB(快照)和 AOF(Append-only file)。RDB 持久化会定期生成数据快照,而 AOF 则会记录每次写操作,以便在服务器重启时重建数据。
发布/订阅:Redis 提供了发布/订阅功能,允许消息在多个客户端之间进行广播。
4.Lua 脚本:Redis 支持通过 Lua 脚本来执行一系列的操作,这可以实现更复杂的逻辑和事务性操作。
5.事务:Redis 支持通过 MULTI、EXEC、DISCARD 和 WATCH 命令来实现事务操作。
高可用性:Redis 支持主从复制和自动故障转移,以提高数据的可用性和可靠性。Redis Sentinel 和 Redis Cluster 提供了更高级的高可用性和可扩展性解决方案。
6.广泛的客户端支持:Redis 有多种语言的客户端库,使得它可以在多种编程环境中轻松使用。
7.Redis 通常被用于需要快速访问和修改数据的场景,如缓存、会话存储、实时分析等。由于其高性能和丰富的功能集,Redis 已经成为许多现代应用程序中不可或缺的一部分。
开启环境,连上Xshell
1.通过本地 PC SSH到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交
题目是Redis应急,一般要查找Redis的日志进行分析
查看Redis日志
cat /var/log/redis.log
发现了大量的这个IP,提示连接错误,这应该不是要我们找的成功连接的IP
继续往下找,发现了一个没有报错的
尝试提交一下
flag{192.168.100.20}
2.通过本地 PC SSH到服务器并且分析黑客第一次上传的恶意文件,将黑客上传的恶意文件里面的 FLAG 提交;
恶意脚本一般会在Redis 的数据目录或临时目录中生成,查找一下
grep "Module 'system' loaded from" /var/log/redis.log
命令解析:
-
grep
:这是一个在文本文件中搜索特定模式的命令行工具。当找到匹配的行时,它会输出那些行到标准输出(通常是终端或屏幕)。 -
"Module 'system' loaded from"
:这是grep
命令要搜索的字符串模式。在这个例子中,模式是Module 'system' loaded from
,意味着grep
会查找所有包含这个确切字符串的行。 -
/var/log/redis.log
:这是grep
命令要搜索的文件路径。/var/log/redis.log
通常是 Redis 数据库服务的日志文件,其中记录了 Redis 的运行信息、错误、警告和其他重要事件。
当执行这个命令时,grep
会打开 /var/log/redis.log
文件,并逐行读取内容,查找所有包含 Module 'system' loaded from
字符串的行。每当找到一个匹配项时,grep
就会将该行输出到终端。
发现了一个exp.so,那么根据这个分析一下
查询恶意文件在哪:
find / -name exp.so
查看这个恶意脚本:
cat /exp.so
发现大量的字符串,肯定不好找flag,
那么在文件中定位字符:
strings /exp.so | grep "flag"
flag{XJ_78f012d7-42fc-49a8-8a8c-e74c87ea109b}
3.通过本地 PC SSH到服务器并且分析黑客反弹 shell 的IP 为多少,将反弹 shell 的IP 作为 FLAG 提交;
黑客进行了反弹shell,一般来说配置了持久化,可以从计划任务,开机启动服务等等方面来查找
查看计划任务:
crontab -l
flag{192.168.100.13}
4.通过本地 PC SSH到服务器并且溯源分析黑客的用户名,并且找到黑客使用的工具里的关键字符串(flag{黑客的用户-关键字符串} 注关键字符串 xxx-xxx-xxx)。将用户名和关键字符串作为 FLAG提交
黑客ssh到服务器有两种方式,一种是密码验证,一种是公钥验证
那么查看公钥文件
cat /root/.ssh/authorized_keys
这个应该是用户名,但是还要找工具,那么直接在百度里搜
最后拼接flag即可
flag{xj-test-user-wow-you-find-flag}
5.通过本地 PC SSH到服务器并且分析黑客篡改的命令,将黑客篡改的命令里面的关键字符串作为 FLAG 提交;
查日志:cat /var/log/auth.log
查历史命令:history
定时任务:crontab -l
启动项(如/etc/init.d、/etc/systemd/system)
检查系统路径中的命令:/bin、/sbin、/usr/bin等目录下的命令,确保与之前一致
最后在/usr/bin 中发现一个高权限命令
cd /usr/bin
ls -la
查看一下
cat ps
猜测下面的应该是flag
提交
flag{c195i2923381905517d818e313792d196}