文件包含漏洞及绕过方法(以php为例)

2023-11-19

一,文件包含漏洞的由来
简单的来说,为了减少“重复造轮子”引入了文件包含函数,可以直接使用文件中的文件和代码。当通过动态获文件时,或者需要引用网络上其他文件时,用户通过对变量值的修改访问规定的文件,但是未对变量值进行校验,导致有了可乘之机,一般在php中常见。
include()只能将php语言写的以php方式打开,无论后缀为什么,但其他语言只会将源代码输出来。

<?php
$file = $_GET('file');
include($file);#当使用该函数文件包含时,只有执行到该函数才能将文件包含进去,发生错误警告,继续向下执行。
?>

除此之外还有:
Include_once();区别在于重复调用函数时只调用一次
require();与incluse()区别在于,当发生错误时,函数会输出错误信息,并且终止脚本
require_once();同理,只执行一次
highlight_file(); 函数对文件进行语法高亮显示,同样也可以使文件输出
show_source();是higlight_file()的别名
file_get_contents();把整个文件读入一个字符串中
fopen_file();打开文件

除了可以执行文件,还有读取文件内容,这些对于信息收集有很大帮助。

二,文件包含利用方式

  1. 通过上传恶意代码,利用文件包含漏洞显示出来
  2. 读取服务器中其他内容
  3. 只能上传图片文件时,将代码写入图片中getsell

三,文件包含绕过方式

  1. 简单的文件包含漏洞
    用户只需输入地址,便可以访问到服务器上的数据,要求是明白文件的位置。访问特殊文件:
    windows特殊文件:
    C:\boot.ini
    C:\windows\System32\inetsrv\MetaBas.xml
    C:\windows\repair\sam
    C:\program Files\mysql\my.ini
    C:\program Files\mysql\data\mysql\user.MYD
    c\windows\php.ini
    C\windows\my.ini
    ---------------------------------------------o----------------
    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/my.cnf
    /etc/httpd/conf/httpd.conf
    /root/.bash_history
    /root/.mysql_history
    /proc/self/fd/fd*
    /proc/mounts/porc/config.gz

在一些网站中可以直接引用某些文件,例如,showimage.php网页,它引入图片显示出来,我们可以显示网站中的源代码,如果不显示,或者显示未知图片,我们将另存为,再打开就可以获得页面。
在这里插入图片描述

  1. 文件后加入特殊字符绕过
    利用工具,将访问路径后加入%00,可以绕过后缀检查。
    或者后面加一些特殊字符例如 斜杠 点之类。

  2. 省略后缀
    有些程序会将传入参数指引到其他位置,或者修改后缀名,先访问文件判断,例如不需要写后缀名。

  3. 双写绕过
    当写入文件时,发现删除某些特殊字符,我们可以判断是删除了其中字符,例如”php",“…/”,只需再增加一个使其删除后得到我们需要的,需要注意绝对路径与相对路径。

  4. nginx目录解析漏洞
    当判断到中间件是nginx时,我们可以利用nginx目录解析,当我们只能上传.jpg文件时,我们无法利用,只能原文读取出来,但是发现在shell.jpg后加/xxx.php,他就能以php方式读取文件,这就是目录解析漏洞。

  5. 包含日志文件

当我们访问不存在目录时,例如:http://lfi.cn/LFI-1/<?php phpinfo();?>
它会将错误路径保存在日志中。不同的中间件有不同的路径。
日志文件名字为access_log,access.log,error.log,Logfiles等

  1. 伪协议包含
    当不能直接访问目录下文件时,可以选择利用伪协议来访问文件,伪协议有以下几种:(allow_url_fopen和allow_url_include)都为On
    (1)page=file://[绝对路径]
    当页面有file1,file2……后台会判断是否已file开头,我们可以使用此协议。
    (2)php:// 访问各个输入/输出流(I/O streams)
    php://filter用于读取源码
    php://input用于执行php代码,或者直接将代码写入执行。
    (3)zip://[绝对路径], bzip2://[绝对路径], zlib://[绝对路径]协议,都属于压缩楼,访问压缩文件中的子文件,不需要指定后缀
    phar:// 可以查找指定压缩包内的文件,相对路径与绝对路径都可以写
    (4)data: text/plain,<?php 执行内容 ?>与input类似,当我们想查看源代码时,可以将其先转换为base64文件在传到页面上就不会执行PHP了
    (5)http协议
    也可以传入外部链接,自己服务器的钓鱼网站。

四、总结
程序员为了代码的复用,或者直接引入其他服务器的代码,说实话是非常方便的,但是却经不起推敲,当黑客任意访问文件时,服务器就沦陷了。一般读取根目录下index文件,看看其中有什么有价值的东西,
懂得攻就知道如何防:

  1. 在网站配置中,利用open_basedir配置访问的区域。
  2. 过滤点,斜杠和反斜杠。
  3. 当需要远程包含文件时,可以下载到本地
  4. 不要选择动态包含,将文件位置固定,直接访问。

所以,我们知道这样做,别人也知道,这些漏洞大多数网站是用不了的。

我们学会了屠龙技巧,却发现这个世界上没有龙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件包含漏洞及绕过方法(以php为例) 的相关文章

