玄机靶场 | 日志分析-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/