PHP本地文件包含漏洞环境搭建与利用
2016-03-19 21:03
676 查看
0x00 简介
php本地文件包含漏洞相关知识,乌云上早有相应的文章,lfi with phpinfo最早由国外大牛提出,可参考下面两篇文章。利用的原理是利用php post上传文件产生临时文件,phpinfo()读临时文件的路径和名字,本地包含漏洞生成1句话后门。此方式在本地测试成功,为了方便大家学习,减小学习成本,已构建docker环境,轻松测试。将构建好的docker放在国外VPS上,使用github项目
lfi_phpinfo 中poc文件夹下的脚本,本地运行,依然可以getshell。说明这种方式是可行的,对网络要求不是很高。
Docker Hub 镜像地址:
janes/lfi_phpinfo
github 项目地址:
lfi_phpinfo
源码存放在 code目录下, 可使用docker再现,poc目录下存放利用脚本
paper:
http://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
http://www.insomniasec.com/publications/LFI%20With%20PHPInfo%20Assistance.pdf
0x01 php 上传
向服务器上任意php文件post请求上传文件时,都会生成临时文件,可以直接在phpinfo页面找到临时文件的路径及名字。post上传文件
php post方式上传任意文件,服务器都会创建临时文件来保存文件内容。
在HTTP协议中为了方便进行文件传输,规定了一种基于表单的 HTML文件传输方法
其中要确保上传表单的属性是 enctype=”multipart/form-data,必须用POST 参见:
php file-upload.post-method
其中PHP引擎对enctype=”multipart/form-data”这种请求的处理过程如下:
请求到达
创建临时文件,并写入上传文件的内容
调用相应PHP脚本进行处理,如校验名称、大小等
删除临时文件
PHP引擎会首先将文件内容保存到临时文件,然后进行相应的操作。临时文件的名称是 php+随机字符 。
$_FILES信息,包括临时文件路径、名称
在PHP中,有超全局变量$_FILES,保存上传文件的信息,包括文件名、类型、临时文件名、错误代号、大小
0x02 手工测试phpinfo()获取临时文件路径
html表单文件 upload.html
0x03 python脚本 upload file
0x04 本地搭建环境
get shell0x05 使用 docker 构建环境
docker的基本用法,这里就不阐述了,可自行google。这里提供了两种构建镜像源的方式,使用githublfi_phpinfo 中Dockerfile自行构建,或使用我已经构建好的镜像
janes/lfi_phpinfo
镜像源
-- [php 1="官方源" 2="2="2="2="2="language=":5.6-apache"""""\"][/php]/php5
或
-- janes/lfi_phpinfo
构建环境运行测试
获取 github
lfi_phpinfo 的源码,切换到web目录下,开始构建环境进行测试。这里提供三种方式运行
方式1 使用php官方源运行测试
janes/lfi_phpinfo 运行测试
0x06 结束语
动手实践 LFI with PHPInfo利用的过程,其实并不像看文章过程那样顺利,期间多多少少会碰见一些与环境有关的问题,而解决这些问题会耗费精力,这正是催生我用docker来构建测试环境想法的来源,希望能给网络安全的热爱者们提供更方便的学习环境。最后感谢[LFI with PHPInfo本地测试过程]文章的作者,给我研究LFI with phpinfo提供了不少帮助。相关文章推荐
- Ajax and php 2.5
- PHP表单传值
- php第三方登录 Oauth2.0协议
- Jenkins进阶系列之——05FTP publisher plugin插件
- Jenkins进阶系列之——04Publish Over FTP Plugin插件
- php的字符串处理
- php的函数应用
- php的流程控制结构
- php的基本语法
- php生命周期
- PHP应用程序设计
- PHP预定义的超全局数组
- yii2 数据库操作
- php应用程序设计
- PHP连接数据库sql
- SMTP协议详解以及工作过程
- thinkphp 网站突然打不开 用火狐浏览器提示编码错误
- PHP,一个form表单使用多个按钮的实现方式
- thinkphp3.1随机取数据库中几条记录
- php