Linux系统排查

文章的内容是对Linux的文件路径,以及排查Linux的系统主机问题命令
Linux应急响应的操作

1. Linux敏感文件

1.1 敏感文件路径

关于路径的说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/redhat-release //系统版本
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/var/lib/mlocate/mlocate.db //全文件路径
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/porc/self/cmdline //当前进程的cmdline参数
/proc/sched_debug //配置文件可以看到当前运行的进程并可以获得对应进程的pid
/proc/pid/cmdline //则可以看到对应pid进程的完整命令行。
/proc/net/fib_trie //内网IP
/proc/self/environ //环境变量
/proc/self/loginuid //当前用户
/var/lib/mlocate/mlocate.db //mlocate.db数据库里存储了本地所有文件的配置信息
locate mlocate.db config //把包含config的路径全输出出来
locate mlocate.db webapps
locate mlocate.db www

.bash_history //重用使用过的命令
.zsh_history //使用zsh终端的命令历史纪录文件
.psql_history
.mysql_history //数据库历史命令

读history: ../../root/.bash_history
暴破所有用户的.bash_history:../../../home/§root§/.bash_history
1
2
3
4
5
6
7
8
9
10
11
/etc/passwd // 账户信息
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

可以观察哪些用户可以进行登录
/etc/shadow // 账户密码文件
root:$1$v2wT9rQF$XSpGgoB93STC4EFSlgpjg1:14181:0:99999:7:::
$id$salt$密文
id代表的是使用不同的加密算法,不同的系统使用的算法也不尽相同。salt是加密的时候需要用到盐。最后就是密文。
注意:如果密码字符串为*,表示系统用户不能被登入,为!表示用户名被禁用,如果密码字符串为空,表示没有密码。

账户密码文件加密格式:

格式算法
$1md5
$2ablowfish
$2yblowfish
$5sha-256
$6sha-512
1.2 Linux主机凭证文件
1
2
3
4
5
6
7
/root/.ssh/id_rsa  //私钥

/root/.ssh/authorized_keys //公钥存储文件
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥

使用:ssh -i id_rsa root@IP地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private-key 信息发现

> cat ~/.ssh/authorized_keys
cat ~/.ssh/identity.pub
cat ~/.ssh/identity
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
cat /etc/ssh/ssh_config
cat /etc/ssh/sshd_config
cat /etc/ssh/ssh_host_dsa_key.pub
cat /etc/ssh/ssh_host_dsa_key
cat /etc/ssh/ssh_host_rsa_key.pub
cat /etc/ssh/ssh_host_rsa_key
cat /etc/ssh/ssh_host_key.pub
cat /etc/ssh/ssh_host_key
1.3 Linux应用配置文件

获取到网站的相关配置信息,包括站点配置、数据库配置等等,也可进一步获取到网站源码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
java
/WEB-INF/web.xml
/WEB-INF/classes/applicationContext.xml
/WEB-INF/classes/xxx/xxx/xxx.class
core.jar如果遇到Shiro站点,可以直接利用全路径找到core.jar,去下载core.jar,下载后反编译搜索Base64.decode直接找key,进而getshell。

tomcat
/usr/local/tomcat/conf/tomcat-users.xml

nginx
/www/nginx/conf/nginx.conf
/etc/nginx/nginx.conf
/usr/local/nginx/conf/nginx.conf
/usr/local/etc/nginx/nginx.conf

apache
/etc/httpd/conf/httpd.conf
/etc/apache2/apache2.conf
/etc/apache2/httpd.conf

redis
/etc/redis.conf

ssh
/etc/ssh/sshd_config
1.4 Linux应用日志文件

利用日志文件获取网站后台地址、api接口、备份、等等敏感信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tomcat
可以先找到/tomcat/bin/catalina.sh,里边有log的配置路径
/webapps/ROOT/logs/catalina.out

apache
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/httpd/access_log
/etc/httpd/logs/access_log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log

nginx
/var/log/nginx/access.log
/var/log/nginx/error.log
/usr/local/var/log/nginx/access.log
/usr/local/nginx/logs

2. Linux应急排查命令

查看当前登录系统的信息

1
2
3
> who    #查看当前登录用户(tty本地登陆  pts远程登录)
> w #查看系统信息,想知道某一时刻用户的行为
> uptime #查看登陆多久、多少用户,负载

查询特权用户特权用户(uid 为0)

1
> awk -F: '$3==0{print $1}' /etc/passwd

查找远程可以登录的账户

1
2
3
4
5
> awk '/\$1|\$5|\$6/{print $1}' /etc/shadow

$1:MD5(长度 22个字符)
$5:SHA-256(长度 43 个字符)
$6:SHA-512(长度86 个字符)

检查sudo权限

1
cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL"

删除或锁定账号

1
2
3
> usermod -L rooot #禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
> userdel rooot #删除user用户
> userdel -r rooot #将删除root用户,并且将/home目录下的root目录一并删除

检查异常端口

使用netstat 网络连接命令,分析可疑端口、IP、PID等信息。

1
> netstat -tunlp | less

抓包分析

1
> tcpdump -c 10 -q //精简模式显示 10个包

使用ps命令检查可疑的进程

1
> ps -ef

查超系统中占用资源最高的资源

1
> top

发现异常进一步检查

1
2
3
4
5
> ps eho command -p $PID  //查看该进程启动的完整命令行
> readlink /proc/$PID/cwd //查看该进程启动时候所在的目录
> ls -l /proc/$PID/exe //查看下pid所对应的进程文件路径
> strings -f /proc/$PID/environ | cut -f2 -d '' //查看该进程启动时的完整环境变量:
> lsof -p $PID //列出该进程所打开的所有文件

检查系统服务

Linux系统服务管理,CentOS7使用systemd控制 CentOS6之前使用chkconfig控制。

检查开机自启的服务

1
2
3
4
5
> systemctl list-unit-files --type=service | grep "enabled"
//对于systemd服务管理器来说,可以通过下述方式查看开机自启的服务

> chkconfig --list | grep "3:on\|5:on"
//chkconfig就是CentOS6以前用来控制系统服务的工具,查看服务自启动状态

检查启动项脚本

命令查看下开机启动项中是否有异常的启动服务。

1
> cat /etc/rc.local

利用计划任务进行权限维持,可作为一种持久性机制被入侵者利用。检查异常的计划任务,需要重点关注以下目录中是否存在恶意脚本。

1
2
3
4
5
6
7
8
9
/var/spool/cron/* 
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*

3. Linux其他排查命令

查找开发工具/语言/支持

1
2
3
4
find / -name perl*
find / -name python*
find / -name gcc*
find / -name cc

查找上传文件功能

1
2
3
4
5
find / -name wget
find / -name nc*
find / -name netcat*
find / -name tftp*
find / -name ftp

谢谢大家观赏文章!
------ 本文结束感谢您的阅读 ------