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

前言
相信各个师傅都收到了消息,今年的护网将是常态化护网,周期非常的长。在这几天,已经有各大厂商开始陆续的收集简历了吧,相信以护网的薪酬,大家都想分一杯羹。那么我们学会应急响应是必不可少的!让我们也马上卷起来吧!
引用文献
正式开始
知识点一:应急准备
uname -a -->查看内核详细信息
例如:Linux ip-10-0-10-3 4.19.0-25-cloud-amd64 #1 SMP Debian 4.19.289-1 (2023-07-24) x86_64 GNU/Linux
这个内核信息,就是版本:
RHEL/CentOS:/var/log/secure
Debian/Ubuntu:/var/log/auth.log
像这个就Debian版本,只有版本找对了,我们才能知道对应的存储条件。所以
知识点二:系统进行排查
命令:top,它可以展示进程的占用
1.表示总占用率,如果占用满了就算百分之一百,也就是100us
2.表示这个应用占用进程的占用率,这里是占用0.2中的占用率的百分之1.7
通过这些,如果我们发现cpu总占用率很高,但缺没有占用高的应用,说明这个进程可能被隐藏了!
进程隐藏
which top
mkdir " ",我们创建一个这样的目录
mkdir "TAB-> mkdir " ",这样就能快速的进入这个目录不用空格
mv /usr/bin/top ./" ",移动该top文件夹到该目录下
返回到~目录下后,vim /usr/bin/top -->新建了一个/usr/bin/top文件
在vim中
#!/bin/bash
/自己的为准/" "/top | grep -v "dockerd"
#grep用于筛选,例如:grep "dockerd" 这就是将USER为docker的命令展示出来,
加上 -v则将dockerd的命令隐藏起来
这里以我的mysql进程为例
保存退出
chmod +x /usr/bin/top
top -->展示进程,这下就没有mysql进程了,我们就成功隐藏了mysql的进程
如何排查这类文件呢?
进程隐藏file类型
可以看到真正的top文件的类型和假冒的文件类型是不一致的,所以使用top前可以先查看一下文件类型就能排查了
还可以使用PS进行查看
ps -ef就可以查看出详细的信息:
非常的好用。
losf就是看进程所打开的文件
ps -ef I grep mysql
用来查看你想查看的进程,根据中间的进程号
lsof -p 进程号
就能看到对应的应用了
进而进行快速的排查
为了防止命令被篡改,建议上传busybox,这就是一个linux的命令箱子,能保证你查询的命令不被篡改
如何关闭可疑进程?
总结:
top --》查看各种进程
ps -ef --》查看进程号
kill -9 进程号 --》删除进程
知识点三:系统网络排查
netstat -pantu
这个就很好记住了,和windows的netstat -ano的效果是一样的
当然你看它的提示,我们需要切换到root用户使用最佳
这一段就是进程id了。
这样的可以根据进程的id,快速锁定恶意连接的进程。
知识点四:恶意账号排查
etc/password
以:为分割,我一一解释
1 用户名
2 密码 -> X代替了,现在
3 uid 系统内核分配权限的时候,根据UID来进行分配的,例如uid=0 超级管理员 root,注意这个用户只能有一个,这是规定。
如果有其他用户为0,那么它就是恶意用户。
Windows中查看的命令为:
windows中被称为SID,结尾的最后一个-后面的数字就是SID。
而在Linux中UID>=1000一般是新创建的用户。
用户的唯一数字标识符(UID):
0 表示 root 用户(超级用户)。
1-999 通常为系统保留的 UID。
1000+ 分配给普通用户。
4 主组 ID
5 用户的描述信息
6 用户的家目录
7 用户的解释器
bin/bash --》支持编程、定义变量、定义for循环
bin/sh --》 不行
usr/sbin/nologin -->不允许登录,会有提示
usr/sbin/false -->不允许登录,不会提示
创建账号:
useradd mirageuser
passwd mirageuser
然后我们通过vim /etc/passwd -- 将uid改为0
然后登录mirageuser,可以看到这就是root的权限:
成功查询到是root权限,这里名字变了:/home/mirage,因为文章不是一个时间写的所以图有出入不碍事。
思路:当我们用root权限的时候,为了保持root权限,保证root账号密码不会更改,那么我们就需要创建一个新的超级管理员账户,进行一个维权
当然可能有人觉得这个用户太明显了,一查就能查到
如果是这样的一条用户呢?你能看出来是恶意的账户吗?
但这样的一个用户我们是连接不上的,为什么呢?因为它不是管理员账户,只有管理员账户才能远程登录。
那我们应该怎么做呢?
首先,我们看sudo systemctl这类的命令。
不知道你们发现了没有,当我们使用一个普通用户的时候,使用sudo,会要求我们输入密码,因为要使用管理员权限。
这个密码是谁的?管理员账号的密码吗?当然不是,是普通用户的密码!!!
逻辑是不是很奇怪,我使用管理员权限,但用的却是普通用户的密码进行一个验证,说不通啊!
要明白这里面的道理,我们要了解一个文件,/etc/sudoers
这个文件规定了,哪些用户允许去执行sudo这个指令的。
可以发现这是一个440权限的文件,就是默认情况下,它是一个只读的文件,不能修改
所以我们要给他增加一些权限,再做修改
这四个ALL=(ALL:ALL) ALL分别是什么意思呢?
1 表示在什么连接的情况下可以使用sudo命令,比如ssh连接,这里写ALL就是所有连接
2和3:表示以哪些用户或哪些用户组执行sudo命令。例如:ALL=(user1) ALL,这样就会以user1的权限去执行。这里ALL就是所有用户,包括root的权限
4 表示哪些sudo命令可以进行提取。例如我设置为ALL=(ALL:ALL) ls 那么只有sudo ls 是可以使用管理员权限的,而其他的sudo命令就无法使用管理员权限了
所以我们这里给systemd-evetlog ALL=(ALL:ALL) ALL,来保证它拥有sudo命令的使用权~
修改完成后要将权限进行一个改回
这就是我们要去关注排查的一个点。
总结:
1.通过/etc/passwd去查看有无两个0权限的账户,来排查恶意的用户
2.通过/etc/sudoers去查看有无账户的权限为四个ALL
知识点五:环境变量排查
cat /etc/profile
cat /etc/bash.bashrc
这两个文件都是属于一个环境变量的持久化
就是登录后就会自己启动的东西
如果我们在这两个文件中放入一个一句话,或者是一个木马文件的后门。
那么每次用户登录的时候就会去执行他们,从而变成一个持久化的后门。
进入攻击队的视角--建议给被攻击机先创建一个快照再进行实验:
F是小写的,图片错了
然后将这个文件上传到被攻击机上。
启用一个监听的服务
这样就成功启动了服务,然后我们那边双击即可。
这样就成功了。
我们先使用ctrl+c退出监听,然后再run开启监听,这样刚刚的连接就断了
首先chmod 777 /etc/profile修改文件权限。(stat 文件名可以查看文件权限)
然后在/etc/profile文件下添加
让他后台运行
模拟一下用户登录,或者直接重启再登录
成功的获取到了shell。
而其他的环境变量的文件还有许多,例如:
关于路径的区别
/etc/profile -- 所有用户登录下
/root/.profile -- 只有root用户
/user/.profile -- 只有user用户
&符号,非常必要,否则可能会执行不了进程,这个符号代表后台运行,对于执行进程有稳定性的作用
nobup 的补充。
nobup 新起一个进程去执行它,对内网穿透的代理有用。
nohup /root/apache.tar.gz &
总结:
我们要着重的去排查我们的环境变量文件是否被人动过手脚
/etc/profile
/etc/bash.bashrc
/用户名/.profile
/用户名/bash.bashrc
知识点六:服务排查
systemctl start ssh
相信大家对这个命令并不陌生。
就是开启ssh的命令
但有没有人想过systemctl start为什么可以开启,而systemctl statusssh为什么又可以看见服务状态
这都是由原因的,systemctl到底是一个什么东西?
我们可以通过该文件进行查看
分别解释一下:
Unit
其他两个不用管,可有可无
Service
1 systemctl startssh
2 systemctl stop ssh
其实从这里就能看出来,本质上systemctl执行的东西就是类似一个提前写好的脚本。
Install
这块内容最重要,没有这块内容就无法启动一个服务
上面的表示启动模式,这里就是多用户的一个模式,多用户好理解的,比如root、user这两个用户就叫多用户。
下面的是一个别名,这个更好理解,外号嘛
那么我们复制一个文件
修改它
最重要的是这一段,改完以后,那么我们的
systemctl start是不是就成了启动木马文件了???
enable 你刚刚创建的服务文件名称。
重新载入配置服务文件
systemctl enable test使得我们刚刚的test开机启动,
这就是如何利用配置服务文件进行持久化了。
这里图片不一样没关系,mirage就是test
总结:
1.如果说你知道恶意文件的名称:gerp "apache.tar.gz" -Rn . 从当前目录下开始寻找
也可以更简单一些:ls | grep "apache.tar.gz" 方式虽然不一样,但效果差不多。
gerp "apache.tar.gz" -Rn / 从根目录下开始寻找
2.确认时间通过find命令去找
知识点七:计划任务排查
通过这个去编辑一个计划任务
crontab -e
然后我们输入2
就这样编辑:
这五个* 呢分别代表,分钟,小时,天,后面两个可以暂时不用管。然后指定我们要运行的木马文件,记得加上&
这里就让他每一分钟运行一次这个木马
设置完成后,就会每一分钟接收到一次反弹的shell
很神奇~
这就是计划任务。
如何去排查呢?
crontab -l
就会显示当前的用户的计划任务
往下滑就能看到了
或者可以直接去目录中寻找
使用cat root就能看到了
所以我们只需要前往/var/spool/cron/crontabs#进行一个计划任务的排查即可。
最后删除即可rm -rf root
不仅是刚刚的哪些,还有分时间来放置的计划任务。这些都要进行排查
输入cd etc/cr ,然后进行一个Tab键的补全,就可以看到这些计划任务了
cat /etc/crontab,这个也是计划任务,也可以在其中进行一个编写
还有一个计划任务的配置文件比较特殊,默认是不开启的,但在一些版本会开启
/lib/systemd/system
这个文件我们看看就知道为什么特殊了
因为服务文件里面它没有[Install]
前面说过,这块内容最重要,没有这块内容就无法启动一个服务
所以它是没有开启的,如果这个开启的话,你就需要对vim /etc/rc.local 进行查看,因为这里是恶意配置的重灾区。
总结:
对于计划任务我们需要排查的地方
- crontab -l
- /var/spool/cron/crontabs查看该目录下的文件
- cat /etc/crontab
- cd etc/cr->使用Tab键补全,即可看到
- /etc/rc.local
这五个地方!!!!
知识点八:恶意文件排查
suid :777是否等于最高?
想要知道如何排查恶意文件,就要先知道,777是否是最高权限。
答案:不是文件的最高权限
一个问题:进程被执行被运行什么身份。一般的理解来说,是执行进程的用户。
但是如果你这个进程被赋予了SUID那么就会以SUID所有者的用户去执行这个进程。
首先我们创建了一个文件,赋予它权限为000
那么我们使用cat查看,普通账户
使用root账户
因为root权限即使文件是最小权限,root也是可以读写的,记住这个关键点。。。
首先,我们把cat命令拷贝一个到当前目录下
然后给他加上所有者的权限
u+s
用之前的cat还是不够,用当前目录下的cat命令呢?
可以了,注意这里的用户就是普通用户。
值得注意的是这个SUID只作用于二进制文件,如果给其他的文件例如txt其实是没有用的。
所以最高的权限应该是7777,而不是777
而黑客是怎么利用的呢?find命令可以作为提权的命令
find /etc/passwd -exec whoami \;
比如这条命令
以root来运行显示root账户权限
那么以普通用户就是普通用户权限
如果我给find赋予SUID呢????
which find查找find所属位置。
明白了嘛,这就是SUID提权。
简单来说find命令支持去执行其他的命令。
如何排查呢?
find/usr/bin-perm-4000 -type f
这条命令用来筛选包含4000权限的文件。例如2000也能找到只要是4000权限以下的都能找到。而且4755也包含在内。
总结:
这个我们就需要知道文件的权限,一般来说SUID的权限都是4755,所以使用命令:
find/usr/bin-perm-4000 -type f即可。
知识点九:应急响应技巧
使用find命令,按照时间去排查文件
首先我们可以通过stat 文件名,对文件进行查看
中文版
英文版
使用命令:
find . -type f -newermt "2025-01-01 16:00" -a -not -newermt "2025-02-25 16:05"
find + 目录 + -type f -newermt 找寻的开始时间 -a -not -newermt 找寻的截止时间
就可以快速锁定了木马文件了~
如果报错的话可以加上 2>/dev/null
总结:
find . -type f -newermt "2025-01-01 16:00" -a -not -newermt "2025-02-25 16:05" 2>/dev/null
恶意文件的名称
名称:gerp "apache.tar.gz" -Rn . 从当前目录下开始寻找
也可以更简单一些:ls | grep "apache.tar.gz" 方式虽然不一样,但效果差不多。
gerp "apache.tar.gz" -Rn / 从根目录下开始寻找
这样的全局搜索,可以让我们快速排查
总结
Linux的排查相比Windows来说是相对复杂的,因为要记很多的命令,且版本的不同会导致一些日志、计划任务等文件存储的位置不同。
所以在Linux的排查中:
1.首先保证命令不会被篡改
2.保证Linux的版本信息
3.多收集信息,将进程ID、时间、名称
免责声明
本文所包含的内容仅用于教育和研究目的,旨在提高信息安全意识,帮助用户了解网络安全防护的重要性。
文章中提及的任何渗透测试技巧、工具或方法,仅供合法授权的安全研究和测试使用。在进行任何渗透测试或安全测试之前,请确保您已获得相关系统或网络所有者的明确授权。
本文作者不对任何因使用文章内容而导致的非法活动、损害或其他不良后果承担任何责任。读者在实施任何技术之前应确保遵守所有适用的法律法规。
本文内容不支持或鼓励任何形式的恶意攻击、未授权的入侵或网络犯罪。
本文内容仅限于教育用途,不得以任何方式用于未经授权的网络安全攻击或破坏行为。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
