概述
远程文件包漏洞,不能包含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,验证
name,验证name的值
如果直接对这个上传文件进行正常访问,结果也显示正常,如下图:
将该文件进行包含
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′]获得了abc的值并且这个name就相当于一个存在于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的原因详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复