玄机靶场 | 日志分析-ssh日志分析
前言
SSH连接端口222,账号:root,密码:toor
SSH日志分析常用思路
SSH日志分析是应急响应与安全审计的核心。通过审查配置文件和登录日志,可以快速发现未授权访问、定位攻击源并核查安全基线。标准的分析流程如下:
1. 审查配置:确认“规则”
分析日志前,先看SSH服务的核心配置文件 /etc/ssh/sshd_config
,了解允许哪些行为
- 访问控制:检查
AllowUsers
,AllowGroups
等指令,确定谁可以登录 - 认证方式:检查
PasswordAuthentication
是否开启,是否仅允许密钥登录 - 高危设置:检查
PermitRootLogin
是否允许root直接登录
2. 分析日志:发现“事件”
根据系统,主要分析以下认证日志(包括 .1
, .gz
等归档文件):
- Debian/Ubuntu:
/var/log/auth.log
- CentOS/RHEL:
/var/log/secure
重点关注包含以下关键字的日志条目:
- 成功登录:
Accepted password
或Accepted publickey
等 - 登录失败:
Failed password
、Failed publickey
或invalid user
等 - 用户切换/提权:
session opened for user
(常用于追踪sudo
等操作)
3. 聚合统计:提取“情报”
使用命令行工具(如 grep
, awk
, sort
, uniq
)从海量日志中提取有价值的信息,回答关键问题:
- 攻击来源:哪个IP发起了最多的失败尝试?
- 爆破目标:哪个用户名被攻击次数最多?
- 成功渗透:哪些用户和IP成功登录了系统?
- 行为画像:梳理单个IP或用户的完整活动时间线
索引
题目列表
步骤#1
可以登录 SSH 的账号数量是多少
我们先了解什么是sshd_config
文件
sshd_config
是 SSH 服务器(sshd)的主配置文件,用于配置 SSH 服务端的各种参数和行为
- 设置 SSH 服务器监听的端口号(默认22端口)
- 指定允许或禁止的登录方式(密码认证、公钥认证等)
- 是否允许 root 账户远程登录
- 配置登录超时时间、日志级别、安全策略等
- 控制哪些用户或用户组可以通过SSH登录
查看/etc/ssh/sshd_config
文件
1 | cat /etc/ssh/sshd_config |
在最下面那里可以看到只允许SSHD_USER
用户组和root
用户组进行ssh登录
然后在/etc/group
筛选出这两个组
1 | grep -E '^(root|SSHD_USER):' /etc/group |
这个命令的意思是:
-E
参数表示启用扩展正则表达式,支持更多高级符号和语法,如“|”表示或、“()”用于分组、“+”表示重复等,使表达式更简洁易读,匹配功能更强大^(root|SSHD_USER):
表示匹配以“root:”或“SSHD_USER:”开头的行
root组后面为空,表示这个组没有附加用户(也就是没有把别的用户名手动加进组内),默认为root。然后SSHD_USER
组有两个用户,分别为toor和root,去重之后可以登录 SSH 的账号就只有toor和root用户
1 | flag{2} |
步骤#2
SSH日志中登录成功的日志条数是多少(去除自己登陆产生的两次)
auth.log
是Linux系统记录身份认证相关信息的日志文件,包括用户登录成功、失败、ssh连接、公钥认证和使用sudo等操作的记录。它帮助管理员监控登录情况和发现安全问题,是安全审计的重要依据
其中auth.log
表示最新日志,auth.log.1
表示上一轮未压缩归档,auth.log.N.gz
表示更早的归档(N为数字)
进入log日志文件夹,查看当前目录文件
1 | cd /var/log && ls |
我们要分析的是已归档文件,也就是auth.log.1
和auth.log.2.gz
先解压auth.log.2.gz
文件
1 | gzip -d auth.log.2.gz |
用gzip
命令解压后,会删除原本的.gz
压缩文件,并生成新的文件
然后筛选出包含Accepted password
或Accepted publickey
的日志记录即可
- Accepted password:表示通过密码验证成功登录
- Accepted publickey:表示通过公钥认证成功登录
1 | grep -E "Accepted password|Accepted publickey" auth.log.1 auth.log.2 | wc -l |
1 | flag{103} |
步骤#3
SSH日志中登录成功次数最多的用户的用户名是什么
用awk
筛选登录成功的日志记录即可
1 | grep -E "Accepted password|Accepted publickey" auth.log.1 auth.log.2 | awk '{print $9}' | sort | uniq -c |
可以看到SSH日志中登录成功次数最多的用户名是toor
1 | flag{toor} |
步骤#4
SSH日志中登录失败次数最多的用户以及登录使用的ip是什么(flag:flag{用户名,ip})
直接筛选出包含Failed password
或Failed publickey
的记录,然后awk
查看用户名和IP地址即可
1 | grep -E "Failed password|Failed publickey" auth.log.1 auth.log.2 | awk '{print $9, $(NF-3)}' | sort | uniq -c | sort -n |
awk '{print $9, $(NF-3)}'
表示打印第9列(用户名)和倒数第4列(登录来源IP,通常日志中IP在倒数第4列)sort
对结果进行排序uniq -c
统计相同用户名和IP的出现次数sort -n
表示按照 数字大小 进行排序,而不是按字母ASCII顺序
可以看到SSH日志中登录失败次数最多的用户是root,登录使用的ip是87.163.111.11
1 | flag{root,87.163.111.11} |
玄机靶场 | 日志分析-ssh日志分析
https://waynejoon.github.io/posts/Xuanji-CTF-SSH-Log-Analysis/