文件包含漏洞
一、文件包含介绍
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某个函数的时候,直接调用此文件,无需再次编写,这种调用文件的过程通常称为包含。为了代码灵活,开发通常把被包含的文件设置为变量,来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用任意文件,造成文件包含漏洞。在PHP Web Application中较多。
原因:
1.Web应用实现了动态包含。
2.动态包含的文件路径参数,客户端可控。
危害:文件包含漏洞是非常严重的漏洞,如果存在就等于网站的防御措施全部失效。一般的大马、小马过不了安全狗,但是文件包含漏洞可以过掉安全狗。
特点:
1.无视文件扩展名读取文件。如图片.jpg,打开不是图片,二是二进制码。
2.无条件解析PHP代码。如图片.jpg中插入一句话木马info.php。
二、PHP中四个文件包含函数
include() 文件包含失败时,会产生警告,脚本会继续运行。
include_once() 与include()功能相同,文件只会被包含一次。
require() 文件包含失败时,会产生错误,直接结束脚本执行。
require_once() 与require()功能相同,文件只会被包含一次。
本质是将任意文件包含在上述函数的引用变量中。
三 、分类
1.本地文件包含:通过相对路径的方式找到文件,然后包含。读取和打开本地文件。
2.远程文件包含:通过Http、Ftp、Php伪协议(php://),可以加载远程文件。
可以通过php.ini来进行配置:
allow_url_fopen=On/Off 本地文件包含(LFI)的开关
allow_url_include=On/Off 远程文件包含(RFI)的开关
四、文件包含的利用
1.读取敏感文件。
[?path=路径] 绝对路径、相对路径..\..\..\..\..\
2.直接包含图片木马。
[?path=图片]
3.包含木马写shell。
4.访问本地文件
[?path=file://路径]
5.传输php文件
[?path=php://filter/read=convert.base64-encode/resource=文件]
然后把得到的所有字符串base64解码即可。(获取网站源代码)
6.执行php命令:
通过BP抓包
原文地址:https://www.cnblogs.com/fengyufei/p/15314229.html
- 干货 | 深度剖析服务发现组件Netflix Eureka
- 多线程编程学习一(Java多线程的基础).
- TensorFlow | 自己动手写深度学习模型之全连接神经网络
- 多线程编程学习二(对象及变量的并发访问).
- ASM基本配置问题(r5笔记第89天)
- 如何上手使用 Facebook 的开源平台 Detectron?
- 多线程编程学习三(线程间通信).
- 关于create database语句在10g,11g中的不同(r5笔记第88天)
- Web开发模式【Mode I 和Mode II的介绍、应用案例】
- 多线程编程学习四(Lock 的使用)
- Android编程规范
- 干货 | 深入分析Object.wait/notify实现机制
- 关于ORA-01555的问题分析(r5笔记第87天)
- 项目工具类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode118|前K个高频单词
- LeetCode117|最小的k个数
- LeetCode116|移除元素
- LeetCode126|二叉树的后续遍历
- LeetCode125|二叉树的前序遍历
- LeetCode124|二叉树的中序遍历
- LeetCode123|二叉搜索树中第K小的元素
- LeetCode122|删除排序链表中的重复元素II
- LeetCode121|单值二叉树
- LeetCode120|二维数组中的查找
- LeetCode129|不用加减乘除做加法
- LeetCode128|二叉树的最大深度
- LeetCode127|检查平衡性
- 详解Android端与JavaWeb传输加密(DES+RSA)
- Android编程实现下载时主界面与详细界面一致更新的方法