格林...

前置知识

题目明说了是Linux日志分析,那我们就需要知道一些Linux日志知识

首先,我们都知道Linux的日志主要存放于/var/log当中,但是Linux中又存在以下文件/文件夹

image-20250423164426337

以下是这些文件的功能

文件/目录名 功能描述
alternatives.log 记录 update-alternatives 系统选择器的操作记录,用于管理默认应用程序。
amazon/ AWS 相关日志目录,如 EC2 实例元数据日志、CloudWatch agent 日志等。
apt/ apt 包管理器相关的操作日志,如安装、升级、移除包的详细记录。
auth.log 记录系统认证、授权、登录相关日志,如 sudossh 登录等。
aws114_ssm_agent_installation.log AWS SSM Agent 安装时生成的日志,跟踪安装过程。
bootstrap.log 系统首次安装或初始化过程中生成的日志。
btmp 记录失败的登录尝试(需使用 lastb 命令查看)。
cloud-init.log cloud-init 模块的初始化过程日志,常用于云主机自动化配置。
cloud-init-output.log cloud-init 执行的脚本输出日志。
daemon.log 守护进程日志,记录后台服务启动、运行、错误信息等。
debug 一般用于记录调试信息,若开启了调试日志级别,会写入此文件。
dpkg.log 记录使用 dpkg 命令安装/卸载软件包的日志。
faillog 记录失败登录尝试的计数(可用 faillog 命令查看)。
kern.log 记录内核产生的消息,如驱动加载错误、内核告警等。
lastlog 记录所有用户最近一次登录信息(可用 lastlog 命令查看)。
messages 包含系统启动和运行时的通用消息。
ntpstats/ 与 NTP(网络时间协议)相关的统计信息,记录时间同步情况。
private/ 某些服务专用的私有日志目录,权限受限(如 Postfix 等)。
syslog 系统日志文件,记录系统所有级别的日志信息(是 rsyslog 的主输出之一)。
user.log 记录用户级别的应用程序活动信息。
wtmp 记录登录会话信息(使用 last 命令查看登录历史)。

解题步骤

1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割

已知是ssh登录,那么登录信息就记录在auth.log,auth.log.1

auth.log

我们先cat auth.log,看看能不能找到什么有效信息

屏幕截图 2025-04-23 171839

有很多,但是最重要的就是开头这几行,我们来逐句解析
Apr 23 08:12:55 ip-10-0-10-5 sshd[612]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=117.176.185.113 user=root

ip-10-0-10-5是主机名,ip-常见于云服务,表示主机名以ip地址命名,10-0-10-5是对应的IPv4地址,代表10.0.10.5,是一个私有地址,无法公网访问

sshd[612]是进程信息,sshd是守护进程,负责处理ssh连接请求,[612]是pid,是该sshd的唯一标识符

pam_unix(sshd:auth)pam_unix是Linux系统的可插拔认证模块sshd:auth表示该事件由sshd触发,处于身份验证阶段

authentication failure代表验证失败

logname=,因未成功登录,所以此处为空,未分配有效会话

uid=0表示进程的实际用户ID为0,即**rooteuid=0表示进程的有效用户ID为0。两个一起的意思是sshd以root权限运行**,这是正常行为。

tty=ssh是通过ssh建立的虚拟终端

ruser=远程用户名为空,表示未通过类rloginrsh的传统远程登录协议

rhost=117.176.185.113发起请求的客服端IP地址,即攻击者

user=root攻击者尝试以root用户登录

Apr 23 08:12:57 ip-10-0-10-5 sshd[612]: Failed password for root from 117.176.185.113 port 10068 ssh2

Failed password输入了错误的密码

for root登录root用户

from 117.176.185.113 port 10068从IP117.176.185.113端口10068(通常是临时端口)进行攻击

ssh2是协议版本,SSH-2

Apr 23 08:13:05 ip-10-0-10-5 sshd[612]: Accepted password for root from 117.176.185.113 port 10068 ssh2登陆成功

Apr 23 08:13:05 ip-10-0-10-5 sshd[612]: pam_unix(sshd:session): session opened for user root by (uid=0)

session opened:表示用户会话已成功开启

for user root:会话目标用户为 root,表明攻击者以最高权限获得了 Shell 访问权

by (uid=0):操作由 UID 0(即 root 用户自身)触发

Apr 23 08:13:05 ip-10-0-10-5 systemd-logind[427]: New session 1 of user root.

systemd-logind[427]:Systemd 的 logind 服务进程(PID 427),负责管理用户登录会话和设备

New session 1:表示为 root 用户创建了新的会话,会话 ID 为 1

user root:会话归属用户为 root

综合判断,这是登陆成功的日志,之后的攻击都在新会话内,该日志已经没有用了

auth.log.1

如果直接cat的话会输出很大的数据,很难从庞大的数据量中获取有效信息,这显然不是我们想要的,现在我们的目标就是Failed password for root,所以要筛选

`屏幕截图 2025-05-06 202901

cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more

cat auth.log.1直接查看auth.log.1的内容,可能会输出大量的数据不方便我们查看

grep -a "Failed password for root"grep "Failed password for root"筛选所包含的字符串的行,-a是grep的一种搜索模式,表示将当前文件视作文本文件

awk '{print $11}',awk是一种强大的文本处理工具,主要用于匹配行特定模式的行、提取特定字段等''是为了防止{}、$被awk解析,{}用于包含代码块,其内若有多条语句,可用;分开,print是awk的内置函数,形同C语言的printf,$11表示当前行的第11个字段,在标准状况下,日志的第11个字段通常是IP

sort是排序,-r,-n是sort的模式,-r表示逆序,-n表示按照数值排序

uniq是Linux系统的一个文本处理工具,用于检测和过滤重复的连续行,通常与sort连用-c的全称是--count在输出每行内容时,添加该行在输入中出现的次数

more的效果跟cat差不多,但是是分页输出,能有效防止一次性输出过多内容

最终效果如下

image-20250507132307374

flag要求是从小到大排序,故flag为

flag{192.168.200.2,192.168.200.31,192.168.200.32}

2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割

跟1差不多,不过就是把Failed换成了Accepted

cat auth.log.1 | grep -a "Accepted" | awk '{print $11}' | sort | uniq -c | sort -nr | more

image-20250507134020978

flag{192.168.200.2}

3.爆破用户名字典是什么?如果有多个使用","分割

我们可以在auth.log.1中找到形如Failed password for invalid user的字样,其后跟随的就是尝试爆破的用户名,字段仍旧是第11位,换成前文所提的字符串继续筛选即可

cat auth.log.1 | grep -a "Failed password for invalid user" | awk '{print $11}' | sort | uniq -c | sort -nr | more

image-20250507134542550

显然,from肯定是错误的,我们还得往前文中看from所在的行

image-20250507134959834

这个IP是不是很眼熟,就是第一题爆破root的IP,因为Invalied user后紧跟的空格,所以awk筛不出来,由图可知就是root,所以把from替换成root即可

flag{user,hello,root,test3,test2,test1}

4.登陆成功的IP共爆破了多少次

其实第一题已经给出答案了,就是4

flag{4}

5.黑客登陆主机后新建了一个后门用户,用户名是多少

cat auth.log.1 | grep -a "new user"

image-20250507135759741

test2就是新建的用户

flag{uesr}