电子数据取证每日一练
2022年长安杯服务器部分-docker容器
上一期内容:电子数据取证每日一练-服务器取证4
案情介绍
某地警方接到受害人报案称其在某虚拟币交易网站遭遇诈骗,该网站号称使用“USTD 币”购买所谓的“HT 币”,受害人充 值后不但“HT 币”无法提现、交易,而且手机还被恶意软件锁定 勒索。警方根据受害人提供的虚拟币交易网站调取了对应的服务器镜像并对案件展开侦查。
长安杯前面两个服务器的内容涉及到了jar-web网站的构建,主要是对jar包中网站的结构进行了解,从而进一步完成服务器网站的取证工作。这次涉及的知识点主要是针对docker容器的服务器取证。docker容器用于服务器服务部署相对来说要简单和高效一些,因此也是近几年来取证比武或者比赛常见的考试题型。
地址:后台发送电子数据取证每日一练
赛题和工具网盘地址:后台发送电子数据取证每日一练可以得到题目和工具(不分享企业厂商工具)
学习目标:了解docker的常用指令,了解docker部署的原理
使用工具(在网盘地址中提供):Arsenal Image Mounter、X-ways、Winhex、VMware Workstation、Finallshell
难度:简单难度
题目一览
19. 检材3服务器root账号的密码是
20. 检材3中,监听33050端口的程序名(program name)为
21. 除MySQL外,该网站还依赖以下哪种数据库
22. 检材3中,MySQL数据库root账号的密码是
23. 检材3中,MySQL数据库在容器内部的数据目录为
24. 涉案网站调用的MySQL数据库名为
本题所需知识点
1.docker容器的存储
Docker 容器的存储映射主要涉及将容器内部的文件系统与主机文件系统相连接,以便持久化数据和共享文件。常见的存储映射方式有两种:
卷(Volume):Docker 卷是一种由 Docker 管理的存储,可以将其挂载到一个或多个容器中。卷独立于容器生命周期,即使容器被删除,卷中的数据仍然存在。创建和使用卷的方式如下:
docker volume create my_volume
docker run -v my_volume:/path/in/container my_image
这里的 my_volume 是卷的名称,/path/in/container 是容器内部的挂载路径。
绑定挂载(Bind Mounts):绑定挂载将主机文件系统中的目录或文件直接挂载到容器内部。与卷不同,绑定挂载允许你指定主机上的任意路径。创建和使用绑定挂载的方式如下:
docker run -v /path/on/host:/path/in/container my_image
这里的 /path/on/host 是主机上的路径,/path/in/container 是容器内部的路径。
可以通过以下方式查看 Docker 容器中存储映射的地址:
1.使用 docker inspect 命令:
这个命令可以显示关于容器的详细信息,包括卷和绑定挂载的映射地址。
docker inspect <container_name_or_id>
在输出中,查找 Mounts 字段,其中会列出所有挂载的卷和绑定挂载的信息,包括主机路径和容器路径。例如:
"Mounts": [
{
"Type": "volume",
"Name": "my_volume",
"Source": "/var/lib/docker/volumes/my_volume/_data",
"Destination": "/path/in/container",
"Driver": "local",
...
},
{
"Type": "bind",
"Source": "/path/on/host",
"Destination": "/path/in/container",
...
}
]
2.查看容器的运行配置:
如果你是在运行容器时指定了卷或绑定挂载,可以通过docker ps
命令查看正在运行的容器,然后使用 docker inspect
查看特定容器的详细信息。
3.查看卷的具体路径:
如果你使用了卷,并且想查看卷在主机上的具体存储位置,可以使用以下命令来定位:
docker volume inspect <volume_name>
这会显示卷的详细信息,包括其在主机上的实际存储路径(通常在 /var/lib/docker/volumes/ 目录下)。
4.查看配置文件
在 Docker Compose 文件(通常是 docker-compose.yml)中,存储映射通常在 volumes 部分定义。
以下是如何在 Docker Compose 文件中查看存储映射地址的示例:
version: '3'
services:
web:
image: nginx
volumes:
- ./html:/usr/share/nginx/html
- data_volume:/var/lib/data
ports:
- "8080:80"
volumes:
data_volume:
在这个例子中:
./html:/usr/share/nginx/html
是一个 绑定挂载,将主机当前目录下的 html 文件夹映射到容器的/usr/share/nginx/html
路径。./html
是主机路径,/usr/share/nginx/html
是容器内的路径。data_volume:/var/lib/data
是一个 卷,其中 data_volume 是卷的名称,/var/lib/data
是容器内的挂载路径。
通过查看 Docker Compose 文件,你可以直接看到这些路径的映射关系。
2.docker常用指令
注意容器和镜像不一样!!!
Docker 容器管理命令
以下是常用的 Docker 容器管理命令,包括一些具体用法的示例:
列出运行中的容器
docker ps
列出当前正在运行的所有容器。
查看所有容器(包括未运行的容器)
docker ps -a
显示所有容器的列表,包括已停止的容器。
停止容器
docker stop <container_id_or_name>
停止指定的容器,例如:
docker stop my_container
强制停止容器
docker kill <container_id_or_name>
强制终止运行中的容器,例如:
docker kill my_container
启动已停止的容器
docker start <container_id_or_name>
启动一个已经停止的容器,例如:
docker start my_container
查看容器的详细信息
docker inspect <container_id_or_name>
查看容器的所有配置信息和状态,例如:
docker inspect my_container
查看容器日志
docker logs <container_id_or_name>
显示容器的输出日志,例如:
docker logs my_container
查看容器中的进程
docker top <container_id_or_name>
列出容器内部正在运行的进程,例如:
docker top my_container
查看容器的基本信息
docker container ls
显示所有正在运行的容器的基本信息,包括容器 ID、镜像、状态和端口等。例如:
docker container ls
这个命令类似于
docker ps
,可以显示容器的 ID、镜像名称、创建时间、状态、端口映射等信息。进入容器的交互式终端
docker exec -it <container_id_or_name> /bin/bash
进入容器的 Bash 终端,进行交互式操作,例如:
docker exec -it my_container /bin/bash
退出容器 当你在容器内操作完成后,可以使用
exit
命令退出终端:exit
删除已停止的容器
docker rm <container_id_or_name>
删除一个已停止的容器,例如:
docker rm my_container
强制删除正在运行的容器
docker rm -f <container_id_or_name>
强制删除一个正在运行的容器,例如:
docker rm -f my_container
Docker 镜像管理命令
以下是一些常用的 Docker 镜像管理命令及其使用示例:
搜索镜像
docker search <image_name>
在 Docker Hub(或其他镜像仓库)中搜索相关镜像,例如:
docker search nginx
拉取镜像
docker pull <image_name>[:tag]
从仓库中拉取镜像,不指定
tag
时默认拉取最新版本,例如:docker pull mysql
或拉取特定版本的镜像:
docker pull mysql:8.0.33
列出已下载的镜像
docker images
列出本地已下载的所有 Docker 镜像。
删除镜像
docker rmi <image_id_or_name>
删除指定的 Docker 镜像,例如:
docker rmi nginx
强制删除镜像
docker rmi -f <image_id_or_name>
强制删除镜像,例如:
docker rmi -f nginx
构建镜像
docker build -t <image_name> .
从当前目录的
Dockerfile
构建镜像,并命名为<image_name>
,例如:docker build -t my_custom_image .
启动 Docker 镜像
一旦确定了要启动的 Docker 镜像,可以使用 docker run
命令来启动它。通常的格式是:
docker run [选项] <镜像名> [命令] [参数]
示例:
启动一个 Nginx 容器,并将容器的 80 端口映射到主机的 8080 端口:
docker run -d -p 8080:80 nginx
启动一个交互式的 Ubuntu 容器,并进入 Bash 终端:
docker run -it ubuntu /bin/bash
根据配置文件启动容器
如果你有一个 Docker Compose 文件(docker-compose.yml
),可以使用以下命令根据配置文件启动容器:
docker compose up -d
这个命令会根据 docker-compose.yml
文件中的定义启动所有相关服务,并在后台运行(-d
表示后台模式)。
题目解析
根据网站前端和技术员个人电脑上的线索,发现了网站后端所在的服务器IP并再次调证取得“检材3”,分析所有掌握的检材回答下列问题
通过第12题答案,解压检材3(见服务器4)
19.检材3服务器root账号的密码是
root:$6$wpPsHKOm$0OzqLIL8TB/jajCLMgfghcTxH2TrawqJFgeqm5bvsTQZya3Zl5haeIgKYxtMXd9vEhH7uxLP6lUqJklTZTuyG/
用hashcat破解一下得到
20.检材3中,监听33050端口的程序名(program name)为
前面几期服务器的内容也提到过,一般来说想要重构网站,可以通过查看bash的历史记录,看看有没有构建网站的方式。
这里选择使用脚本(脚本在前面windows检材里面)开启网站后,再查看监听端口:在历史记录中找到开启的记录,脚本还是在检材二里面
还有docker容器,也要打开看一下,有可能是数据库
查看docker镜像发现有mysql数据库
把脚本放到目录下面,然后提升权限,运行脚本,开启网站(如果不给脚本授权,网站是无法重建的)
使用指令查看linux的开放端口
发现监听33050的是docker(这里是将33050端口映射到了数据库的端口)
21.除MySQL外,该网站还依赖以下哪种数据库
根据题目得知,可以知道检材3是检材1的数据库服务器,所以一些配置信息可以从检材1那里看到
方法一:看历史记录,找到redis和mongoDB数据库
方法二:查看检材一的配置文件(建议使用这个)
还是看检材1(电子数据取证每日一练-服务器取证4)的jar包配置文件,因为这个配置文件是用户自定义的内容
网站的配置文件中使用了mysql、redis和mongoDB这三种数据库
22.检材3中,MySQL数据库root账号的密码是
因为mysql是在docker里面,所以需要进入到docker里面查看配置(docker的文件都是会映射到本地地址的),看docker的配置文件,不在默认位置的话,可以使用递归浏览
23.检材3中,MySQL数据库在容器内部的数据目录为
这里建议使用虚拟机本地连接docker,ssh可能存在网络配置问题而连接不进去
这里ssh没有连接进去
本地连接成功
方法一:搜索,进入到docker里面之后搜索
find -name *.frm
方法二:在上面的配置文件中可以找到是/var/lib/mysql
24.涉案网站调用的MySQL数据库名为
涉案网站不是后台网站,而是7000端口的那个,所以要从market的jar包里面查看配置文件
发现是b1这个数据库,但是发现在检材3中并没有b1这个数据库,因此这里要进行数据库恢复,而数据库在windows的检材中看到过
辅助证明:查看日志,找到删库记录
总结
这套题目主要是了解docker的内容以及常用的指令,简单一些的题目可能涉及一到两个docker,复杂一些的服务器重建可能涉及到十多个docker容器或者镜像,所以掌握好docker的一些基本技能包括:容器与主机的资源共享、镜像构建与管理、容器生命周期、网络配置以及存储管理等。才能在比赛的时候更快的做出答案。
往期内容推荐
服务器取证部分 | |
windows取证部分 | |
安卓手机取证部分 | |
ios手机取证部分 | 电子数据取证每日一练-ios取证 |
流量取证部分 | 电子数据取证每日一练-流量取证 |
手工仿真系列 |