PHP文件包含漏洞的产生缘由是在经过PHP的函数引入文件时,因为传入的文件名没有通过合理的校验,从而操做了预想以外的文件,就可能致使意外的文件泄露甚至恶意的代码注入。最多见的就属于本地文件包含(Local File Inclusion)漏洞了。php
程序开发人员通常会把重复使用的函数写到单个文件中,须要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程通常被称为文件包含。shell
程序开发人员通常但愿代码更灵活,因此将被包含的文件设置为变量,用来进行动态调用,apache
但正是因为这种灵活性,从而致使客户端能够调用一个恶意文件,形成文件包含漏洞。服务器
1. 本地文件包含漏洞ssh
就是在网站服务器上自己存在恶意文件,而后利用本地包含使用。函数
2. 远程文件包含漏洞测试
远程文件包含漏洞就是调用其它网站的恶意文件进行打开网站
常见的PHP文件包含函数ui
require:找不到被包含的文件时会产生致命错误,并中止脚本执行。url
Include:找不到被包含的文件时只会产生警告,脚本将继续执行
Include_once:与include相似,区别就是若是该文件中的代码已经被包含,则不会再次包含。
Require_once:与require相似,区别就是若是该文件中的代码已经被包含,则不会再次包含。
1. 本地包含
修改ph配置文件php.ini
写一个测试文件qswz,测试页面正常
在写一个文件包含测试页qswz111.php
这就是一个简单的文件包含过程
接下来,咱们把被包含的文件名改成txt文件测试
事实说明,只要文件里面写的是php代码就会执行。固然,若是包含的不是php语法规则的内容则会暴露源码。
2. 远程包含
执行的是qswz.txt文件中的内容。
1. 读取敏感文件
Eg: 访问URL:localhost/qswz111.php?page=http://127.0.0.1/qswz.txt若是目标主机文件存在,而且具备相应的权限,那么就能够读出文件的内容,反之会被警告。
2. 远程包含shell
若是目标主机allow_url_fopen选项是激活的,就能够尝试远程包含一句话木马
3. 本地包含配合文件上传
4. PHP封装协议
file:// 访问本地文件系统
http:// 访问HTTP(S)网址
ftp:// 访问FTP(s)URLs
php:// 访问输入/输出流 (I/O streams)
zlib:// 压缩流
data:// 数据(RFC 2397)
ssh2:// Secure Shell 2
expect:// 处理交互式的流
glob:// 查找匹配的文件路径
a. 可使用封装协议读取php文件
b. 可使用封装协议写入php文件 php://input
5. 包含apache 的日志文件
6. 截断包含
嗯,就先这么多吧