应急响应靶机练习-Linux2
1.背景
前景需要:看监控的时候发现webshell告警,领导让你上机检查你可以救救安服仔吗!!
挑战内容:
(1)提交攻击者IP
(2)提交攻击者修改的管理员密码(明文)
(3)提交第一次Webshell的连接URL(http://xxx.xxx.xxx.xx/abcdefg?abcdefg只需要提交abcdefg?abcdefg)
(4)提交Webshell连接密码
(5)提交数据包的flag1
(6)提交攻击者使用的后续上传的木马文件名称
(7)提交攻击者隐藏的flag2
(8)提交攻击者隐藏的flag3
2.环境准备
(1)创建虚拟机
(2)登录虚拟机
账号密码:root/Inch@957821.
(ps:这个密码很坑,我一开始试了很多遍都不对,密码第一个字符是大写的i,最后一个字符是点. )
(3)XShell连接虚拟机
这里使用xshell是为了方便操作,好看一点
3.开始
(1)last
发现192.168.20.1多次登录
[root@web-server ~]# last
root pts/0 192.168.76.1 Sat Mar 15 23:48 still logged in
root tty1 Sat Mar 15 23:46 still logged in
reboot system boot 3.10.0-1160.el7. Sat Mar 15 23:45 - 23:48 (00:02)
root pts/1 192.168.20.1 Wed Mar 20 15:36 - crash (360+08:09)
root pts/0 192.168.20.1 Wed Mar 20 15:04 - 15:39 (00:34)
root pts/0 192.168.20.1 Wed Mar 20 14:30 - 15:04 (00:33)
reboot system boot 3.10.0-1160.el7. Wed Mar 20 14:29 - 23:48 (360+09:19)
root pts/1 localhost Wed Mar 20 10:30 - 10:30 (00:00)
root pts/0 192.168.20.1 Wed Mar 20 07:59 - crash (06:30)
reboot system boot 3.10.0-1160.el7. Wed Mar 20 07:58 - 23:48 (360+15:49)
root pts/0 192.168.20.1 Thu Mar 7 15:36 - crash (12+16:21)
root pts/0 192.168.20.1 Thu Mar 7 15:25 - 15:36 (00:11)
root pts/0 192.168.20.1 Thu Mar 7 14:39 - 15:25 (00:45)
root pts/0 192.168.20.1 Thu Mar 7 14:07 - 14:09 (00:01)
reboot system boot 3.10.0-1160.el7. Thu Mar 7 14:06 - 23:48 (373+09:42)
root pts/0 192.168.20.1 Thu Mar 7 11:37 - 11:52 (00:15)
reboot system boot 3.10.0-1160.el7. Thu Mar 7 11:36 - 23:48 (373+12:11)
root pts/0 192.168.20.1 Mon Mar 4 09:48 - down (00:01)
root tty1 Mon Mar 4 09:47 - 09:50 (00:02)
reboot system boot 3.10.0-1160.el7. Mon Mar 4 09:47 - 09:50 (00:03)
(2)lastlog
[root@web-server ~]# lastlog
Username Port From Latest
root pts/0 192.168.76.1 Sat Mar 15 23:48:06 +0800 2025
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
operator **Never logged in**
games **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
systemd-network **Never logged in**
dbus **Never logged in**
polkitd **Never logged in**
sshd **Never logged in**
postfix **Never logged in**
ntp **Never logged in**
www **Never logged in**
mysql **Never logged in**
(3)grep "Failed" /var/log/secure*
[root@web-server ~]# grep "Failed" /var/log/secure*
/var/log/secure:Mar 20 15:36:25 web-server sshd[4377]: Failed password for root from 192.168.20.1 port 1378 ssh2
(4)grep "Accepted" /var/log/secure*
同(1)
[root@web-server ~]# grep "Accepted" /var/log/secure*
/var/log/secure:Mar 20 10:30:25 web-server sshd[4111]: Accepted publickey for root from 127.0.0.1 port 55976 ssh2: ED25519 SHA256:5wjncpQo9MtvNtk8t3A1CdOx2horMhYTghdrKk4ey0k
/var/log/secure:Mar 20 14:30:21 web-server sshd[2365]: Accepted password for root from 192.168.20.1 port 9509 ssh2
/var/log/secure:Mar 20 15:04:22 web-server sshd[4068]: Accepted password for root from 192.168.20.1 port 12423 ssh2
/var/log/secure:Mar 20 15:36:28 web-server sshd[4377]: Accepted password for root from 192.168.20.1 port 1378 ssh2
/var/log/secure:Mar 15 23:48:06 web-server sshd[2550]: Accepted password for root from 192.168.76.1 port 61662 ssh2
/var/log/secure-20240320:Mar 4 09:48:23 web-server sshd[8287]: Accepted password for root from 192.168.20.1 port 11035 ssh2
/var/log/secure-20240320:Mar 7 11:37:01 web-server sshd[1436]: Accepted password for root from 192.168.20.1 port 7796 ssh2
/var/log/secure-20240320:Mar 7 14:07:42 web-server sshd[2375]: Accepted password for root from 192.168.20.1 port 7322 ssh2
/var/log/secure-20240320:Mar 7 14:39:51 web-server sshd[5216]: Accepted password for root from 192.168.20.1 port 13752 ssh2
/var/log/secure-20240320:Mar 7 15:25:23 web-server sshd[5673]: Accepted password for root from 192.168.20.1 port 3129 ssh2
/var/log/secure-20240320:Mar 7 15:36:49 web-server sshd[5849]: Accepted password for root from 192.168.20.1 port 10490 ssh2
/var/log/secure-20240320:Mar 20 07:59:13 web-server sshd[2476]: Accepted password for root from 192.168.20.1 port 5237 ssh2
(5)history
history里面有很多关键信息,是很重要的命令。
[root@web-server ~]# history
1 systemctl disable firewalld
2 systemctl disable --now firewalld
3 setenforce 0
4 vim
5 vi /etc/sysconfig/selinux
6 poweroff
7 ip a
8 cd /var/
9 ls
10 cd ww
11 cd /home/
12 ls
13 mysql
14 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
15 BT
16 bt
17 ls
18 cd /www/
19 cd wwwroot/
20 ls
21 cd 127.0.0.1/
22 ls
23 cd ..
24 ls
25 cd ..
26 ls
27 cd wwwlogs/
28 ls
29 cat 127.0.0.1.log
30 cd nodejs/
31 ls
32 cd ..
33 ls
34 cd tcp-error.log
35 cat tcp-error.log
36 cat nginx_error.log
37 cat access.log
38 ls
39 cat 127.0.0.1.log
40 cd /www/
41 ls
42 cd wwwlogs/
43 ls
44 cat 127.0.0.1.log
45 bt
46 ls
47 cd /www/wwwroot/
48 ls
49 cd 127.0.0.1/
50 ls
51 rm -rf flag1 1
52 ls
53 rm -rf version2.php
54 ls
55 hardlink
56 hwclock
57 ls
58 docker ps
59 rm -rf pe9.sql
60 ls
61 cd vendor/
62 ls
63 cd ..
64 ls
65 cd ..
66 sl
67 ls
68 ls -a
69 cd 127.0.0.1/
70 ls
71 ls -a
72 vim .api
73 ls
74 ls -a
75 mkdir .api
76 ls
77 ls -a
78 cd .api/
79 l
80 ls
81 cd ..
82 ls
83 cd ap
84 cd api/
85 ls
86 cp * ../.api/
87 ls
88 cd ..
89 ls
90 cd .api/
91 ls
92 vim mpnotify.php
93 yum install vim
94 ls
95 vim alinotify.php
96 cat /etc/shadow
97 who
98 w
99 history
100 useradd flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
101 env
102 $flag3 = [root@web-server .api]# useradd flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
103 useradd: invalid user name 'flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}'
104 $flag3 = flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
105 vim /etc/profile
106 source /etc/p
107 source /etc/profile
108 env
109 history
110 q
111 e
112 eexir
113 exit
114 history
115 ls
116 chmod +X go_build_untitled.exe
117 l
118 chmod +x go_build_untitled.exe
119 ls
120 ./go_build_untitled.exe
121 ls
122 mv go_build_untitled.exe wp
123 ls
124 ./wp
125 passwd root
126 clear
127 ./wp
128 clear
129 pwd
130 ./wp
从上面18-29中多次发现/www目录,并且有127.0.0.1.log文件,可以跟webshell的访问和上传有关。
使用scp命令将虚拟机中的文件复制到本机中。
scp root@192.168.76.128:/www/wwwlogs/127.0.0.1.log D:\桌面
(6)挑战一
查看日志文件,发现几乎都是ip192.168.20.1的记录,判定是攻击者ip
(7)挑战二
要查看管理员密码,密码应该存在mysql数据中,同时,在/www网站目录查看是否存在mysql连接信息。
思路:在/www目录发现/wwwroot,因为含有root,含有配置信息可能性更大,进入/wwwroot,再进入127.0.0.1,使用命令 grep "MYSQL" -r /www/wwwroot/127.0.0.1递归搜索关键字,成功发现配置信息(PS:当然不是一开始就搜索MYSQL,是慢慢试出来的,一开始可能是mysql,Mysql等等)
成功发现mysql配置信息
连接数据库
查看数据库
选择kaoshi数据库
查看x2_user表,有多个用户,暂时无法确认哪个是管理员
查看x2_user_group表,groupid为1代表管理员,确认peadmin用户为管理员
将userpassword字段拿去md5解密,成功发现管理员密码
MD5在线解密 - 土薯在线工具Toolshu.com
(8)挑战三、挑战四
上面在127.0.0.1.log中发现很多连接的记录,怀疑是webshell的连接url但是暂时无法确定,在root目录下发现存在流量包,还是使用scp命令复制到本地进行分析
scp root@192.168.76.128:/root/数据包1.pcapng D:\桌面
过滤出HTTP协议进行分析
发现都是192.168.20.1与服务器连接
选中第一条数据进行追踪
将请求体中编码的数据进行url解码,发现存在蚁剑的特征,发现第一次连接webshell的url,webshell连接密码为Network2020(脚本中开头部分)
1. 代码特征
核心代码:蚁剑的核心代码部分来源于中国菜刀,因此其连接时的流量特征与中国菜刀较为相似。
常见函数:连接时通常会包含以下PHP函数:
@ini_set("display_errors", "0");:关闭错误显示。
@set_time_limit(0);:取消脚本执行时间限制。
@set_magic_quotes_runtime(0);:禁用魔术引号。
eval() 或 assert():用于执行动态代码。
(9)挑战五
在流量包中发现访问了flag1
进行追踪流,发现flag1
(10)挑战六
观察发现在后半部分,攻击者使用get请求验证version2.php是否存在,后续都是使用它来进行post
追踪流,发现是冰蝎的特征,所以version2.php就是后续使用的脚本
冰蝎4.0
加密方式:支持自定义传输协议,取消了固定的连接密码,加密算法和密钥由用户自定义。
流量特征:
Accept字段为application/json, text/javascript, */*; q=0.01。
Content-Type字段为application/x-www-form-urlencoded。
使用长连接,请求头和响应头带有Connection: Keep-Alive。
固定请求头和响应头,请求头为m7nCS8n4OZG9akdDlxm6OdJevs/jYQ5/IcXK,响应头为mAUYLzmqn5QPDkyI5lvSp6DmrC24FW39Y4YsJhUqS7。
默认连接密钥为e45e329feb5d925b。
(11)挑战七
在history中看到,曾经对文件进行修改
对这两个文件进行查看(PS:是.api目录,不是api目录,需要使用ls -a命令)
[root@web-server 127.0.0.1]# pwd
/www/wwwroot/127.0.0.1
[root@web-server 127.0.0.1]# ls
api app data files index.php lib tasks vendor
[root@web-server 127.0.0.1]# ls -a
. .. api .api app data files index.php lib tasks .user.ini vendor
[root@web-server 127.0.0.1]# cd .api
[root@web-server .api]# ls
alinotify.php alireturn.php mpnotify.php payjsnotify.php wxnotify.php
[root@web-server .api]# cat alinotify.php
发现flag2
(12)挑战八
直接在history中看到
4.验证
[root@web-server ~]# ./wp
提交攻击者IP?
192.168.20.1
回答正确!
提交攻击者修改的管理员密码(明文)
Network@2020
回答正确!
提交第一次Webshell的连接URL(http://xxx.xxx.xxx.xx/abcdefg?abcdefg只需要提交abcdefg?abcdefg)
index.php?user-app-register
回答正确!
提交Webshell连接密码
Network2020
回答正确!
提交数据包的flag1
flag1{Network@_2020_Hack}
回答正确!
提交攻击者使用的后续上传的木马文件名称
version2.php
回答正确!
提交攻击者隐藏的flag2
flag2 = "flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}
回答错误!
提交攻击者隐藏的flag3
flag3 = flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
回答错误!
[root@web-server ~]# ./wp
提交攻击者IP?
192.168.20.1
回答正确!
提交攻击者修改的管理员密码(明文)
Network@2020
回答正确!
提交第一次Webshell的连接URL(http://xxx.xxx.xxx.xx/abcdefg?abcdefg只需要提交abcdefg?abcdefg)
index.php?user-app-register
回答正确!
提交Webshell连接密码
Network2020
回答正确!
提交数据包的flag1
flag1{Network@_2020_Hack}
回答正确!
提交攻击者使用的后续上传的木马文件名称
version2.php
回答正确!
提交攻击者隐藏的flag2
flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}
回答正确!
提交攻击者隐藏的flag3
flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
回答正确!