【网络对抗演练】volatility内存取证
安装 volatility
1 | 下载源码 |
windows 取证
获取 profile 信息,判断系统版本为 Win7Sp1x64:
获取系统文件信息将其保存进 files.txt 文件中,并从中搜索 flag 和 password 信息:
分别提取文件,拿到 flag.zip 和 password.png:
可以查看到 password.png 如下,压缩包密码为 haha_is_password
,
使用密码解压文件夹,即可拿到 flag,结果如下:
Linux 取证
将 profile 文件 Ubuntu18.06.zip 复制到 volatility 文件夹下的 volatility/plugins/overlays/linux/
,然后执行 python2 vol.py --info | grep Linux
,注意 Linux 大写,可以看到有 Linuxubuntu18_06x64
,说明导入成功:
然后将系统镜像文件解压,得到 Ubuntu18.06.mem
。我们可以执行 python2 vol.py -f Ubuntu18.06.mem --profile=Linuxubuntu18_06x64 linux_recover_filesystem --dump-dir=./dump
将整个镜像都 dump 下来,不过没有必要。这里我们只需要先查看 bash 执行历史即可。
python2 vol.py -f Ubuntu18.06.mem --profile=Linuxubuntu18_06x64 linux_bash > history_bash.txt
将执行历史输出到文件中,接下来分析黑客行为。同理我们可以拿到 netstat
和 pstree
文件。
首先,在执行时比较打眼的就是 nc -lvvp 44444/55555
了,这行命令的作用是监听本地的 44444/55555 端口,然后我们去 netstat
文件中,发现只有 55555 的记录,那么很明显,黑客的 IP 地址为 119.91.144.252
,并且 6864 这个进程是黑客启动的。
然后我们去 pstree 中查找这个进程,结果如下,可以确定的是,这个进程至少是通过 find 进程来提权的。
而对应 find 这个指令,可以很容易看出,被管理者执行了 chmod u+s /usr/bin/find
指令,chmod
是一个特权指令,直接执行,说明是 root 权限的管理者干的。这个命令将 /usr/bin/find
文件的 setuid 位设置为启用。setuid 位是一种特殊权限位,可以让程序在执行时以文件所有者的身份运行,而不是以当前用户的身份运行。糊涂啊,管理者给 find 留下了一个漏洞!
我们看,黑客通过执行 find hack -exec mv authorized_keys /root/.ssh/authorized_keys \;
在名为 hack 的目录下查找名为 authorized_keys
的文件,然后将其移动到 /root/.ssh/
目录下,并将其重命名为 authorized_keys。-exec
选项告诉 find
命令在找到匹配项后执行给定的命令。这样黑客就能通过 ssh 免密连接 root 用户了,也就实现了提权!
那么前期黑客是怎么获得低级权限的呢?我们可以看到,这台服务器后台运行了很多 web 应用,比如 php、apache2、mysql 和 ssh。并且我们可以看到,mysql 使用的弱密码!这太容易被利用了。
不过 MySQL 一般不对外开放,因此,黑客并不能直接连接 MySQL,应该是需要通过对外开发的 Apache 才能访问。黑客先和 apache2 建立连接,然后通过某种漏洞,去访问 3306 端口也就是 MySQL 端口,从而执行攻击。
如下,第一行 apache2 和远端用户建立 TCP 连接,然后远端用户通过类似 SSRF 攻击或者 SQL 注入或者别的,使得 apache2 和 MySQL 建立 TCP 连接,而我们的 MySQL 又是一个弱密码,黑客可以为所欲为!最后一行,我们可以看到进程号是 bash/6860
,也正是执行 find 指令的那个进程,我估计是通过 MySQL 执行 sys_exec()
函数使得反向 shell 命令被执行,黑客从而可以直接连接上普通权限的 shell,然后通过有安全缺陷的 find 命令,将自己的公钥写入 root 用户的 authorized_keys 文件,免密连接 root,从而实现提权!
- 黑客通过什么方式获取网站权限?
利用 web 服务的某种漏洞,连接 MySQL,并且应该是利用了弱密码的 MySQL 来执行了反向 shell 的指令。
- 黑客如何从低权限到高权限?
利用具有漏洞的 find 命令,将自己的 ssh 公钥写入 root 用户的 authorized_keys 文件。
- 黑客获取低权限后做了哪些操作?
拿到反向 shell;上传自己的 ssh 公钥文件。
- 黑客如何与主机进行交互,使用了哪个命令?
先通过网络连接,然后使用的是反向 shell,最后可以直接使用 ssh。
上传文件究竟是利用 web 漏洞实现的,还是拿到反弹 shell 之后实现的。如果是利用 web 漏洞实现的,那么为什么不直接上传一句话木马?但是,如果不是通过 web 漏洞上传的,那么无论是通过 MySQL 执行或者通过反弹 shell 执行,为什么没有在 bash 历史中留下记录?