linux应急常用命令+技巧总结

2021-03-23 15:28:39 浏览数 (1)

不输的办法只有一个,就是不上场

常用命令

代码语言:javascript复制
top # 命令可以直接看到进程实时情况。
ps aux --sort=pcpu | head -10 # 查看cpu占用率前十的进程,有时候可以发现top发现不了的东西
netstat -anpl  # 检查当前存在的连接与监听端口
ps -ef #查看当前系统上运行的所有进程与其使用的命令
w # 查看活动用户
who # 查看当前登录用户(tty 本地登陆  pts 远程登录) /var/log/utmp
last # 查看用户登录日志,查看我们系统的成功登录、关机、重启等情况 /var/log/wtmp
lastb # 查看登陆失败的用户日志 /var/log/btmp
lastlog # 查看所有用户登陆日志 /var/log/lastlog
lsof -i :3306 # 查看谁在使用某个端口
lsof -nPi 查看内部对外的网络连接
Strace 集诊断、调试、统计一体的工具。  `strace -f -p pid` 查看进行的行为
busybox是应急常用的工具。 如果系统命令被替换了可以使用此命令来查看系统相关信息

查看History详细

设置history显示时间和用户名,更方便排查谁在什么时间执行了什么

代码语言:javascript复制
export HISTTIMEFORMAT="%F %T `whoami` "  #设置history显示时间和用户名

查看文件改动

检查最近创建的php、jsp文件和上传目录 例如要查找24小时内被修改的JSP文件:

find ./ -mtime 0 -name "*.php"

代码语言:javascript复制
stat /etc/passwd #查看密码文件上一次修改的时间,如果最近被修改过,那就可能存在问题。
cat /etc/passwd | grep -v nologin #查看除了不可登录以外的用户都有哪些,有没有新增的
cat /etc/passwd | grep x:0 #查看哪些用户为root权限,有没有新增的
cat /etc/passwd | grep /bin/bash #查看哪些用户使用shell

与测试环境目录做对比

diff -r {生产dir} {测试dir}

账号

代码语言:javascript复制
1、查询特权用户特权用户(uid 为0)
root@drunk:~#  awk -F: '$3==0{print $1}' /etc/passwd
root
2、查询可以远程登录的帐号信息
root@drunk:~# awk '/$1|$6/{print $1}' /etc/shadow
root:$6$xJe1PRKN$U33UxLJ6zr3Iar4TQuaLdLSu9cmEo3DfKwE6mBmzq2Du5QeW5UOa6545wPADMpWbPrCSALA6cU6FSU8IcE9XwL1:18652:0:99999:7:::
root@drunk:~#

域名hosts

有一些挖矿程序会修改 /etc/hosts文件,请看一下其中内容是否被更改过 前两天在另外的项目组上发现的某个挖矿病毒就会修改hosts文件 这是从那台服务器上提取的一些恶意的配置内容

代码语言:javascript复制
0.0.0.0 aliyun.one
0.0.0.0 evle.org

日志

secure是应急中最常用的文件,主要记录系统存取数据的文件。日志默认存放位置:/var/log/,日志总是能发现一些蛛丝马迹。

日志文件

说明

/var/log/cron

记录了系统定时任务相关的日志

/var/log/cups

记录打印信息的日志

/var/log/dmesg

记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息

/var/log/mailog

记录邮件信息

/var/log/message

记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件

/var/log/btmp

记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看

/var/log/lastlog

记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看

/var/log/wtmp

永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看

/var/log/utmp

记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询

/var/log/secure

记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中

注:secure 在一些较新的linux已经被rsyslog替换,下面命令中的/var/log/secure 可以尝试换成/var/log/auth.log

代码语言:javascript复制
1、定位有多少IP在爆破主机的root帐号:    
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1n";}'|uniq -c|sort -nr

2、登录成功的IP有哪些:     
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
或者last命令,它会读取位于/var/log/wtmp的文件,并把该文件记录的登录系统的用户名单,全部显示出来。

登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 

3、增加一个用户kali日志:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure 

4、删除用户kali日志:
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
# grep "userdel" /var/log/secure

5、su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

sudo授权执行:
sudo -l
Jul 10 00:43:09 localhost sudo:    good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

常用的shell命令

find、grep 、egrep、awk、sed

1、grep显示前后几行信息:

代码语言:javascript复制
    标准unix/linux下的grep通过下面參数控制上下文:
    grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行
    grep -B 5 foo file 显示foo及前5行
    grep -A 5 foo file 显示foo及后5行
    查看grep版本号的方法是
    grep -V

2、grep 查找含有某字符串的所有文件

代码语言:javascript复制
    grep -rn "hello,world!" 
    * : 表示当前目录所有文件,也可以是某个文件名
    -r 是递归查找
    -n 是显示行号
    -R 查找所有文件包含子目录
    -i 忽略大小写

3、如何显示一个文件的某几行:

代码语言:javascript复制
cat input_file | tail -n  1000 | head -n 2000
#从第1000行开始,显示2000行。即显示1000~2999行

命令替换后门

黑客会替换替换top、ps等命令

检测 stat命令查看文件状态并且使用md5sum命令查看文件hash并将其与正常文件hash进行比较。如果确定被替换,使用正常文件替代坏文件即可

工具

1.利用自动化检测程序rookithunter进行检测 rookithunter可以自动化检查主机上可能存在的rookit木马文件,与被篡改的命令等,找到被篡改的命令后可以选择删除命令,然后重新安装命令。

代码语言:javascript复制
# centos
yum install -y rkhunter

# ubuntu
apt-get install rkhunter

rkhunter --update #更新rkhunter版本
rkhunter --propupd #更新rkhunter的特征数据库

# 常见命令
rkhunter --check --sk #自动检测每个部分中间不需要暂停
rkhunter --check #自动检测每个部分,每监测完一个部分中断一次,输入enter之后会继续检测下个部分
rkhunter -c --sk --rwo #自动检测并只显示告警信息
webshell查杀

使用Webshell查杀工具 Windows下D盾等,Linux下河马等

代码语言:javascript复制
河马webshell查杀:http://www.shellpub.com
深信服Webshell网站后门检测工具:http://edr.sangfor.com.cn/backdoor_detection.html

参考

https://bypass007.github.io/Emergency-Response-Notes/LogAnalysis/第2篇:Linux日志分析.html

欢迎师傅加个好友位(๑•̀ㅂ•́)و✧

0 人点赞