zero1234
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

前言
相信各个师傅都收到了消息,今年的护网将是常态化护网,周期非常的长。在这几天,已经有各大厂商开始陆续的收集简历了吧,相信以护网的薪酬,大家都想分一杯羹。那么我们学会应急响应是必不可少的!让我们也马上卷起来吧!
引用文献
正式开始
知识点一:明确Linux的日志存储位置
根据版本的不同,存储日志的地方也就不同
/var/log/
在Ubuntu以及Debian下可以查看auth.log日志文件/var/log/auth.log
在redhat以及Centos下可以查看secure日志文件/var/log/secure.log
该日志文件记录了所有与用户认证、权限管理相关的活动,例如:登录成功、失败,记录用户名、来源 IP、时间戳及认证方式。
通过:uname -a 可以查看出版本信息,直接丢到AI里问就好了
知识点二:如何对日志进行排查?
我们以Debian系统为例
这些gz的文件,其实就是被打包的日志文件。原因在于日志过了一段时间或者存储满后就会将一段时间的日志打包,保证存储空间。
gunzip -d auth.log* -- 解压所有名称前是auth.log匹配的日志
cat auth.log* -- 查看你所有与auth.log匹配的日志
以我们要寻找登录失败的IP为例:
Failed 是失败的字段,所以我们可以使用
cat auth.log* | grep "Failed"
筛选出所有含有Failed的日志信息,从而去进行排查
但这里有一个问题,在日志量大的时候,就没办法这样查了。
因为命令框中显示的字符有限,所以我们要换一种方式统计所有IP登录失败的次数
方式一:
日志文件拿下来,然后保存到execl,数据->分裂->分割符号为空格->分割完成后,直接筛选
但是这样十分的不专业~
方式二:
cat auth.log* | grep "Failed" | awk -F " " '{print $11}' | uniq -c
这样就要优雅许多
cat auth.log* | grep "Failed" 就不用介绍了
awk -F " " '{print $11}' 你可以理解为格式化进行统计awk -F为固定格式," "这里的双引号是分割符号的意思
以该图的第一行为例:
如果你双引号内填的是"空格",那么这些输出的行就会被分为:Jan、21、09:48:34... 这样的一列一列
一共有14列
如果你双引号内填的是09,那么这些输出的行就会被分为Jan 21 09、:48:34 yeqiu-virtual... 这样的两列。
'{print $11}'呢?
更好理解,我们以空格分为了14列,然后表示我们输出第11列的内容,11列正好是IP地址
awk -F " " '{print $11}',总结就是以空格为分割,输出第一列的内容。
当然我这里的图和IP没有关系,只是做一个类比~
uniq -c 作用简单,就是用来统计次数,| 就是命令执行的分隔符号,管道符。
这样就可以成功的快速统计了~
但是这样可能会有bug,建议使用sort 命令进行一个排序。
什么bug呢?换一张有IP的图给你们看看(这不算是bug,有兴趣去了解一下uniq -c的统计机制就明白了)
使用 cat auth.log* | grep "Failed" | awk -F " " '{print $3}' | sort | uniq -c 就可以很好的避免这个问题
如果我们想同时看两个内容呢?
grep -e 逻辑符号或的意思
cat auth.log* | grep -e "Failed" -e "Accepted"
如果不想看某个字符的结果呢?
cat auth.log* | grep -v -e "Failed" -e "Accepted"
加上-v就是不显示什么内容。这里就是不显示含有Failed的日志信息。
grep -i呢?这个就是不区分大小写,例如:cat auth.log* |grep "failed"
cat auth.log* |grep -i "failed"
加上-n,就会输出行号:grep -n
加上-a, 就可以看到二进制文件了: grep -a
加上-A 5 ,就可以看上下文,-A是看命中后的五条,-B是看命中前的五条,-C是看上下五条
还可以进行多个匹配,例如想看35448的端口,且是Failed
方式一:cat auth.log* | grep "Failed" | grep "35448"
方式二:cat auth.log* | grep -E "Failed.*35448" 这里-E表示正则表达
知识点三:日志排查条件表达式
上个知识点说了cat auth.log* | grep "Failed" | awk -F " " '{print $11}' | sort| uniq -c这样的一个语句
是将匹配Failed字符的日志给输出出来,但这样会有一个问题:
你看,这种信息,它不带IP,但是它也含有Failed,所以也会被输出出来
如果我们想只显示IP呢,可以加上条件表达式
cat auth.log* | grep "Failed" | awk -F " " '$6=="Failed"{print $11}' | sort| uniq -c '$6=="Failed"{print $11}'
这段条件很简单,'$6=="Failed"{print $11}',意义:第六行要等于Failed才输出第十一行的IP
这样就避免了其他的输出
还可以补充一个姿势:查看用户通过 sudo 执行的命令,也可以用我们上面的方式构造语句
sudo grep "COMMAND" /var/log/auth.log
知识点四:通过命令行日志进行排查
首先要明确存储的位置
那么我们就试试history:
这里就记录着我们刚刚输入的各种命令。
查看/home/yeqiu/.bash_history中的记录
但这个文件有个特殊的地方。我现在输入一个su root试试,记住这个记录到exit命令。
然后在看我们的日志文件:cat /home/yeqiu/.bash_history
诶,为什么没有记录su root呢???因为这个窗口对话还没有结束,只有我们关闭窗口或者输入exit退出会话,文件才会自动的进行一个记录
管理员的操作日志和普通账号操作日志存放位置又不一样了:
cat /root/.bash_history -- 查看管理员账户的会话记录
bash_history -- 查看当前用户的会话记录
cat /home/普通用户/.bash_history -- 查看普通用户的会话记录
history -c --只会清空当前的记录
rm -rf /root/.bash_history --才会删除当前日志的所有记录
这里有一个好用的命令:
sudo find /home -maxdepth 2 -name ".bash_history" -exec cat {} \;
直接遍历所有用户的日志记录
知识点五:其他日志信息的补充
apt-get 的命令记录日志,主要记录的就是
可以看到具体下载了什么,哪个用户下载的,什么时间下载的。
记录登录失败的日志
要通过last -f 去查看,否则查看不了,应该是二进制文件。。
Mysql日志
知识点六:如何排查中间件?如何排查中间件的日志?
apache的日志我们很好找
但是如果是tomcat的日志呢?
我们就需要先找到进程中在运行的tomcat的相关字段。
这条命令适用于一切当前在运行的文件,只有在运行才能通过ps -ef看到它的进程,从而进行筛选。
也就是说ps -ef中如果没有,说明没有在运行
当然如果说 ps -ef命令被替换了,就另说了~
按照这些信息就能找到文件夹
我们比较关注的是:站点配置文件、中间件配置文件
所以先不看日志
中间件配置文件
站点配置文件
日志文件
根据刚刚配置文件的信息,就能知道日志文件放在哪里了
这里写到了directory="logs",倒数第八行
这类日志中记录的是具体的访问信息,我们一般也只排查该日志
我们以刚刚看到的配置文件,与日志相对的看
根据刚刚的配置文件,将pattern信息和他一样对应着看,一共有7个字段,每个字段分别代表不同的意思,就可以快速的锁定我们需要的信息了。
%b 代表响应数据包的大小
如何统计呢???
我们可以统计ip次数嘛
cat localhost_access_log.20* | awk -F " " '{print $1}' | sort | uniq -c
这样不就很直观了
后期再用命令,去查看这些ip的行为
就可以知道了哪个是攻击者的ip了
grep "192.168.43.100" -Rn * -R 是递归搜索子目录,-n 显示行号
这样就可以查看这个ip 在哪个文件出现的比较多
当然也可以自己参考上面的构造,构造一个筛选ip的就好了
这样格式有了,就可以统计这个ip在哪个日志文件出现的次数最多~
问题一:攻击者用扫描器对WEB站带你进行了扫描,需要你提供攻击者什么时候开始扫描。
首先明确攻击者的扫描特征:高并发,时间没有断过
通过时间去进行一个定位,每分钟扫描多少次
这里肯定是输出第四行啦
根据这个我们使用
cat localhost_access_log.2018-11-15.txt | grep 192.168.43.101 | awk -F " " '{print $4}' | cut -c 14-18
cut -c 是什么作用。
是分割的作用,例如:09:12:32 将第14个字符:0,与第18个字符2做一个分割。
值得注意的是前面的不包含,后面的包含
这样就把时间给提取出来了,再用uniq -c 一统计,是不是就知道什么时间段的攻击次数最多了
举一反三:
1. 这里分析POST是干嘛?是找爆破密码的时间。
2. -i SELECT 这是为了分析sql注入。
好了到这里本章内容就结束了~
姿势总结
通用类
uname -a -->查看内核详细信息
为了防止命令被篡改,建议上传busybox,这就是一个linux的命令箱子
which top -->查询软件、命令具体位置,仅限制自带的就是那种环境变量配置的
file 命令,可以查看命令、软件具体属性,能够识别是否被替换了。file + 命令名称
gerp "apache.tar.gz" -Rn . 全局寻找某个文件位置
grep -r '/bin/bash' . 遍历当前目录下,含有/bin/bash的文件
进程类
top | 实时查看进程,CPU占用 |
ps -ef | 查看进程信息 |
ps -efww ps -ef I grep mysql | 可以看到具体信息,cmd命令信息 可以单独查看mysql的信息 |
lsof lsof -p 进程号 | 列举所有打开的资源 可以查看某个进程号的具体信息 |
kill -9 | 进程号 --》删除进程 |
网络信息类
netstat -pantu 和windows的netstat -ano效果一样
netstat -pantu | grep "ESTABLISHED"
恶意用户排查类
cat /etc/passwd -->查看所有用户信息
1 用户名
2 密码 -> X代替了,现在
3 uid 系统内核分配权限的时候,根据UID来进行分配的
4 主组 ID
5 用户的描述信息
6 用户的家目录
7 用户的解释器
awk -F: '$3==0 {print $1}' /etc/passwd 检查UID为0的用户。
grep -E '/nologin|/false' /etc/passwd。列出使用不可登录 Shell 的用户
awk -F: 'length($2)==0 {print $1}' /etc/shadow。检查密码字段为空或无效的用户
环境变量排查
cat /etc/profile
cat /etc/bash.bashrc -- 是全局的Bash配置文件
cat /etc/bash.bashrc | grep -E "alias|function|export" | # 检查可疑别名或环境变量 |
stat /etc/bash.bashrc | # 查看修改时间是否异常 |
md5sum /etc/bash.bashrc | # 对比已知正常版本的哈希值 |
/etc/profile -- 所有用户登录下
/root/.profile -- 只有root用户
/user/.profile -- 只有user用户
/用户名/bash.bashrc
服务排查
gerp "apache.tar.gz" -Rn .
通过启动的服务名进行一个排查,直接根目录下开始寻找。
排查/lib/systemd/systerm的文件
优先级高于系统默认的单元文件目录(如 /usr/lib/systemd/system),允许自定义配置覆盖默认行为。
# 查找非系统默认的单元文件
find /etc/systemd/system -name "*.service" -type f -exec ls -l {} \;
# 对比系统默认目录
diff /usr/lib/systemd/system/sshd.service /etc/systemd/system/sshd.service
计划任务排查&配置文件
crontab -l | 显示当前的用户的计划任务 |
在/var/spool/cron/crontabs目录下 | cat root |
cat /etc/crontab | 计划任务其中一个 |
cd etc/cr | ->使用Tab键补全,即可看到,各种的计划任务都要排查 |
/lib/systemd/system/etc/rc.local | 有一些版本会开启,有一些不开,要排查 |
目录/etc/systemd/system 查看自启动服务的相关配置文件
恶意文件排查
find /usr/bin -perm -4000 -type f,排查权限文件。
系统核心命令目录,常存放高权限工具(如 mount、umount)
find /bin -perm -4000 -type f
**/sbin** 系统管理命令目录,可能包含特权工具(如 fdisk、iptables)
find /sbin -perm -4000 -type f
**/usr/sbin** 类似 /sbin,存放管理员工具(如 useradd、visudo)
find /usr/sbin -perm -4000 -type f
**/tmp** 临时文件目录,攻击者可能在此植入恶意 SUID 文件
find /tmp -perm -4000 -type f
**/dev/shm** 共享内存目录,攻击者可能利用其可写性隐藏 SUID 后门
find /dev/shm -perm -4000 -type f
**/var/www** Web 根目录,需检查是否有非预期的可执行文件被赋予 SUID 权限find /var/www -perm -4000 -type f
Find
find . -type f -newermt "2025-01-01 16:00" -a -not -newermt "2025-02-25 16:05"
find + 目录 + -type f -newermt 找寻的开始时间 -a -not -newermt 找寻的截止时间
日志类
在Ubuntu以及Debian下可以查看auth.log日志文件
在redhat以及Centos下可以查看secure日志文件
1.通过 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS/RHEL)查看用户通过 sudo 执行的命令:
sudo grep "COMMAND" /var/log/auth.log
该日志的记录信息为:
成功登录:记录用户通过 SSH、本地终端等方式成功登录的详细信息,包括时间戳、登录方式(如密码或密钥认证)、来源 IP 和用户账号,关键字如:Accepted
失败登录:包括密码错误、无效用户等失败尝试,常用于检测暴力破解攻击。关键词如 Failed password 或 authentication failure
sudo 命令使用:记录用户通过 sudo 执行特权命令的行为,包括执行时间和具体命令。关键字:sudo
这里以:Ubuntu为例子
gunzip -d auth.log*
cat auth.log* -- 查看你所有的auth.log的日志,这个是关于系统的登录的日志,爆破的日志
登录失败的所有IP
cat auth.log* | grep "Failed"
cat auth.log* | grep "Failed" | awk -F " " '{print $11}' | uniq -c
可以进行所有的一个排序
cat auth.log* | grep "Failed" | awk -F " " '{print $3}' | sort | uniq -c
cat auth.log* | grep -e "Failed" -e "Accepted"
grep
加上-v就是不显示什么内容。
还有-i,这个就是不区分大小写,例如:cat auth.log* |grep "failed"
加上-n,就会输出行号:grep -n
加上-a, 就可以看到二进制文件了: grep -a
加上-A 5 ,就可以看上下文,-A是看命中后的五条,-B是看命中前的五条,-C是看上下五条
例如想看35448的端口,且是Failed
方式一:cat auth.log* | grep "Failed" | grep "35448"
加上-c,可以帮忙统计次数
条件
cat auth.log* | grep "Failed" | awk -F " " '$6=="Failed"{print $11}' | sort | uniq -c
可以指定搜索Faild--》grep "Failed",然后且第六行要匹配Failed--》$6=="Failed"
命令行日志
/home/yeqiu/.bash_history中的记录,
cat /root/.bash_history -- 查看管理员账户的会话记录
bash_history -- 查看当前用户的会话记录
cat /home/普通用户/.bash_history -- 查看普通用户的会话记录
其他日志补充
history.log -- > 这个看apt install的日志
btmp --> 看登录失败的日志
查看btmp日志需要使用:last -f btmp
中间件日志
ps -ef | grep tomcat 查找中间件的位置
统计爆破日志,要先进入到中间件的文件当中
cat localhost_access_log.20* | awk -F " " '{print $1}' | sort | uniq -c
grep "192.168.43.100" -Rn * -R 是递归搜索子目录,-n 显示行号
cat localhost_access_log.2018-11-15.txt | grep 192.168.43.101 | awk -F " " '{print $4}' | cut -c 14-18
Docker提权
user@ip-10-0-10-5:/tmp$ id
uid=1000(user) gid=1000(user) groups=1000(user),1001(docker)
user@ip-10-0-10-5:/tmp$ ps -aux |grep docker
root 491 0.0 3.4 1439544 70632 ? Ssl 07:06 0:00 /usr/bin/dockerd
docker run -v /:/mnt -it alpine
chroot /mnt bash
Web的linux查杀
find ./ -name "*.php" | xargs grep "eval(" 提取出有危险函数的格式
打包当前文件下的目录
tar -czvf src.tar.gz ./*
总结
本篇文章所说的都是技巧,这些技巧都是通用的。但要明确我们的步骤
1.确定操作系统
2.确定要排查的文件位置
3.构造合适的语句进行筛查
最后祝大家天天开心、快快乐乐~
免责声明
本文所包含的内容仅用于教育和研究目的,旨在提高信息安全意识,帮助用户了解网络安全防护的重要性。
文章中提及的任何渗透测试技巧、工具或方法,仅供合法授权的安全研究和测试使用。在进行任何渗透测试或安全测试之前,请确保您已获得相关系统或网络所有者的明确授权。
本文作者不对任何因使用文章内容而导致的非法活动、损害或其他不良后果承担任何责任。读者在实施任何技术之前应确保遵守所有适用的法律法规。
本文内容不支持或鼓励任何形式的恶意攻击、未授权的入侵或网络犯罪。
本文内容仅限于教育用途,不得以任何方式用于未经授权的网络安全攻击或破坏行为。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)