文件包含

文件包含函数

  • include() include_one() require() require_once()
  • 他们之间的区别在于:
    include()和include_one
    在包含文件时即使遇到错误,下面的代码依然会继续执行;而require()和require_one() 则会直接报错退出程序

挖洞经验

文件包含大多出现在模块加载,模块加载以及cache调用的地方,比如传入的模块名参数,实际上是直接吧这个拼接到了包含文件的路径,比如像espcms的代码:

$archive = indexget('archive','R')
$archive = empty($archive) ? 'adminuser' : $archive;
$action = indexget('action','R');
$action = empty($action) ? 'login' : $action;
include = admin_ROOT . adminfile . "/control/$archive.php"
  • 传入的archive参数就是被包含的文件名,所以我们挖掘漏洞的时候,可以跟踪一下程序的流程看看模块是否加载时包含的文件可控
  • 另外就是直接搜索
    include(),include_one() require() require_onece() 这4个函数来回溯看看

本地文件包含

LFI
条件
1.allow_url_fopen=On
2.用户可以动态控制变量

  • 指只能包含本机文件的文件包含漏洞
  • 测试代码1.php
<?php
//初始化....
define("ROOT",dirname(__FILE__).'/');
//加载模块
$mod = $_GET['mod'];
echo ROOT.$mod.'.php';
include(ROOT.$mod.'.php');
  • 测试代码2.php
<?php phpinfo();?>
  • 请求/1.php?mod=2执行结果
  • 将会输出phpinfo页面

远程文件包含

RFI
条件
1.allow_url_include=On
2.用户可以动态控制变量

  • 指用户可以包含远程文件的包含漏洞
  • 很少能挖到

基于http测试代码
1.php

#直接包含用户传来的参数
include($_GET['url']);
  • 利用则在GET请求url参数中传入http://远程主机地址/2.txt
  • 其中远程机器上2.txt是一个内容为:<?php phpinfo();?> ,访问后返回phpinfo信息
  • 还有一种利用手段,只要执行1.php?url=php://input ,post内容填<?php phpinfo();?>
  • 便会打印phpinfo信息

文件包含截断

  • 大多数文件包含都是需要截断的,因为正常程序里面包含的文件代码一般像include(BASEPATH.mod.′.php′)或include(mod.'.php')或include(mod.′.php′)或include(mod.’.php’)这样的方式,如果我们不能写入以.php为扩展名的文件,拿我们就需要截断来利用

3种姿势

  • %00截断http//xx/1.php?url=1.txt%00, php5.3以后不支持该方法
  • 多个英文句号反斜杠截断: php5.3以后也被修复
  • ? 截断:http//xx/1.php?url=1.txt?

