目录

应急响应-linux日志分析

# linux日志分析

# 前置知识补充

常见日志文件

Linux系统中的日志文件通常存储在/var/log目录下,记录下我感兴趣的日志文件

  • /var/log/syslog:记录系统的各种信息和错误。
  • /var/log/auth.log:记录身份验证相关的信息,如ssh登录和认证失败。
  • /var/log/httpd/:记录Apache HTTP服务器的访问和错误日志(若安装了Apache)。
  • /var/log/nginx/:记录Nginx服务器的访问和错误日志(若安装了Nginx)。
  • /var/log/secure:记录安全相关的消息。
  • /var/log/kern.log:记录内核生成的日志信息。
  • /var/log/dmesg:记录系统启动时内核产生的消息。
  • /var/log/boot.log:记录系统启动过程中的消息。
  • /var/log/messages:记录系统的广泛消息,包括启动和应用程序信息。

一些重点日志

/var/log/auth.log

auth.log 会记录ssh登录,sudo权限等内容。它通常包含系统关于用户登录、登录失败、权限提升(如 sudo 操作)、认证请求、会话启动和关闭等方面的信息。

  • 用户注册:"new user",创建新的用户
  • 用户登录:成功的 SSH 登录(通过 sshd 服务),登录的时间、用户名、来源 IP 地址等信息
  • 登录失败:失败的 SSH 登录尝试,登录的时间、用户名、来源 IP 地址等信息
  • 用户注销:用户注销信息,包括成功或失败的会话关闭
  • 权限提升:用户尝试使用 sudo 或其他权限提升命令,包括成功或失败的尝试
  • su 命令(切换用户):用户通过 su 命令切换用户的日志,记录目标用户和源用户
  • SSH 公钥认证:使用公钥认证登录过程,会记录登录成功失败的信息

/var/log/syslog

系统级别的日志文件,可能会包含 useradd、adduser 或 usermod 等命令的相关记录。

Nov 18 12:34:56 server useradd[12345]: new user 'testuser' added
1

/var/log/nginx/access.log

Nginx 的访问日志,记录了所有客户端对 Nginx 服务器的访问请求,包括请求的 URL、请求方法、客户端 IP 地址、响应状态码、响应大小等信息。

# 环境及要求

账号root密码linuxrz

ssh root@IP

  • 1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
  • 2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
  • 3.爆破用户名字典是什么?如果有多个使用","分割
  • 4.登陆成功的IP共爆破了多少次
  • 5.黑客登陆主机后新建了一个后门用户,用户名是多少

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

linux日志系统会保存ssh的记录,一般来说,SSH登录尝试会记录在 /var/log/auth.log.1(这是固定的)

常见的爆破攻击痕迹

  • 攻击者在用暴力破解的方式测试不同的用户名和密码
  • Failed password for root from 192.168.1.100 记录到某ip爆破root用户
  • Failed password for invalid user admin from 192.168.1.100 记录到某ip尝试爆破不存在的admin用户
Nov 18 12:34:56 server sshd[12345]: Failed password for root from 192.168.1.100 port 54321 ssh2
Nov 18 12:34:57 server sshd[12345]: Failed password for invalid user admin from 192.168.1.100 port 54321 ssh2
Nov 18 12:34:58 server sshd[12345]: Connection closed by authenticating user root 192.168.1.100 port 54321 [preauth]
1
2
3

查看auth.log文件,找找包含"Failed password for root"的记录,提取ip

cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more
1
  • cat auth.log.1 将日志文件 auth.log.1 的内容输出到标准输出
  • grep -a "Failed password for root" 过滤日志文件中的内容,仅保留包含字符串 Failed password for root 的行
  • awk '{print $11}' 在SSH日志中,第 11 列通常是登录尝试来源的 IP 地址,提取ip
  • sort 对提取出的 IP 地址进行排序
  • uniq -c 统计每个IP爆破次数
  • sort -nr 按次数降序排序
  • more 分页显示结果
4 192.168.200.2
1 192.168.200.32
1 192.168.200.31
1
2
3

flag{192.168.200.2,192.168.200.32,192.168.200.31}

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

关于ssh登录成功的日志记录信息

Ubuntu/Debian 系统

日志存储在 /var/log/auth.log 中,登录成功的记录类似:

Nov 18 12:45:10 server sshd[12345]: Accepted password for root from 192.168.1.100 port 54321 ssh2
Nov 18 12:45:10 server sshd[12345]: pam_unix(sshd:session): session opened for user root by (uid=0)
1
2

CentOS/RHEL 系统

日志存储在 /var/log/secure 中,登录成功的记录类似:

Nov 18 12:45:10 server sshd[12345]: Accepted password for root from 192.168.1.100 port 54321 ssh2
Nov 18 12:45:10 server sshd[12345]: pam_unix(sshd:session): session opened for user root by (uid=0)
1
2

找一下成功登录的ip记录

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

flag{192.168.200.2}

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

在ssh日志中,登录失败的记录中,会记录尝试的用户名

Nov 18 12:34:57 server sshd[12345]: Failed password for invalid user admin from 192.168.1.100 port 54321 ssh2
1

查一下爆破的用户名

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

执行的结果:

5 user
5 hello
5 from
1 test3
1 test2
1 test1
1
2
3
4
5
6

这里是错的,惯性思维直接简单修改了一下上面的命令。在匹配类似日志时,错误的匹配到了一个from,这是为什么?把包含Failed password for invalid user的行整个都打出来看看

