freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Dockerfile搭建靶场与Docker技巧
2022-11-09 09:17:35
所属地 北京

之前实习学习了一下docker的原理与利用docker搭建靶场时遇到的一些问题

docker其实就是一种容器,顾名思义,容器就是装东西的器皿,我们可以利用docker的命令创建容器,在容器中装一些进程,并添加其运行所需的依赖。

docker其实可以看成是基于操作系统层面的虚拟系统,其搭建依附于所搭建主机的内核之上,而虚拟机就是自带内核的计算机,依附于本机的硬件系统之上。

所以这也就是docker为什么方便快捷,封装性好。

而docker中有镜像与容器两个概念,我们可以将镜像理解为容器的图纸,而容器就是依靠图纸打造的东西,同样的图纸可以打造无数容器,也可以根据个人修改容器。可以理解为镜像就是静态的容器。

而利用docker搭建靶场,其实有两种方式:

一种就是在docker中拉取所需要的依赖镜像,可以利用lamp,拉取下来之后,此时我们就获得了lamp的镜像,之后依靠docker run命令就可以运行成容器了。

lamp是一个类似phpstudy的集成环境,顾名思义就是,linux,apache,mysql,php集成的环境。

docker搭建靶场的思路就是:

  • 1.拉取一个lamp镜像

  • 2.运行成一个容器

  • 3.在网络上搜索目标cms的源码

  • 4.修改源码,检测漏洞

  • 5.将源码放入lamp容器根目录中,根目录在/var/www/html/下

  • 6.之后将容器打包为tar包上传

学习到的一些docker命令:

docker ps查看启动的容器

docker ps -a查看所有容器

docker images查看镜像

docker run:

  • -d :后台启动容器并返回容器ID

  • -p:将docker的端口映射到宿主机端口:宿主机端口:容器端口

  • --name="?":为容器指定名称

  • --link=容器名:将链接添加到另一个容器(在部署环境时使用)

docker start 容器id启动停止容器(删除容器不可用)

docker stop 容器id停止运行的容器

docker restart 容器id重启容器

docker rm 容器id删除容器(但是运行镜像可以再次添加)

docker rmi 镜像id删除镜像

docker -f rm 容器id强制删除一个运行容器

docker -v rm 容器id删除与容器关联的卷

docker create利用镜像创建一个容器但是不启动

runoob@runoob:~$ dockercreate  --namemyrunoob  nginx:latest

docker exec -it 容器id /bin/bash进入容器并执行/bin/bash(之进入不进行其他操作)命令

docker inspect 容器名获取容器/镜像元数据

runoob@runoob:~$ dockerinspect mysql:5.6
[
{
"Id": "sha256:2c0964ec182ae9a045f866bbc2553087f6e42bfc16074a74fb820af235f070ec",
"RepoTags": [
"mysql:5.6"
],
"RepoDigests": [],
"Parent": "",
"Comment": "",
"Created": "2016-05-24T04:01:41.168371815Z",
"Container": "e0924bc460ff97787f34610115e9363e6363b30b8efa406e28eb495ab199ca54",
"ContainerConfig": {
"Hostname": "b0cf605c7757",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {}
},

docker export将文件系统作为一个tar归档文件导出到STDOUT

将id为a404c6c174a2的容器按日期保存为tar文件:

runoob@runoob:~$ docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
runoob@runoob:~$ ls mysql-`date +%Y%m%d`.tar
mysql-20160711.tar

docker build用于使用Dockerfile创建镜像

当我们只有tar包时,利用此命令将tar包创建镜像,之后利用镜像启动容器

$ dockerbuild -f/path/to/a/Dockerfile .

利用文件位置的dockerfile创建镜像

docker info显示docker系统信息,包括镜像与容器数

docker version显示docker版本信息

docker pull从镜像仓库中拉取或者更新指定镜像

  • docker pull java拉取dokcer仓库中最新的java镜像

  • docker pull -a java拉取docker仓库中的所有java镜像



在利用ubuntu搭建的时候会遇到系统的很多坑也需要自己解决

比如网络的问题,当遇到服务器找不到没网的时候,尝试去设置一下

/etc/network/interfaces配置文件里可以设置静态ip,不同网卡可以分别设置,有连接外网与连接内网的区别

/etc/resolv.conf可以配置dns解析,但是一般设置的是开机重置

网上看过很多文章但是收效甚微,之后看到在sources之后加一句

dns-nameserver dns解析地址,之后重启好像可以


有时候遇到没网还可能是网卡没有打开

/var/lib/NetworkManager/NetworkManager.state文件中修改配置

image-20221109091329476

将NetworkEnable改为true(默认为flase)

image-20221109091120951

在docker中导入并加载sql文件

首先导出你本机的数据库文件,之后进入对应docker文件目录,之后导入

image-20221109091109824

将本机导出的sql文件粘到虚拟机里,之后source 对应docker目录进行复制并导入

导入前要use一下,不然会报错

image-20221109091058263

在html文件夹中删除所有文件

image-20221109091048067

rm -rf 文件夹名称/*

将文件夹里的所有文件删除

将docker容器内某一文件内的所有文件复制到docker容器另一个文件夹中

cp -r 文件夹名称/* /对应docker容器目录

将本机中的文件夹复制到docker容器内

docker cp 本机文件路径/ docker容器id:docker容器内文件的路径/

docker加载现成的tar包

docker load -i tar包名称

linux解压压缩包

  • tar:tar -zxvf tar包

  • rar:unrar x rar包

  • zip:unzip zip包

LAMP

乌班图 英文
安装 apache   配置 去别php 你安装的()
php
mysql   账密 root/root

如何自己再乌班图下搭建lamp

在ubuntu容器中下载php扩展包

在ubuntu容器中查看扩展包

php -m

查看缺少的扩展包版本

apt-cache showpkg 扩展包名

之后根据格式下载扩展包

image-20221109091033405

下载

apt-get install php7.1-mbstring=.2.34-28+ubuntu20.04.1+deb.sury.org+1

自己写的一个.sh脚本就当参考啦,文章里面我就不删啦:

RUN cd /usr/local/curl-7.82.0 \apt-get install binutils \apt-get install gcc \apt-get install make \./configure--prefix=/curl \

make \make install \export PATH=$PATH:/user/local/curl/bin

RUN

ADD curl-7.82.0.zip /usr/local

# docker镜像 # Dockerfile
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录