玄机靶场 | 日志分析-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 passwordAccepted publickey
  • 登录失败Failed passwordFailed publickeyinvalid 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.1auth.log.2.gz

先解压auth.log.2.gz文件

1
gzip -d auth.log.2.gz

gzip命令解压后,会删除原本的.gz压缩文件,并生成新的文件

然后筛选出包含Accepted passwordAccepted 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 passwordFailed 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/

作者

WayneJoon.H

发布于

2025-08-19

许可协议