ctf@linux$ cat auth.log.1 | grep -a "Failed password for invalid user"
Aug  1 07:40:50 linux-rz sshd[7461]: Failed password for invalid user test1 from 192.168.200.35 port 33874 ssh2
Aug  1 07:41:04 linux-rz sshd[7465]: Failed password for invalid user test2 from 192.168.200.35 port 51640 ssh2
Aug  1 07:41:13 linux-rz sshd[7468]: Failed password for invalid user test3 from 192.168.200.35 port 48168 ssh2
Aug  1 07:46:41 linux-rz sshd[7475]: Failed password for invalid user user from 192.168.200.2 port 36149 ssh2
Aug  1 07:46:47 linux-rz sshd[7478]: Failed password for invalid user user from 192.168.200.2 port 44425 ssh2
Aug  1 07:46:50 linux-rz sshd[7480]: Failed password for invalid user user from 192.168.200.2 port 38791 ssh2
Aug  1 07:46:54 linux-rz sshd[7482]: Failed password for invalid user user from 192.168.200.2 port 37489 ssh2
Aug  1 07:46:56 linux-rz sshd[7484]: Failed password for invalid user user from 192.168.200.2 port 35575 ssh2
Aug  1 07:46:59 linux-rz sshd[7486]: Failed password for invalid user hello from 192.168.200.2 port 35833 ssh2
Aug  1 07:47:02 linux-rz sshd[7489]: Failed password for invalid user hello from 192.168.200.2 port 37653 ssh2
Aug  1 07:47:04 linux-rz sshd[7491]: Failed password for invalid user hello from 192.168.200.2 port 37917 ssh2
Aug  1 07:47:08 linux-rz sshd[7493]: Failed password for invalid user hello from 192.168.200.2 port 41957 ssh2
Aug  1 07:47:10 linux-rz sshd[7495]: Failed password for invalid user hello from 192.168.200.2 port 39685 ssh2
Aug  1 07:47:26 linux-rz sshd[7525]: Failed password for invalid user  from 192.168.200.2 port 37013 ssh2
Aug  1 07:47:30 linux-rz sshd[7528]: Failed password for invalid user  from 192.168.200.2 port 37545 ssh2
Aug  1 07:47:32 linux-rz sshd[7530]: Failed password for invalid user  from 192.168.200.2 port 39111 ssh2
Aug  1 07:47:35 linux-rz sshd[7532]: Failed password for invalid user  from 192.168.200.2 port 35173 ssh2
Aug  1 07:47:39 linux-rz sshd[7534]: Failed password for invalid user  from 192.168.200.2 port 45807 ssh2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

通过日志可以发现,最后匹配到from的列因为用户名为空,从而匹配到了后面的from

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

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

通过要求2可以知道,ip:192.168.200.2在成功登上root了,找一下他的爆破记录

cat auth.log.1 | grep -a "Failed password for root" | grep -a "192.168.200.2"
1
Aug  1 07:47:13 linux-rz sshd[7497]: Failed password for root from 192.168.200.2 port 34703 ssh2
Aug  1 07:47:18 linux-rz sshd[7499]: Failed password for root from 192.168.200.2 port 46671 ssh2
Aug  1 07:47:20 linux-rz sshd[7501]: Failed password for root from 192.168.200.2 port 39967 ssh2
Aug  1 07:47:22 linux-rz sshd[7503]: Failed password for root from 192.168.200.2 port 46647 ssh2
1
2
3
4

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

查看新建的用户的常见步骤:

确定日志文件:

通常与用户登录和用户管理活动相关的日志文件是 /var/log/auth.log 或其备份文件如 /var/log/auth.log.1

搜索创建用户的关键字

使用 grep 命令搜索与创建用户相关的关键字,如 new user。这样可以找到所有新建用户的日志条目。

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

提取新用户信息

从日志中提取新用户的详细信息,包括用户名、创建时间等。

例如,假设你得到了如下输出:

Aug  1 07:50:45 linux-rz useradd[7551]: new user: name=test2, UID=1000, GID=1000, home=/home/test2, shell=/bin/sh
1

这条日志显示了创建的新用户 test2

分析执行上下文

确认新用户的创建是否由合法用户执行,或是否有可疑的远程登录记录。

可以使用以下命令查找所有用户登录的情况,以确定是否有可疑的登录行为:

grep "Accepted" /var/log/auth.log.1
1

进一步确认

结合其他日志文件,如 /var/log/syslog,查看是否有异常的命令执行或系统变更。

**总结

  • 确定相关日志文件
  • 搜索特定关键字,找到新用户创建的记录。
  • 提取并分析详细信息,确认新用户的合法性。
  • 结合其他日志文件,确认是否有异常活动。

/var/log/auth.log里查询到新建两个用户,不知道哪个是后门用户

Aug  1 07:50:45 linux-rz useradd[7551]: new user: name=test2, UID=1000, GID=1000, home=/home/test2, shell=/bin/sh
Aug  1 08:18:27 ip-172-31-37-190 useradd[487]: new user: name=debian, UID=1001, GID=1001, home=/home/debian, shell=/bin/bash
1
2

这道题先创建的test2,后创建的debian,为什么说黑客创建的用户是test2呢?

参考、致谢:

最后一次更新于: 2024/11/19, 08:08:53