前置知识
题目明说了是Linux日志分析,那我们就需要知道一些Linux日志知识
首先,我们都知道Linux的日志主要存放于/var/log
当中,但是Linux中又存在以下文件/文件夹
以下是这些文件的功能
文件/目录名 | 功能描述 |
---|---|
alternatives.log |
记录 update-alternatives 系统选择器的操作记录,用于管理默认应用程序。 |
amazon/ |
AWS 相关日志目录,如 EC2 实例元数据日志、CloudWatch agent 日志等。 |
apt/ |
与 apt 包管理器相关的操作日志,如安装、升级、移除包的详细记录。 |
auth.log |
记录系统认证、授权、登录相关日志,如 sudo 、ssh 登录等。 |
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
,看看能不能找到什么有效信息
有很多,但是最重要的就是开头这几行,我们来逐句解析
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,即**root
, euid=0
表示进程的有效用户ID为0。两个一起的意思是sshd以root权限运行**,这是正常行为。
tty=ssh
是通过ssh建立的虚拟终端
ruser=
远程用户名为空,表示未通过类rlogin
、rsh的
传统远程登录协议
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
,所以要筛选
`
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
差不多,但是是分页输出,能有效防止一次性输出过多内容
最终效果如下
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
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
显然,from
肯定是错误的,我们还得往前文中看from所在的行
这个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"
test2就是新建的用户
flag{uesr}