这个是合天网安实验室的免费课程,按照指导书做了一遍,对于没用过docker和Nginx的我来说,有了些感性认识。这里记录一下过程和关键点。
合天的课程:
docker搭建vulhub靶场进行nginx服务漏洞分析
实验目的:
本实验通过熟悉Docker的使用,搭建一个本地的模拟环境去测试漏洞。在搭建的靶场环境中模拟不同的漏洞环境,可以进行漏洞复现以及安全知识的学习,这极大方便了网安学习者。
实验环境:
服务器:MacBook
辅助工具:
(1)Docker(version 20.10.5, build 55c4c88)
(2)用来做图片和合成文件的Windows电脑
安装Docker,并运行一个PythonFlask应用来运行一个web应用。
(1)安装Docker:
brew cask install docker
可以从Applications中启动“小鲸鱼”Docker。
(2)载入镜像:
docker pull training/webapp
(3)启动应用:
docker run -d -P training/webapp python app.py
Docker中看到的:
可以访问的应用:
使用docker搭建vulhub靶场环境并复现nginx解析漏洞
(1)克隆项目
git clone https://github.com/vulhub/vulhub.git
(2)进入环境目录
cd flask/ssti
(3)编译环境
docker-compose build
(4)启动容器
docker-compose up -d
(5)用WIndows的mspaint画一张小png图片1.png 因为要让php解析,所以图片越小,成功的可能越大
(6)创建1.php
<?php
phpinfo();
?>
(7)在Windows的cmd中执行文件合成命令
copy 1.png/b + 1.php/a 1.jpg
(8)通过index.php上传1.jpg,竟然返回了文件路径
(9)访问图片
(10)执行php
看到我们隐藏在图片最后的代码phpinfo()得以执行, 如果换成其他的代码,会有什么效果?
该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞
漏洞原理:Nginx+PHP的服务器中,如果PHP的配置里 cgi.fix_pathinfo=1那么就会产生一个漏洞。这个配置默认是1的,设为0会导致很多MVC框架(如Thinkphp)都无法运行。这个漏洞就是比如localhost/img/1.jpg 是正常地访问一张图片,而 localhost/img/1.jpg/1.php 却会把这张图片作为PHP文件来执行!