随机推荐

  • 9.14黄金是否会继续下跌?后市如何布局?

    近期有哪些消息面影响黄金走势 今日黄金多空该如何研判 黄金消息面解析 周四 9月14日 现货黄金小幅上涨 现报1912美元 盎司附近 美元指数维持在104 76多头走势不变 美国消费者物价指数 CPI 爆出大量 通胀月率上涨0 6 年率反弹
  • LeetCode 142. 环形链表 II

    题目链接 https leetcode cn problems linked list cycle ii 思路如下 用两个指针 fast slow 同时从起点开始走 fast 每次走两步 slow 每次走一步 如果过程中 fast 走到 n
  • UDP服务recvfrom函数设置非阻塞

    基本概念 其实UDP的非阻塞也可以理解成和TCP是一样的 都是通过socket的属性去做 方法一 通过fcntl函数将套接字设置为非阻塞模式 方法二 通过套接字选项SO RECVTIMEO设置超时 方法一源码 编译 g udp server
  • pyqt5

    简介 PyQt5 tutorial 2023 Create a GUI with Python and Qt 官方提供了几本书 我没钱买 有钱买了的大哥 可不可以提供一份拷贝本 这是一个前端框架 特点是跨平台 Windows Mac or
  • 练习(二)——威斯康辛乳腺癌数据集

    该数据集来自南斯拉夫卢布尔雅那大学医疗中心肿瘤研究所 由M Zwitter 与 M Soklic 二者提供 感谢 该数据集可在UCI数据库中找到 该数据库是加州大学欧文分校提出的用于机器学习的数据库 是一个常用的标准测试数据集 该数据集有2
  • 无法解析的外部符号 “public: __cdecl nvinfer1::YoloPluginCreator::YoloPluginCreator

    无法解析的外部符号 public cdecl nvinfer1 YoloPluginCreator YoloPluginCreator 解决方法1 不选择c 项目 而选择建一个nvidia runtime项目 自动就带有了 解决方法2 在V
  • vue项目中常见的 filter 过滤器总结

    使用方法 import Vue from vue 在双花括号中 message timeFilter message filterA filterB message fliterA arg1 arg2 在 v bind 简写 中 div d
  • IAR指定FLASH地址定义常量

    需求 IAP中 需要在HEX文件里增加版本号 软件 IAR8 3 notepad IAR代码格式 root前面是两个下划线 注意不要再 h文件里定义 防止多次编译 root const char HardwareDate 0x807F900
  • wedo2.0编程模块介绍_能量黑科技模块系列十:RFID魔块

    RFID魔块 RFID 此模块可以对套件配套的RFID卡或者空白RFID卡进行读写 用于权限验证的DIY制作 常规的公交卡 地铁卡是无法进行写入 但可以读取UID号 配套RFID卡内存为1K 有16个分区 每个分区有3个数据块可进行写入此模
  • Hexo搭建个人博客并免费部署

    文章目录 HEXO 一 GitLub关联SSH 二 初始化hexo 三 配置GitHub Pages 3 1 config yml Hexo配置文件 3 2 报错 因为在此系统上禁止运行脚本 四 配置主题 4 1 NexT主题 五 创建标签
  • REUSE_ALV_FIELDCATALOG_MERGE

    作用 根据程序中的数据内表结构 来自动生成FIELDCAT 内表 不用定义宏或者Form来一个个加入 会根据内表结构所参照的词典类型来自动完成如表标题字段名的生成 得到大概的FIELDCAT 后 可以再根据特殊情况再修改FIELDCAT 内
  • javaSE基础学习总结之开发团队调度软件练习

    java第一阶段学习总结 开发团队调度软件的实现 1 项目需求 2 项目MVC架构 3 创建com mvc team domian模块 4 创建com mvc team service模块 下面展示一些 内联代码片 5 创建com mvc
  • UI图片移动

    local x y 0 149 local run 0 local pi0 20 ui 图片2 右移动3 左移动4 ui 7266427303413860920 7266427303413860920 2 72664273034138609
  • 10个有用的Siebel标准功能

    作为第一篇blog 不想罗列一些Siebel的市场信息或者功能介绍等Overview 以下Siebel非常有用的10个小的tip 1 自定义数据显示格式 用户可以根据自己需要隐藏界面上的某些列 也可以通过拖放的方式控制列显示的顺序 2 自动
  • docker && Tugraph

    拉取tugraph镜像 docker pull tugraph tugraph db centos7 启动docker docker run d p 7070 7070 p 9090 9090 name tugraph demo tugra
  • Oracle Sequence Cache 参数说明

    之前整理的一篇文章 ORACLE SEQUENCE 介绍 http blog csdn net tianlesoftware archive 2009 10 30 4745039 aspx 之前整理的一篇文章 那是还是写blog初期的作品
  • nacos 的 cp 和 ap

    如果只有一个 nacos 节点 可以直接以单机模式启动 naming 功能是完全正常的 也可以以集群模式启动 配置文件中只配一个节点即可 但是 因为此时 nacos 的 raft 实现中 一个节点是选不了主的 所以 cp 模式的 raft
  • matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

    原文链接 http tecdat cn p 15508 绘制ROC曲线通过Logistic回归进行分类 加载样本数据 load fisheriris通过使用与versicolor和virginica物种相对应的度量来定义二元分类问题 pre
  • java 布尔类型_Java布尔类型

    Java布尔类型 在Java语言中布尔类型的值只包括true和false 没有其他值 不包括1和0 布尔类型的数据在开发中主要使用在逻辑判断方面 例如 如果外面在下雨 我出门带一把雨伞 如果明天休息 咱们就一起出去玩耍吧 请看一段程序 以下
  • 文件包含漏洞及绕过方法(以php为例)

    一 文件包含漏洞的由来 简单的来说 为了减少 重复造轮子 引入了文件包含函数 可以直接使用文件中的文件和代码 当通过动态获文件时 或者需要引用网络上其他文件时 用户通过对变量值的修改访问规定的文件 但是未对变量值进行校验 导致有了可乘之机