知攻善防Linux Web2靶场入侵排查

前景需要:看监控的时候发现webshell告警,领导让你上机检查你可以救救安服仔吗!!

1,提交攻击者IP

2,提交攻击者修改的管理员密码(明文)

3,提交第一次Webshell的连接URL(http://xxx.xxx.xxx.xx/abcdefg?abcdefg只需要提交abcdefg?abcdefg)

3,提交Webshell连接密码

4,提交数据包的flag1

5,提交攻击者使用的后续上传的木马文件名称

6,提交攻击者隐藏的flag2

7,提交攻击者隐藏的flag3

一、环境配置

靶场来自知攻善防实验室公众号:回复靶机Linux2

image-20240322131714449

打开即可,靶机的启动界面如下,使用了多种方法无法进入桌面,根据该靶机的文件大小推测,该靶机没有安装图形界面

image-20240322131908432

二、账户安全

检查/etc/passwd/etc/shadow文件:

1
2
cat /etc/passwd | grep -v nologin        #查看可以登陆的用户
awk '/\$1|\$6/{print $1}' /etc/shadow #查看可以远程登陆的用户
image-20240322132303444

并无其他用户,查看下/home目录

image-20240322132512661

有一个www用户,这莫不是web用户?存在于/home目录下,属于是普通用户吗?查看www用户的shell环境

image-20240322132715892

该www确实是属于普通用户,但是shell环境属于/sbin/nologin,不能进行正常登陆

通过who命令查看下当前该机器登陆的用户有哪些(tty本地登陆 pts远程登录)

image-20240322165437895

只有本地登录的roor 用户

通过last命令排查最后登陆的时间,发现192.168.20.1这个可疑IP进行过多次远程登陆

image-20240322212519592

三、历史命令排查

1
history          #查看root历史命令

但是这里有点坑,看不到上面的历史记录,是滑动不了的

image-20240322133029147

1
history | more       #通过more进行一页页命令的翻看

image-20240322133330907

这里是关闭了防火墙,然后安装了宝塔,去www目录下看了看日志

image-20240322133631229

这里是在wwwroot/127.0.0.1下面删除了flag1 跟 1,然后删除了pe9.sql文件,这个应该是数据库的一个sql文件,还执行过docker ps命令,这台机器还运行着docker ?

image-20240322134129029

这里对网站根路径下的.api文件夹做了一些粘贴,之后从100行开始,逐渐不对劲起来

在尝试增加一个flag3{5LourqoFt5d2zy0VUoVPJb0meVmoKgcy60Z}的用户,但是在useradd: invalid user name 'flag3{5LourqoFt5d2zy0VUoVPJb0meVmoKgcy60Z}'的错误信息来看,应该是没有添加上。之后还对/etc/profile文件进行了编辑,应该是做了某些配置变量的修改,之后source /etc/profile重新加载配置变量

image-20240322135823186

这里,root 的密码被进行了更改,并且有一个可疑的wp文件被执行,后面是我的排查操作

那么针对flag3那个用户有没有创建成功,再看一下/etc/passwd文件

image-20240322140038907

确实不存在flag3用户,只存在www和mysql 的普通用户

四、端口、进程排查

1
netstat -antlp | more

image-20240322140142066

1
2
pa -aux  #查看进程
top -c -o %CPU #实时查看高CPU进程

image-20240322140225599

image-20240322140307183

五、开机启动项排查

1
2
3
4
/etc/rc.local
/etc/profile
~/.bashrc

image-20240322140615795

image-20240322163635815

/etc/profile文件中发现flag3="flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}"

image-20240322191053732

六、定时任务排查

1
2
3
4
5
6
7
crontab -l
cat /var/spool/cron/*
cat /etc/crontab
cat /etc/cron.d/*
cat /etc/cron.daiy/*
cat /etc/cron.weekly/*
cat /etc/cron.monthly/*

image-20240322163802313

七、日志排查

1、系统安全日志审计

安全日志文件存放路径:/var/log/secure,是ssh登陆成功与否的一个安全日志

1
2
cat secure | grep "Failed" | awk '{print $11}' | sort | uniq -c | sort -nr   #统计IP爆破次数
cat secure | grep "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr

image-20240322170358123

发现IP192.168.20.1这个IP 通过密码认证进行了三次登陆

2、web日志审计

在之前的排查中知道该机器配置有宝塔,即存在web服务,查看web 日志,路径:/www/wwwlogs/access.log

依然利用more命令进行查看

image-20240322171405425

但是这样太多太杂不好分析,我们在靶机上利用python2 快速开启一个http服务,将日志文件下载到本地进行分析

1
2
3
4
5
systemctl status firewalld
systemctl stop firewalld
python --version
ip a
python -m SimpleHTTPServer

image-20240322172153579

我们重点分析access.log文件:

image-20240322172833614

之后用在线日志分析网站进行逐一分析

image-20240322172941689

开头是127.0.0.1的IP访问,时间在3月7日,到49条日志开始,出现了192.168.20.1这个局域网IP 的操作,开始时间在12:05:16

image-20240322174608055

也是对/phpmyadmin进行访问,持续到162条日志,但是时间全部在3月7日进行的,最后时间停留在12:30:04

image-20240322173043519

从163条日志开始,时间来到3月20日,IP是本地的127.0.0.1,在phpmyadmin中对数据库进行了很多的操作,一直持续到日志结尾

image-20240322174505560

这个日志很奇怪,在异常文件排查过程中,ssh公钥文件是在3月20日10:30:24被修改的,而在日志中192.168.20.1只在3月7日出现过

使用360星图也未发现有攻击行为,只做了一些简单的流量分析

image-20240322175203210

八、异常文件排查

1、tmp临时文件排查

正常文件,有好多session文件

image-20240322163935584

2、ssh目录排查

image-20240322164150956

root的.ssh文件夹下存在公钥,其内容在3月20日10:30:24被修改,其权限在3月22日21:09:44被修改

3、root家目录排查

image-20240322191230933

发现之前历史命令中排查到的wp 可执行文件,以及存在一个.pcapng文件,有关这个.pcapng文件,属于是流量包文件,通过这个文件,我们可以追踪跟该机器交互的流量数据,从而更好的进行排查

4、.api 文件夹排查

之前在历史命令中看到有对.api文件夹做过手脚,我们看一下

api文件夹和.api文件的内容相同,大小也相同,用diff命令进行比对

1
diff file1.txt file2.txt

image-20240323154529579

运气不错,第一个文件就比对出来了差异,找到了隐藏的$flag2 = "flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}";

而其他文件都是一模一样,并无其他隐藏内容

image-20240323154950942

5、wp 文件

在历史命令中,该wp 文件是由go_build_untitled.exe的一个文件改名而来,go_build 像是由go 语言编译而来

image-20240322192037606

该文件是3月20日15:34:04的时间被修改,这个时间可能是黑客进行重命名的时间点,那这个文件是干嘛的,尝试执行下image-20240322192532734

我擦,原来是题解,搞错了搞错了

5、.pcapng文件流量分析

那我们把目光放在这个啥.pcapng 流量包文件上,将该文件利用python2开启一个http服务,传到本地,需要关闭防火墙

1
2
3
4
5
systemctl status firewalld
systemctl stop firewalld
python --version
ip a
python -m SimpleHTTPServer

image-20240322193011749

原来名字是数据包1.pcapng,那么是否存在其他 .pcapng 文件呢?

1
find / -name *.pcapng 2>/dev/null

image-20240322193131851

不存在其他的流量包文件了,我们用Wireshark工具打开该数据包,成功打开(有关WireShark 的简单使用:【流量分析】流量抓包工具WireShark的基本使用

image-20240322193324754

在之前的排查过程中,知道192.168.20.1这个IP出现过,现在看来确定是恶意IP

image-20240322194206533

可以在视图中将时间调整为年月日时间的形式,并进行http和源IPip.src == 192.168.20.1的过滤,发现黑客GET访问过flag1,追踪HTTP流,发现flag1{Network@_2020_Hack}

image-20240322194559969

再一步步进行排查,黑客对index.php文件进行了多次访问,不点不知道,一点吓一跳

image-20240322195313788

这不是妥妥的webshell管理工具蚁剑的流量特征,webshell木马的密码是Network2020,通过HTTP追踪,一步步查看黑客通过蚁剑都做过哪些事

image-20240322200419738

可以看到,在3月20日14:33:35的时候,pe9.sql文件依然是存在的,那么我们在历史命令中排查的时候,发现有人通过命令将该文件删除了

image-20240322201407323

14:37:24的时候发现新增了shell.php文件

image-20240322201526755

14:37:43的时候发现新增version2.php文件

image-20240322201714475

这里,是一个PHP冰蝎马的内容,显示默认密码rebeyond

image-20240322202040481

在后续中全部是对version2.php文件的访问,那么这里,推测version2.php是冰蝎马

image-20240322202232074

确实是冰蝎马的流量特征,version2.php确认是后面黑客上传的木马文件,不管是请求包还是相应包都是加密传输

黑客对该文件的访问持续到14:40:32,感觉这里很迷,因为结合在账户安全中查看的last命令 ,恶意IP在14:3015:04的时候分别进行过登陆。至于冰蝎流量解密,本人水平有限,尝试解密失败,后面便不在追究,如果哪位师傅解密成功,还望告知,本人感激不尽!

后面没有了一点线索,还是把目光放在了流量包上,看到除了http流量,还存在许多ssh 流量,丢,这思路不就打开了!我说这个靶场怎么奇奇怪怪的,原来这个靶场考察并不是追踪溯源入侵的整个流程,重点在流量这块。

我们知道,在wireshark 中解密ssh 流量需要用到ssh 的私钥,而黑客应该是通过公钥进行的登陆,那么私钥怎么弄?

我们把id_ed25519.pub移走、留下公钥,用私钥尝试ssh 登陆,成功,说明该私钥可以登陆成功

image-20240323122229620

我们把这个私钥下载下来添加到wireshark中:在【编辑】—【首选项】—【Protocols】—【ssh】

image-20240323122936704

我了个大豆,这样不行,ssh流量依然是加密状态,咳咳,这里就研究到这里,有师傅能解密的还望告知,本人感激不尽!

九、命令替换排查

1
2
3
4
5
6
7
echo $PATH
rpm -Vf /usr/sbin/* > 1.txt #由于环境限制,我们先把执行结果保存下来再进行查看
cat 1.txt | more

#S 关键字代表文件大小发生了变化
#5 关键字代表文件的 md5 值发生了变化
#T 代表文件时间发生了变化

这里的话,有几个是是存在改变的文件,但是并非后门这种

image-20240323161737232

十、被修改的密码

重新看了一下/etc/shadow,发现除了www用户还存在mysql 用户,再联想到之前web日志中的phpmyadmin的访问,猜测密码会不会藏在数据库中

image-20240323163717316

在数据库的配置文件lib/config.inc.php文件中找到数据库的账号密码

image-20240323164407899

这里的话,我们到本地的机器上进行远程连接

image-20240323164658694

连接成功,只存在两个数据库,一路向下就好了,先查看一下x2_user_group的用户组表,管理员的用户组ID是1

image-20240323165225766

再查看x2_user表的内容,但是太多了,我们先查看都有哪些字段

1
select group_concat(column_name) from information_schema.columns where table_name='x2_user';

image-20240323164949448

有好多好多,看不过来,换了一个MySQL图形管理来查看

image-20240323165927883

可以看到这个peadmin用户的usergroupid值为1,那么该用户大概率是管理员,对他的密码进行解密

image-20240323170427835

成功获得明文密码:Network@2020

十一、通关密码

image-20240323170858240

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1,提交攻击者IP
192.168.20.1

2,提交攻击者修改的管理员密码(明文)
Network@2020

3,提交第一次Webshell的连接URL(http://xxx.xxx.xxx.xx/abcdefg?abcdefg只需要提交abcdefg?abcdefg)
index.php?user-app-register

3,提交Webshell连接密码
Network2020

4,提交数据包的flag1
flag1{Network@_2020_Hack}

5,提交攻击者使用的后续上传的木马文件名称
version2.php

6,提交攻击者隐藏的flag2
$flag2 = "flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}";

7,提交攻击者隐藏的flag3
flag3="flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}"