PHP文件包含漏洞分析
2020-05-26鲁先志柏海龙周均
鲁先志 柏海龙 周均
摘 要:文件包含漏洞是PHP语言开发的web系统中普遍存在的一类漏洞,本文分析了文件包含漏洞的原理,设计一个实验案例展示文件包含漏洞的利用过程。
关键词:漏洞;PHP语言;web系统
PHP语言开发的WEB系统程序有着快速开发快速部署,系统开发实施周期短的优势,但PHP语言开发的WEB系统也普遍存在一些典型的漏洞,如:跨站脚本漏洞、SQL注入漏洞、代码执行漏洞、文件包含漏洞及PHP代码注入漏洞等[1]。
1 文件包含基本概念
文件包含漏洞主要是基于PHP语言的web应用程序中发生的。程序员写程序时将公用代码写在单独的文件中,然后其他函数需要使用该代码时直接包含调用[2]。严格来说,文件包含漏洞是“代码注入”的一种。“代码注入”这种攻击,其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行。“代码注入”的典型代码就是文件包含,可以理解为“外部数据流包含”,至于这个外部数据流是什么,可以是文件,也可以是POST数据流的形式。
2 PHP的封装协议(伪协议)
php漏洞利用中常用伪协议为以下两种:
①php://filter--对本地磁盘文件进行读写,改协议经常用来读取源代码并进行base64编码输出,不然会直接源代码会当做php代码执行就看不到源代码内容。
条件:allow_url_fopen :off/on allow_url_include:off/on
用法:php://filter/convert.base64-encode/resource=a.php
//将a.php源代码以base64编码输出
②php://input 可以访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行。
条件:allow_url_fopen :off/on allow_url_include:on
用法:http://127.0.0.1/cmd.php?file=php://input
[POST DATA] <?php phpinfo()?>//执行phpinfo函数
除了以上的协议以外,php支持的还有以下封装协议(其中常用为data与ftp协议):file:// http:// ftp:// php:// zlib:// glob:// phar:// ssh2:// rar:// ogg:// expect://
3 php文件包含漏洞的实现
本实验搭建了一个具有PHP文件包含漏洞的web系统,通过使用的工具是Linux系统下的curl命令,实现对目标服务器127.0.0.1:7521的渗透,并成功获取到系统的敏感信息。
1.通过curl命令访问目标网址:curl 127.0.0.1:7521
2.上图显示了目标系统的网页源码和两项php配置
1.源代码中有include函数,并且存在未过滤的可控参数path,此处存在有文件包含漏洞的风险。
2.系统中有两项文件包含的相关配置,allow_url_fopen为off,allow_url_include为on,远程文件包含需要allow_url_fopen为on,所以无法进行直接包含远程文件,达到getshell
3.PHP配置项allow_url_include为on,所以可以通过相关伪协议达到文件读取与命令执行的目的,data协议需要两项都为on,此处使用php://filter和php://input达到目的。
4.通过命令执行读取本地文件
通过可控的path参数,利用php://input,注入php的命令执行语句,来达到命令执行。(此处使用system函数),通过curl发送如下包
curl -d “<?php system(ls); ?>”/
http://127.0.0.1/index.php?path=php://input
5.查看返回的数据中,标签后有我们执行后的结果。此处有三个文件,可以猜测出flag应该在f10g.php文件中。
6.访问f10g.php curl http://127.0.0.1:7521/f10g.php
7.通过php://filter读取f10g.php源代码
curl \
http://127.0.0.1:7521/index.php?path=php://filter/convert.base64-encode/resource=f10g.php
返回的数据中标签后有base64编码后的显示有源代码数据,可以通过base64解码来查看源代码
4 小结
本次的渗透测试案例展示了一个简单的PHP文件上传漏洞并利用该漏洞获取到系统的敏感数据。我们在实际的渗透过程中可以通过多种方式来利用该漏洞,根据系统环境中PHP配置文件和服务器配置的不同来灵活利用该漏洞,比如可以利用php://input來写入一句话木马,也可以直接读取关键配置文件,还可以通过php://input执行系统命令。
参考文献
[1]刘鹏,张玉清常见安全漏洞攻防研究[J].信息网络安全,2011(07)33-36.
[2]周开东等.远程文件包含漏洞分级检测工具研究[J].计算机应用与软件,2014(02)21-23.
[3]赵润梓.基于WEB渗透的自动化文件上传漏洞检测工具实现[J].网络全,2020(03)27-28.