安装 volatility

1
2
3
4
5
6
7
8
9
10
11
# 下载源码
git clone https://github.com/volatilityfoundation/volatility.git
# 安装依赖
sudo apt install python2 -y
sudo apt install python-pip -y
sudo apt install python2-dev -y
# 安装依赖库
sudo pip2 install pycryptodome -i https://pypi.douban.com/simple
sudo pip2 install distorm3 -i https://pypi.douban.com/simple
# 程序运行
python2 vol.py -h

windows 取证

获取 profile 信息,判断系统版本为 Win7Sp1x64:

image-20230515193415659

获取系统文件信息将其保存进 files.txt 文件中,并从中搜索 flag 和 password 信息:

image-20230515194007260

分别提取文件,拿到 flag.zip 和 password.png:

image-20230515195348984

可以查看到 password.png 如下,压缩包密码为 haha_is_password

image-20230515195426688

使用密码解压文件夹,即可拿到 flag,结果如下:

image-20230515195722827

Linux 取证

将 profile 文件 Ubuntu18.06.zip 复制到 volatility 文件夹下的 volatility/plugins/overlays/linux/,然后执行 python2 vol.py --info | grep Linux,注意 Linux 大写,可以看到有 Linuxubuntu18_06x64,说明导入成功:

image-20230515224857120

然后将系统镜像文件解压,得到 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 将执行历史输出到文件中,接下来分析黑客行为。同理我们可以拿到 netstatpstree 文件。

首先,在执行时比较打眼的就是 nc -lvvp 44444/55555 了,这行命令的作用是监听本地的 44444/55555 端口,然后我们去 netstat 文件中,发现只有 55555 的记录,那么很明显,黑客的 IP 地址为 119.91.144.252,并且 6864 这个进程是黑客启动的。

image-20230515233840825

然后我们去 pstree 中查找这个进程,结果如下,可以确定的是,这个进程至少是通过 find 进程来提权的。

image-20230515234509638

而对应 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 用户了,也就实现了提权!

image-20230516005505183

那么前期黑客是怎么获得低级权限的呢?我们可以看到,这台服务器后台运行了很多 web 应用,比如 php、apache2、mysql 和 ssh。并且我们可以看到,mysql 使用的弱密码!这太容易被利用了。

image-20230516002739937

不过 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,从而实现提权!

image-20230516004912575

  1. 黑客通过什么方式获取网站权限?

利用 web 服务的某种漏洞,连接 MySQL,并且应该是利用了弱密码的 MySQL 来执行了反向 shell 的指令。

  1. 黑客如何从低权限到高权限?

利用具有漏洞的 find 命令,将自己的 ssh 公钥写入 root 用户的 authorized_keys 文件。

  1. 黑客获取低权限后做了哪些操作?

拿到反向 shell;上传自己的 ssh 公钥文件。

  1. 黑客如何与主机进行交互,使用了哪个命令?

先通过网络连接,然后使用的是反向 shell,最后可以直接使用 ssh。

上传文件究竟是利用 web 漏洞实现的,还是拿到反弹 shell 之后实现的。如果是利用 web 漏洞实现的,那么为什么不直接上传一句话木马?但是,如果不是通过 web 漏洞上传的,那么无论是通过 MySQL 执行或者通过反弹 shell 执行,为什么没有在 bash 历史中留下记录?