网站公司怎么做运营,广东seo排名,网站开发工资咋样,运城建设局网站一、什么是文件包含漏洞 1.文件包含漏洞概述 和SQL注入等攻击方式一样#xff0c;文件包含漏洞也是一种注入型漏洞#xff0c;其本质就是输入一段用户能够控制的脚本或者代码#xff0c;并让服务端执行。
什么叫包含呢#xff1f;以PHP为例#xff0c;我们常常把可重复使…一、什么是文件包含漏洞 1.文件包含漏洞概述 和SQL注入等攻击方式一样文件包含漏洞也是一种注入型漏洞其本质就是输入一段用户能够控制的脚本或者代码并让服务端执行。
什么叫包含呢以PHP为例我们常常把可重复使用的函数写入到单个文件中在使用该函数时直接调用此文件而无需再次编写函数这一过程叫做包含。
有时候由于网站功能需求会让前端用户选择要包含的文件而开发人员又没有对要包含的文件进行安全考虑就导致攻击者可以通过修改文件的位置来让后台执行任意文件从而导致文件包含漏洞。
以PHP为例,常用的文件包含函数有以下四种 include(),require(),include_once(),require_once()
区别如下:
require():找不到被包含的文件会产生致命错误并停止脚本运行 include():找不到被包含的文件只会产生警告脚本继续执行 require_once()与require()类似:唯一的区别是如果该文件的代码已经被包含则不会再次包含 include_once()与include()类似:唯一的区别是如果该文件的代码已经被包含则不会再次包含 php伪协议用法
php支持的伪协议
1 file:// — 访问本地文件系统 2 http:// — 访问 HTTP(s) 网址 3 ftp:// — 访问 FTP(s) URLs 4 php:// — 访问各个输入/输出流I/O streams 5 zlib:// — 压缩流 6 data:// — 数据RFC 2397 7 glob:// — 查找匹配的文件路径模式 8 phar:// — PHP 归档 9 ssh2:// — Secure Shell 2 10 rar:// — RAR 11 ogg:// — 音频流 12 expect:// — 处理交互式的流
php://
名称 描述 resource要过滤的数据流 这个参数是必须的。它指定了你要筛选过滤的数据流。 read读链的筛选列表 该参数可选。可以设定一个或多个过滤器名称以管道符|分隔。 write写链的筛选列表 该参数可选。可以设定一个或多个过滤器名称以管道符|分隔。 两个链的筛选列表 任何没有以 read 或 write 作前缀 的筛选器列表会视情况应用于读或写链。 常用
php://filter/readconvert.base64-encode/resourceindex.php php://filter/resourceindex.php 利用filter协议读文件±将index.php通过base64编码后进行输出。这样做的好处就是如果不进行编码文件包含后就不会有输出结果而是当做php文件执行了而通过编码后则可以读取文件源码。
而使用的convert.base64-encode就是一种过滤器。
data://
数据流封装器以传递相应格式的数据。可以让用户来控制输入流当它与包含函数结合时用户输入的data://流会被当作php文件执行。
示例用法
1、data://text/plain, http://127.0.0.1/include.php?filedata://text/plain,?php%20phpinfo();? 2、data://text/plain;base64, http://127.0.0.1/include.php?filedata://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b 范例 Example #1 打印 data:// 的内容
?php // 打印 I love PHP echo file_get_contents ( data://text/plain;base64,SSBsb3ZlIFBIUAo ); ? Example #2 获取媒体类型
?php $fp fopen ( data://text/plain;base64, , r ); $meta stream_get_meta_data ( $fp );
// 打印 text/plain echo $meta [ mediatype ]; ?
3 file:// 用于访问本地文件系统并且不受allow_url_fopenallow_url_include影响 file://协议主要用于访问文件(绝对路径、相对路径以及网络路径) 比如http://www.xx.com?filefile:///etc/passsword
4 php:// 在allow_url_fopenallow_url_include都关闭的情况下可以正常使用 php://作用为访问输入输出流
5 php://input php://input可以访问请求的原始数据的只读流将post请求的数据当作php代码执行。当传入的参数作为文件名打开时可以将参数设为php://input,同时post想设置的文件内容php执行时会将post内容当作文件内容。从而导致任意代码执行。
例如 http://127.0.0.1/cmd.php?cmdphp://input POST数据?php phpinfo()? 注意 当enctypemultipart/form-data的时候 php://input 是无效的
遇到file_get_contents()要想到用
php://input绕过。
6 zip:// zip:// 可以访问压缩包里面的文件。当它与包含函数结合时zip://流会被当作php文件执行。从而实现任意代码执行。
zip://中只能传入绝对路径。 要用#分隔压缩包和压缩包里的内容并且#要用url编码%23即下述POC中#要用%23替换 只需要是zip的压缩包即可后缀名可以任意更改。 相同的类型的还有zlib://和bzip2://