文件包含漏洞实验详解

2017-12-15  本文已影响33人  CSeroad

参考《白帽子讲web安全》,实验心得:

想要成功利用文件包含的漏洞,需要满足两个条件

(1)include()等函数通过动态变量的方式引入需要包含的文件

(2)用户能够控制该动态变量

以DVWA的文件包含来做实验

实验环境:

DVWA,win10,wampserver2.4-x86,中国菜刀等

本地文件包含漏洞

当用户可以控制page参数时,我们可以进行查看我们任意想要查看的文件。即目录遍历。因为wamp的php.ini文件默认情况下allow_url_fopen=on

包含漏洞 漏洞探索 phpinfo

使用../../的方式来返回上层目录。当然也采用不同的编码来进行绕过一些限制。

文件包含的防护

当php采用了open_basedir,它用来限制特定目录php能打开的文件。

在php.ini中默认是没有打开的。

无设置

我们对其进行设置,任意文件包含就会失败

限制目录

如果是要限制一个指定的目录,最后一定要加上\

远程文件包含

默认情况下php.ini的配置选项allow_url_include=off,不能远程文件,我们手动设置为on,以方便我们的实验

www.baidu.com success

我们还可以利用文件包含漏洞执行任意命令,需要借助另一台服务器,我利用虚拟机的win7来让实验更加完美,虚拟机IP为192.168.15.156,我们新建一个文件hack.txt,代码为:

远程包含一句话木马

注:创建的文件后缀名一定是txt、jpg、rar,一定是非php文件后缀名的文件,进而getshell

然后我们控制page参数来访问我们构建的脚本

我们可看到在本机win10的dvwa下新建了一个文件sheller.php

sheller.php

访问sheller.php

成功利用

那么我们可以把hack.txt代码进行修改,和中国菜刀相结合

hack.txt文件

再次访问,并使用菜刀,成功利用。

生成shell.php 中国菜刀 成功

我们还有别的思路,都可以进行尝试

比如在hack.php文件里,写以下代码

系统命令 ipconfig IP地址

注意:$_POST和$_GET的传递方式不一样。

本地文件包含的利用技巧

1. php://input是可以访问请求原始数据的只读流。

可以读取到post没有解析的原始数据

2. php://filter读取包含漏洞脚本的源码

php://filter/read=convert.base64-encode/resource=[文件路径]

base64

读取index.php文件,再使用base64进行解码。

3. data URL schema将文件包含漏洞变成代码进行执行漏洞

data:text/plain,<?php system('ipconfig');?>

执行系统命令

4. 包含apache配置文件

首先利用burpsuite进行抓包访问,将想要执行的php代码插入其中,避免<、>等符号被过滤,随后访问access.log,执行代码。

(我使用的wampserver,access.log默认在wamp/logs/access.log)

burpsuite抓包 访问access.log success

5. file:// 协议查看任意文件

可查看任意文件

6. zip:// 协议

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件。可以被php解析的子文件后缀名

还有其他一些协议的利用:

php://stdin 是只读的, php://stdout 和 php://stderr 是只写的,ftp://访问ftp

expect://协议执行任意linux的指令,使用http://localhost/include.php?page=expect://command

来执行任意linux指令

总结:

文件包含漏洞即是类似include函数在包含文件的时候,使用GET或POST请求方式,使得参数有可能被控制。

所以出现文件包含漏洞

如:

可用于代码审计

参考文献:

https://www.waitalone.cn/php-file-include.html

http://www.jb51.net/article/128429.htm

上一篇下一篇

猜你喜欢

热点阅读