docker集成lamp—tp5反序列化漏洞
一、win 11安装docker
安装之前首先得保证电脑开启了下面两个选项
docker v20.10.24下载地址:http://docker.p2hp.com/
docker默认安装在C盘,无法在安装时修改安装位置。通过mklink建立软链接的方式,修改安装位置:
#管理员权限下执行,需要在E盘提前新建Docker,且安装docker前建立起软链接
mklink /j "C:\Program Files\Docker" "E:\Docker"
执行完这条命令后再安装docker,会在C:\Program Files\Docker生成链接文件,实际保存在E:\Docker中。
安装完成后,启动docker报错。提示需要更新wsl
。以管理员身份运行cmd,wsl --update
更新到wsl2版本。
修改镜像保存地址(放在C盘占空间)
默认镜像位置:C:\Users\32897\AppData\Local\Docker\wsl
在想更换的盘符目录下创建同样的文件夹,我这里是:E:\Dockerdata
然后关闭docker程序以及swl (使用命令:wsl --shutdown)
一定要确保所有wsl应用都停止:wsl --list -v
导出docker镜像文件
wsl --export docker-desktop-data "E:\Dockerdata\docker-desktop-data.tar"
wsl --export docker-desktop "E:\Dockerdata\docker-desktop.tar"
成功导出
注销docker-desktop-data、docker-desktop
wsl --unregister docker-desktop-data
wsl --unregister docker-desktop
指定文件夹重新导入
wsl --import docker-desktop-data "E:\Dockerdata\data" "E:\Dockerdata\docker-desktop-data.tar" --version 2
wsl --import docker-desktop "E:\Dockerdata\distro" "E:\Dockerdata\docker-desktop.tar" --version 2
看到自定义的文件夹中生成了镜像文件
重新启动
导入命令时要注意:–version 2
更改源
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://xxxxx.mirror.aliyuncs.com"
]
#第一个为docker中国官方的镜像,第二个为阿里云专属镜像(登录自己的阿里云账号即可:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors)
注册一个docker账号可以使用其维护的官方仓库:https://hub.docker.com/
本地登录即可使用
二、搭建lnmp平台
1、安装linux系统镜像
- 搜索Ubuntu镜像
docker search --filter stars=50 ubuntu
下载官方库中,starts最多的,默认为最新版本
- 拉取镜像到本地
docker pull ubuntu
等待一会
查看一下下载的镜像
docker images
2、启动容器
- 加载镜像使其成为一个容器
#使用容器搭建一个网站,(-d)后台启动,使用(-i)交互模式
#映射容器80端口到本地8080端口(还有3306端口)以及容器目录到本地目录
docker run -id -p 8080:80 -p 3309:3306 -v E:\www:/var/www/html --name web-lamp ubuntu
#也可以直接进入到容器,使用-t选项
docker run -ti -p 8080:80 -p 3309:3306 -v E:\www:/var/www/html --name web-lamp ubuntu /bin/bash
- 登录到容器
如果要进入容器,首先得确保已经启动
#查看所有容器
docker ps -a
#启动容器
docker start 容器名或容器id
#进入容器shell界面
docker exec -it 容器名或容器id /bin/bash
我这里直接进入到交互式shell界面,exit退出交互模式后,容器就关闭了,需要重新开启在登录
3、搭建lamp
- 下载需要的软件
apt-get update
apt install -y nginx php-fpm mysql-client mysql-server vim
这里需要选择一下时区亚洲、上海
- 配置nginx环境
打开:/etc/php/7.4/fpm/pool.d/www.conf
记住这个文件路径:/run/php/php7.4-fpm.sock
去掉这句注释:listen.allowed_clients = 127.0.0.1
打开:/etc/nginx/sites-enabled/default
去掉这几行注释,加上index.php,要注意这个文件路径:/run/php/php7.4-fpm.sock
要注意这个大括号闭合,踩坑了
- 启动PHP、nginx和mysql服务
service php7.4-fpm start
service nginx start
service mysql start
访问测试一下
nginx搭建成功
在/var/www/html中新建一个phpinfo.php用来查看phpifo信息
php搭建成功
- 安装PHP拓展
apt install php7.4-mysql php7.4-curl php7.4-json php7.4-mbstring php7.4-xml php7.4-intl
#安装完成后重启
service php7.4-fpm restart
重新访问一下phpifo,发现拓展已安装
- 配置mysql
配置mysql安全策略:mysql_secure_installation
具体配置视情况而定
注意:
MySQL 5.7.6 及更高版本,并且默认认证插件是caching_sha2_password
,则无法使用mysql_secure_installation
更改“root”用户密码。caching_sha2_password
认证插件要求密码必须包含至少一个数字、一个小写字母、一个大写字母和一个特殊字符,并且长度必须至少为 8 个字符。
执行这条命令需要输入root用户密码,这里设置一下root用户密码为root,需要先启动mysql
我这里下载了最新的版本,因此需要手动配置,配置安全策略时就不选更改root用户命令了。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'ROOt@123';
成功配置
4、搭建tp5.0.24环境
由于前面加载镜像的时候,将本地的目录和容器里的目录进行了映射,方便上传源码文件
在本地将thinkphp5.0.24文件放到对应目录即可,本地访问:http://127.0.0.1:8080/Thinkphpv5.0.24/public/?a=1。其中a=1 的1可以替换为base64编码的poc
为了方便测试,我将poc也放上去:http://127.0.0.1:8080/Thinkphpv5.0.24/public/poc.php
webshell名为:a.php12ac95f1498ce51d2d96a249c09c1998.php
三、环境容器打包成镜像
容器打包
docker commit -a="restorejustice" web-lamp restorejustice/thinkphp5.0.24rce
#解释
web-lamp为要打包的容器
restorejustice/thinkphp5.0.24rce为仓库名(一般为个人账户id)/镜像名,默认tag为lastas
上传到个人仓库,上传了几次成功
4849)]
三、环境容器打包成镜像
容器打包
docker commit -a="restorejustice" web-lamp restorejustice/thinkphp5.0.24rce
#解释
web-lamp为要打包的容器
restorejustice/thinkphp5.0.24rce为仓库名(一般为个人账户id)/镜像名,默认tag为lastas
上传到个人仓库,上传了几次成功