之前实习学习了一下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文件中修改配置
将NetworkEnable改为true(默认为flase)
在docker中导入并加载sql文件
首先导出你本机的数据库文件,之后进入对应docker文件目录,之后导入
将本机导出的sql文件粘到虚拟机里,之后source 对应docker目录进行复制并导入
导入前要use一下,不然会报错
在html文件夹中删除所有文件
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 扩展包名
之后根据格式下载扩展包
下载
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