PHP-代码审计-文件包含相关推荐

  1. java代码审计文件包含_代码审计--一道简单的文件包含题目的多种利用方式

    不知出自哪次CTF 前言: 本萌新最近在学习代码审计, 有一天在水群聊到代码审计如何学习, 然后某dalao丢给我一道题,说你对这题有什么看法, 本萌新一看,这不是很简单吗,想也没多想就直接上去?fi ...

  2. php代码审计文件包含,PHP代码审计之远程文件包含(RFI)

    有位叫做普瑞斯特的大牛针对PHP的web应用列出了下面几种攻击方式: 1.命令注入(Command Injection)2.eval注入(Eval Injection)3.客户端脚本攻击(Script ...

  3. 代码审计中的文件包含漏洞

    0x00 背景 文件包含漏洞是php语言的一大特性.文件包含的意思是,服务器在执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码并执行,这会为开发者节省大量的时间.而文件包含漏洞的出现 ...

  4. BlueCms v1.6 本地文件包含漏洞代码审计

    目录 BlueCms POC构造 漏洞利用 BlueCms BlueCMS是一款专注于地方门户网站建设解决方案,基于PHP+MySQL的技术开发,全部源码开放. 复现版本为bluecmsv1.6版本, ...

  5. 代码审计:任意文件包含(php4.81版本)

    代码审计方式: 通读全文 关键字定位 本次采用的是关键字定位,使用工具为seay源代码审计系统. 流程及分析: 添加审计源码项目并定位关键字(使用全局搜索定位) 定位原则:有变量参数传入 分析此处源码 ...

  6. 熊海CMS_V1.0代码审计与漏洞分析及采坑日记(一)--文件包含漏洞

    前言 最近几天在给协会的学弟讲代码审计入门相关内容,便找了这个熊海CMS_V1.0来教学,结果在这个过程中遇到蛮多问题的,于是这篇文章详细记录了对熊海CMS_V1.0从搭建到审计与漏洞分析的过程,其中 ...

  7. 通达OA V11.3 代码审计 (文件上传、文件包含、任意用户登录漏洞)

    因为这段时间比较忙,抽出时间写博客很不容易,所以就简单的吧印象笔记里面的内容站上俩,没有写太多具体的分析过程,尽量都在截图中说明了 附件 通达OA11.3源码(未解码,可以自己去下SeayDzend解 ...

  8. 文件包含--简单的代码审计绕过

    解题思路: 查看页面的每个链接都有些什么,最后目标锁定在flag.php上 页面显示如下: 页面下方源码如下: 源码分析: $file = @$_GET['page']; //将url变量page的值 ...

  9. WEB攻防-通用漏洞文件包含LFIRFI伪协议编码算法代码审计

    目录 知识概要 1.解释 2.实现漏洞的三种方式 3.本地包含LFI&远程包含RFI-区别 4.各类脚本语言包含代码写法 思路点 黑盒发现 白盒发现 CTF案例演示 CTF-78-php&am ...

  10. 【代码审计】PHP文件包含漏洞利用总结

    0x01 概述 PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而导致意外的文件泄露甚至恶意的代码注入.涉及文件包含漏洞的四个函数如下: includ ...

最新文章

  1. DELL服务器有RAID,安装系统识别不到硬盘
  2. mysql实现表单号:表单编码+时间+表单号
  3. zcmu-1783(01字典树)
  4. 阿里云发布vSphere虚拟机备份服务 ,网络带宽有限条件下依然能有效保护数据
  5. (转)也谈设计模式,实例票据打印 解析 Decorator
  6. 剖析Caffe源码之Blob
  7. java shark_JAVA项目开发笔记(3)Shark部分: Shark API | 学步园
  8. linux关于bashrc与profile的区别(转)
  9. CANoe 13 demo 下载和激活-转载
  10. 牛逼!SpringBoot+Vue企业级支付系统!附源码!
  11. 思科cisco模拟器路由器的基础配置
  12. 破解md5加密的方法
  13. 每日一淘洞察市场消费真相,深挖三四五线城市消费者需求
  14. phpstudy的php fpm,浅谈PHP-FPM参数
  15. 华硕(ASUS)路由器AP模式设置教程
  16. Android仿微信头像放大效果
  17. 用什么工具可以批量查询韵达快递
  18. 【生活】解决广州社保无法查询的问题,2020年3月起,广州社保/医保/养老无法在微信/支付宝查询到的解决办法
  19. DxO PhotoLab 4.2Crack,使用独特的DxO本地调整工具
  20. 得吃货者得天下,美食内容IP如何征服大众的胃与心?

热门文章

  1. 64位windows7配置32位odbc
  2. HDU.5909.Tree Cutting(树形DP FWT/点分治)
  3. ObjectInputStream和ObejctOutputStream
  4. C# 乐观锁、悲观锁、共享锁、排它锁、互斥锁
  5. Laravel5.1 搭建博客 --编译前端文件
  6. 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高...
  7. zoj 3747 (DP)(连续至多,连续至少)
  8. 为应用“瘦身”!给 Android 应用开发者的十个建议(转)
  9. Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt(100)方法显示0到100之间的前50个随机整数
  10. mac版smali2java_Android反编译apk并重新打包签名(Mac环境)