文件包含 0 1学习

漏洞原理

成因

文件包含漏洞是一个最常见的依赖与脚本运行而影响Web应用程序的漏洞.当应用程序使用攻击者控制的变量建立一个可执行代码的路径,允许攻击者控制在运行时执行哪个文件时,就会导致文件包含漏洞.程序开发人员通常会把可重复使用的函数写入单文件中,在使用这些函数时,程序开发人员直接调用此文件,而无需再次编写函数,这种调用文件的过程一般被称为文件包含,此外,程序开发人员都希望代码更加灵活,所以通常会被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用恶意文件,导致文件包含漏洞.

危险函数

文件包含漏洞出现的前提是服务器开启allow_url_include选项在此前提下就可以通过php的某些特性函数(include require,include_once,require_once)利用url去动态包含文件,区别在于include(),include_once()遇到错误继续执行,而require(),require_once()遇到错误直接退出程序,如果在PHP配置中开启了allow_url_fopen,那么就可以进行远程文件包含.

|-------------------------------------------|--------------------------------------|
| 函数 | 概况 |
| include(filepath&<url&伪协议>) | 在包含的过程中如果出现错误,会抛出一个警告,程序继续正常执行 |
| include_once(filepath&<url&伪协议>) | 只包含一次,其他同上 |
| require(filepath&<url&伪协议>) | 在包含的过程中如果出现错误,会直接报错并退出程序的执行 |
| require_once(filepath&<url&伪协议>) | 只包含一次,其他同上 |
| file(filepath&<url&伪协议>) | 把整个文件读入一个数组 |
| fopen(filepath&<url&伪协议>,$mode) | 打开文件或者URL(包含伪协议),搭配fread()和fgets()使用 |
| readfile(filepath&<url&伪协议>) | 读取并输出文件(不输出php代码),返回字节数 |
| highlight_file(filepath&<url&伪协议>) | 高亮输出代码 |
| show_source(filepath&<url&伪协议>) | 同上 |
| file_get_contents(filepath&<url&伪协议>) | 把整个文件读入一个字符串 |

最简单的文件包含

<?php

file=_GET['page'];

include($file);

?>

代码分析:

file=_GET['page'];会将get传参page的值赋值给$file

include(包含$file)任何文件包含后如果携带有php代码会直接解析

这里用户以GET形式的页面传入变量file,随后被include函数包含,中途没有进行任何过滤和规范性检测,黑客往往利用这种漏洞进行任意代码执行或文件读取

实验

include.php

<?php

file=_GET['page'];

include($file);

?>

.任意后缀名都可以

phpinfo

<? php phpinfo(); ?>包含phpinfo直接显示

一句话木马

<? php eval($_GET['md']); ?>

注意事项

文件包含只包含xxx文件如果是想给包含的文件传入数据需要用到&然后指定传入什么数据

在使用system的时候需要"system('命令');"记住不要忘记;

&md=system("ls");

相关推荐
呼啸长风5 分钟前
FastKV的轻量化回归
android·开源·github
rui锐rui31 分钟前
大数据学习6:Sqoop数据迁移工具
大数据·学习·sqoop
psybrain39 分钟前
脑科学圈| 利用眼动追踪评估演讲情境下焦虑障碍儿童的注视行为
学习·心理学·脑科学·课堂·焦虑·儿童青少年·眼动
半桔1 小时前
【Linux手册】从接口到管理:Linux文件系统的核心操作指南
android·java·linux·开发语言·面试·系统架构
xiaopengbc1 小时前
Android解压工具,ZArchiver,RAR for Android,iZip,The Unarchiver,解压专家
android
Digitally1 小时前
5种使用USB数据线将文件从安卓设备传输到电脑的方法
android
序属秋秋秋2 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
B1nna3 小时前
Docker学习
学习·docker·容器
promising-w9 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习