使用工具:
使用工具:
Brim
https://www.brimdata.io/download/
Networkminer
https://www.netresec.com/?page=NetworkMiner
Wireshark
Strings
ida pro
知识点:
通过本篇文章,学习ssh协议特点、学习流量导出文件、学习简单的逆向分析、学习hashcat的简单使用、学习查壳工具等
公众号回复 20230601 即可获取birm/networkminer工具以及此次案例使用的流量包!
0x01 - 攻击者使用什么服务来访问系统?
这里可以使用wireshark来看流量包,也可以使用Brim工具
这里我们使用Brim工具,输入count() by _path | sort -r的含义是对数据进行统计,并按照统计结果的数量进行逆序排序。
解析该命令的具体步骤如下:
count():这是一个聚合函数,用于对数据进行计数。
by _path:通过字段 _path 对数据进行分组,表示按照 _path 字段的值进行统计。
|:管道符号,表示将前一个操作的结果作为输入传递给后一个操作。
sort -r:对前一步的结果进行逆序排序,-r 表示逆序(从大到小)排序。
综合起来,该命令的作用是对数据进行计数,并按照计数结果的数量进行逆序排序,以便查看出现频率最高的 _path 值。
所以第一题答案是 ssh
0x02 - 攻击者使用什么手法攻击系统?
这里其实就是ssh爆破,用英语来表达就是 bruteforce
0x03 - 攻击者可能使用什么工具来执行此攻击?
这里在流量包里是看不出来的,使用的是hydra
0x04 - 有多少次失败的尝试?
我们使用Brim工具,直接筛选ssh服务即可
这里就是52次爆破失败记录,那么我们如果使用 wireshark工具应该如何查看呢?
这里面简单的介绍一下ssh协议
首先就是ssh协议依然是寄托于tcp/ip协议,所以说第一步依然是三次握手,我们此次以本次案例介绍,tcp.stream eq 53为登录成功记录
客户端向服务端发送一个TCP数据包,这个数据包的TCP头设置了SYN标志。服务端向客户端回复一个SYN和ACK标志以及包含的它的初始序列号的数据包。
最后,客户端向服务端发送一个设置ACK标志的数据包,这样就具备所需要正常通信所需的信息。
之后就是SSH版本协商阶段,服务端将自己的SSH协议版本发送到客户端。客户端将自己的SSH协议版本发送到服务端
密钥协商阶段从客户端和服务端相互发出Key Exchange Init请求开始,主要是告诉对方自己支持的相关加密算法列表、MAC算法列表等。
客户端发送D-H公钥,服务端与客户端使用D-H算法生成会话密钥key。服务端回复,服务端与客户端使用D-H算法生成会话密码key
服务端回复如下:
一个服务端的公钥,即证书,客户端会将该公钥与本地公钥对比,看是否是被信任的服务器,如过是第一次访问则会询问用户是否信任这样的公钥。
服务端回复的D-H公钥
签名
这个时候,服务端端还会回复一个new Key包 用于表明服务端可以使用会话密码key加密消息了。
通信结束后,四次挥手
而其他的ssh数据包是没有这个完整的过程的,缺少最后一步的四次挥手
所以如果不借助工具,就需要一个流一个流的筛选,这也是为什么借助brim这款工具的原因,他为我们节约了大量的时间,国内比较好的工具,比如科来网络分析系统,如果导入规则的话也可以达到相似的效果
0x05 - 使用哪些凭据(用户名:密码)来获取访问权限?
题目提示:
shadow.log and sudoers.log
这里推荐使用kali自带的 hashcat工具,直接把shadow.log拷贝过去,再找一个全一些的字典就可以,爆破出哪个是哪个
hashcat shadow.log password.txt -m 1800 --show
这里用的字典比较小,导致后面遇到了需要使用大字典的题目的时候很难受,所以说这道题的答案其实不应该是唯一的,理论上来讲,我觉得不应该根据shadow.log来进行判断,因为字典足够大时间足够多,什么密码都是可以破解出来的
0x06 - 还有哪些其他凭据(用户名:密码)可用于获取访问权限,也具有 SUDO 权限?
题目提示:
shadow.log and sudoers.log
这里直接使用kali自带的字典去爆破,字典存放在/usr/share/wordlists/目录下,rockyou.txt.gz
解压直接用就行,字典很大很大,百万字典,爆破了一晚上才出结果
hashcat shadow.log rockyou.txt -m 1800
然后去sudoers.log看一眼,主要是看一下sudo用户有哪些
对照后 sean:spectre
0x07 - 攻击者是用什么工具在系统上下载了恶意文件?
这里面我们可以着重关注一下http协议内容,这里大家可以使用wireshark或者是firm都行
我们筛选了http协议后,将滚动条拉到最后方,我们看一下resp_mime_types列,此列内容大致就是类似于content-type,可以通过这个知道可执行文件的是哪一条
但是实际上,所有的http协议中的User-agent头在此次演示环境都是一样的
所以此题的答案是Wget
0x08 - 攻击者下载多少个文件来执行恶意软件安装?
这里继续接上题,这里其实我是没明白什么意思,然后偷窥了一下别人的,因为这里面下载的其实都是bmp镜像,按照我的理解是下载了多少个就应该是几个,但是实际上答案是3个
不过我用wireshark看了一下下载的东西,就明白为什么是3个了
0x09 - 恶意软件 MD5 哈希是什么?
这里推荐一个面安装的工具,NetworkMiner ,该工具可以直接分析流量包下载的文件的详细信息,或者也可以使用wireshark的导出功能进行单独计算
其实笔者也不确定这三个究竟哪一个文件才是问题所在,但是可以挨个试一下
当然了大家也可以用wireshark进行导出文件,然后自己去计算
0x10 - 恶意脚本通过修改什么文件,已达到可以做到自启动的效果?
将三个文件全部导出来后,查看文件内容
首先将文件从wireshark导出,但是导出来的东西是不能直接查看的(是二进制文件),所以需要使用strings工具进行转化
文件1内容:
文件2内容:
文件3内容:
解析如下:
1.将名为“1”的文件移动到 /var/mail/mail,并为该文件添加可执行权限。
2.向 /etc/rc.local 文件写入一行命令,以在系统启动时自动运行 /var/mail/mail 并将其输出的进程 ID 记录到 /proc/dmesg 中。这会导致 mail 进程在系统启动时自动运行,并且其进程 ID 可以从 /proc/dmesg 中获取。
3.使用 nohup 命令在后台运行 /var/mail/mail,并将其输出重定向到 /dev/null(即不会输出任何信息)。
4.将名为 “2” 的文件移动到 /lib/modules/uname -r/sysmod.ko,其中 uname -r 将被替换为当前内核的版本号。然后通过运行 depmod -a 命令更新模块依赖关系。
5.将 “sysmod” 字符串添加到 /etc/modules 文件中,以在系统启动时自动加载 sysmod 模块。
6.使用 modprobe 命令加载 sysmod 模块。
7.等待 1 秒钟,然后将 mail 进程的进程 ID 记录到 /proc/dmesg 中。
8.最后,删除名为“3”的文件。
所以此题答案为 /etc/rc.local
0x11 - 恶意软件将本地文件保存在什么位置?
根据上述分析,恶意软件将保存在 如下位置
/var/mail/
0x12 - ps.log缺少什么进程?
题意其实是在说,有一个进程隐藏了,我们需要知道是谁隐藏了。翻了翻ps.log文件,发现少了 /var/mail/mail 进程,因为该进程会自启,但是在ps.log里没出来
使用idea查看2文件,只看到了隐藏进程,但是看不出来是啥引起的
0x13 - 用于从 ps.log 中删除此信息的主文件是什么?
mv 2 /lib/modules/`uname -r`/sysmod.ko
depmod -a
echo "sysmod" >> /etc/modules
modprobe sysmod
sleep 1
pidof mail > /proc/dmesg
rm 3
从这一部门可以看出,该脚本利用sysmod.ko 删除文件
0x14 - 在 Main 函数中,是什么函数使目标机器向恶意服务器进行请求?
使用idea打开文件1,发现混淆了,而后翻垃圾看到用的upx压缩
可以使用工具查壳
upx.exe –o 别名 –d 现名 进行脱壳
脱壳后的文件为11 ,使用ida打开,可以直接看到主main函数了
我们简单解读一下
这个伪代码片段是一个 C 语言程序的主函数,接受命令行参数并使用它们来生成密钥。然后,它循环请求文件、打开文件、读取文件、解密文件和处理文件,直到成功处理了一个文件为止。
在 while 循环中,程序会递增 v9 直到等于 4,然后重置为 0。这个变量用于轮流访问地址数组中的元素。
如果成功处理了一个文件,程序将返回 1。否则,程序将等待 1 秒钟然后重新开始循环。
我们通过前面的题推断,这个恶意文件会写入到/var/mail里面,所以我们跟进requestFile这个函数
该函数的主要作用是从网上下载文件并保存到本地。在下载前,该函数使用了encode和lookupMod函数来获取当前索引所对应的模块,并将其作为参数拼接到wget命令中。然后,该函数调用sprintf函数生成一个字符串s,其中包含了wget命令以及一些其他参数。生成的字符串s将被用于执行一个shell命令。
该函数使用系统命令wget在后台执行该字符串s所表示的命令,并将输出结果返回给程序。然后,该函数关闭了由popen打开的管道,并返回一个值。
最后,该函数在函数返回之前还进行了一些堆栈操作,确保返回时堆栈指针与进入该函数时相同
所以此题的答案就是requestFile
0x15 - 恶意软件通信的其中一个 IP 以 17 开头。提供完整的 IP
currentIndex 变量可能是一个索引值,用于访问 lookupFile() 返回的字符串数组中的特定元素。然后,将 /var/mail/ 字符串和字符串数组中的特定元素连接起来,形成最终的字符串。这个字符串可能是用于打开一个特定的邮件文件。
所以我们跟进lookupFile函数里面的currentIndex 变量
0x16 - 恶意软件从外部服务器请求了多少个文件?
这里直接使用wireshark筛选http流量
数 image/bmp就可以,一共是9个
0x17 - 恶意软件从攻击者服务器接收的命令是什么?格式:按字母顺序以逗号分隔
这个我是真没做出来
文章引用微信公众号"我不懂安全",如有侵权,请联系管理员删除!