我是靠谱客的博主 幸福过客,最近开发中收集的这篇文章主要介绍远程文件包漏洞,不能包含PHP的原因详解远程文件包漏洞,不能包含PHP的原因详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

远程文件包漏洞,不能包含PHP的原因详解

简介:进行远程包含时,大多数包含txt、jpg等文件,再进行菜刀连接,但是如果远程包含的是php文件,则菜刀无法成功连接。

开门见山,给我带来启发的两句话

注意:如果是包含远程服务器上的PHP文件,那么得到的是被远程服务器解析过的PHP,所以在写一句话木马的时候就不要做成.php的文件,一般包含.txt的文件

例如:我们用windows server 2003 服务器包含一个Linux上的phpinfo.php文件,那么得到的就是Linux的php配置文件,而不是Windows上的php配置文件。
(参考:https://www.jianshu.com/p/be68cf9be911)

下面是一些推断验证:

验证:现有两个靶机环境,都上传一个php文件查看phpinfo()信息,进行对比

靶机1:
在这里插入图片描述
靶机2:
在这里插入图片描述
可以发现2个靶机的PHP版本信息是不一样的
现在通过靶机1远程包含靶机2的PHP文件
在这里插入图片描述

可以发现该PHP版本信息,为包含的远程文件上的服务器的PHP版本信息,即靶机2的PHP版本信息
证实了包含远程PHP文件时,会在服务器上进行PHP解析后,再传给包含该远程PHP文件的服务器上

验证下这个POST的值到底会不会传过来

由于post提交值不太方便,这里我们改用GET方式
首先上传一个test.php文件,
文件内容:

<?php 
echo "123";
$name = $_GET['abc'];
echo "----------------<br/>";
echo $name;
echo "<br/>----------------<br/>";
?>

并在example1.php中添加了一个echo n a m e , 验 证 name,验证 namename的值
在这里插入图片描述
如果直接对这个上传文件进行正常访问,结果也显示正常,如下图:

在这里插入图片描述
将该文件进行包含
URL:http://192.168.149.143/fileincl/example1.php?page=http://192.168.149.143/upload/images/test.php&abc=“good”
**注意:**这里的abc前是用&符连接,表示该值是传递给example1.php的
在这里插入图片描述
说明example1.php中的压根没有接收到abc这个参数

如果我们这样测试
URL:http://192.168.149.143/fileincl/example1.php?page=http://192.168.149.143/upload/images/test.php?abc=“good”
**注意:**abc前是?这样就表示这个abc参数是传给test.php的

在这里插入图片描述
可以发现test.php中的echo $name;进行了正常输出,说明test.php中是接收到了abc参数的值,而example1.php中的echo n a m e ; 依 然 没 有 正 常 输 出 , 报 了 不 存 在 name; 依然没有正常输出,报了不存在 name;name

通过以上两点,可以说明,包含test.php时,先进行test.php解析,
通过$name = G E T [ ′ a b c ′ ] 获 得 了 a b c 的 值 并 且 这 个 _GET['abc']获得了abc的值 并且这个 GET[abc]abcname就相当于一个存在于test.php的内部变量,当被example1.php包含时,example1.php压根看不到$name的值,推断出远程包含时解析了test.php后,将解析的结果传给了example1.php中,而不是将test.php的代码传给example1.php中

如果我们包含的是test.txt(与test.php中内容相同)又是怎么样的情况
Url:http://192.168.149.143/fileincl/example1.php?page=http://192.168.149.143/upload/images/test.txt&abc=“good”
注意这里是&abc

在这里插入图片描述
说明这是把test.txt中的代码传给了example1.php中,然后再对example1.php进行解析
URL:http://192.168.149.143/fileincl/example1.php?page=http://192.168.149.143/upload/images/test.txt?abc=“good”
注意这里是?abc
在这里插入图片描述
这里的报错与我们所想的一致,因为test.txt还未包含时,不会被解析,就无法获取参数abc的值

总结:当服务器A远程包含服务器B的php文件时,远程服务器B会先对php进行解析,解析后的结果再传给A,而当服务器A远程包含服务器B非脚本文件(比如txt,jpg)时,B会将文件内容(因为是非脚本,B自然不会进行解析)传给A,A包含B传来的文件内容后,再进行解析,而解析过程中又发现B传来的文件内容是PHP文件格式,于是会进行PHP。

最后

以上就是幸福过客为你收集整理的远程文件包漏洞,不能包含PHP的原因详解远程文件包漏洞,不能包含PHP的原因详解的全部内容,希望文章能够帮你解决远程文件包漏洞,不能包含PHP的原因详解远程文件包漏洞,不能包含PHP的原因详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(169)

评论列表共有 0 条评论

立即
投稿
返回
顶部