目录穿越及文件包含漏洞
目录穿越概念
目录穿越(Directory Traversal)攻击是黑客能够在Web应用程序所在的根目录以外的文件夹上,任意地存取被限制的文件夹、执行命令或查找数据。目录穿越攻击,也有人称为Path Traversal攻击。
目录穿越的漏洞危害
攻击者可以使用目录穿越攻击来查找、执行或存取Web应用程序所在的根目录以外的文件夹。如果目录穿越攻击成功,黑客就可以执行破坏性的命令来攻击网站
文件操作漏洞的分类
代码展示
先来简单展示一下目录穿越的原理,先在当前目录下新建一个file文件夹,里面建一个1.txt文件,内容随便,然后在上一级文件夹中建一个2.txt文件
demon1.php
<?phpheader("Content-Type:text/html;charset=utf-8");if(isset($_GET['file'])){readfile("file/".$_GET['file']);}
首先我们先来展示本地包含漏洞的效果,现在本地新建一个phpinfo.php
文件
demon2.php
<?php$file = $_GET['name'];if(isset($file)){include ($file);}
phpinfo.php
<?phpphpinfo();
然后将phpinfo
移动到file
文件夹中,目录穿越成功
目录穿越绕过方案
- 进行URL编码:点–>%2e 反斜杠–>%2f 正斜杠–>%5c
- 进行16为Unicode编码:点–>%u002e 反斜杠–>%u2215 正斜杠–>%u2216
- 进行双倍URL编码:点–>%252e 反斜杠–>%u252f 正斜杠–>%u255c
- 进行超长UTF-8 Unicode编码:
- 点–>%c0%2e %e0$40%ae %c0ae
- 反斜杠–>%c0af %e0%80af %c0%af
- 正斜杠–>%c0%5c %c0%80%5c
目录穿越修复方案
- 在URL内不要使用文件名称作为参数
- 检查使用者输入的文件名是否有“…”的目录阶层字符
- 在php.ini文件中设置open_basedir来指定文件的目录
- 使用realpath函数来展开文件路径中的“./”、 “…/”等字符,然后返回绝对路径名称
- 使用basename函数来返回不包含路径的文件名称
文件包含
文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞,被包涵的文件在第三方服务是,就形成了远程文件包含漏洞。
本地包含
本地文件包含(Local File Include,LFI),LFI允许攻击者通过浏览器包含本机上的文件。当一个WEB应用程序在没有正确过滤输入数据的情况下,就有可能存在这个漏洞,该漏洞允许攻击者操纵输入数据、注入路径遍历字符、包含web服务器的其他文件。
远程包含
远程文件包含(Remote File Include,RFI), RFI允许攻击者包含远程文件,远程文件包含需要设置allow_url_include = On,四个文件都支持HTTP、FTP等协议,相对本地文件包含更容易利用,出现的频率没有本地包含多
代码仍然是使用demon2.php的代码
我们先尝试远程包含,这里使用一句话木马看看能不能成功实现目录穿越,这里我们写完后后缀保存为jpg格式
我们先修改php.ini
文件中的allow_url_include
中的值为On
,然后重启phpstudy
这里我们使用菜刀连接,无论是本地包含还是远程包含,都能连接成功
远程包含
本地包含
文件包含挖掘思路
- 模块加载、cache调用,传入的参数拼接包含路径
include()
使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。inclue_once()
功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。require()
使用此函数,只要程序执行,立即调用此函数包含文件,发生错误时,会输出错误信息并立即终止程序。require_once()
功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。
本地包含利用方式
- %00截断
- 记录错误日志文件
- 需要解密base64
- 利用环境:php<5.3 magic_quotes_gpc取消的 可以使用遍历目录实现效果
远程包含利用方式
- 包含文件时会加入默认后缀 比如包含1.jpg会解析成1.jpg.php
- %00截断
- 路径长度截断(linux-4096,windows-256)(不受GPC限制),5.3以后被修复,?name=…/…/…/…/…/…/…/…/…/www/1.php/././././././.[…]/./././././././././
- 点号截断(只在window下可用),?name=…/…/…/…/…/…/…/…/…/boot.ini/………[…]…………
- ? 伪截断,不受GPC和PHP版本限制(<5.2.8)
- php://输入输出流(php://filter/read=convert.base64-encode/resource=1.txt 以base64编码截断)
文件包含修复方案
- 关闭远程包含参数开关,彻底切断这个业务相比较
- 设置类似白名单的方法,筛选固定文件名
- 常见目录穿越字符进行过滤,如(./ …/ …\等)
目录穿越及文件包含漏洞相关推荐
- ThinkPHP文件包含漏洞分析
出品|长白山攻防实验室(ID:A_Tree) 0x00 声明 以下内容,来自长白山攻防实验室的A_Tree作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责 ...
- ThinkPHP Lang多语言本地文件包含漏洞(QVD-2022-46174)漏洞复现
1.漏洞描述 ThinkPHP是一个在中国使用较多的PHP框架.在其6.0.13版本及以前,存在一处本地文件包含漏洞.当ThinkPHP开启了多语言功能时,攻击者可以通过lang参数和目录穿越实现文件 ...
- 89.网络安全渗透测试—[常规漏洞挖掘与利用篇5]—[文件包含漏洞详解实战示例]
我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.文件包含漏洞详解 1.文件包含漏洞相关概念 2.PHP文件包含漏洞相关概念 3.PHP文件包含漏洞利用:`构 ...
- 【网络安全】文件包含漏洞总结
目录: 介绍 文件包含漏洞分类 LFI RFI PHP 的文件包含函数 漏洞示例代码 利用任意文件读取 使用 PHP 封装协议 php://filter php://input RFI getshel ...
- 文件包含漏洞(LFI、RFI)(require()、include()函数)
文章目录 一.文件包含漏洞分类 二.文件包含漏洞原理 三.文件包含函数 四.测试是否存在本地文件包含(LFI)漏洞 五.文件包含漏洞实例 "百度杯"CTF比赛 2017 二月场in ...
- Apache Tomcat 曝文件包含漏洞:攻击者可利用该漏洞读取webapp目录下的任意文件...
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | oschina 来源 | https://ww ...
- Kali学习笔记31:目录遍历漏洞、文件包含漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...
- mysql 多字节编码漏洞_phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
漏洞详情 范围 phpMyAdmin 4.8.0和4.8.1 原理 首先在index.php 50-63行代码 $target_blacklist = array ( 'import.php', 'e ...
- test.php.bak,记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)
题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...
- 文件包含漏洞分析和防御
目录 简介 形成原因 文件包含函数 判断类型 文件包含 本地文件包含(LFI) 防御 本地包含技巧 php://协议的使用 data:协议 日志包含: session 远程文件包含(RFI) 文件读取 ...
最新文章
- 800 名科学家联名主张废除 p 值!斯坦福教授直言,没有p值,期刊将充斥“无可辩驳的废话”!...
- Android Studio 插件的使用
- 电子商务人们广泛使用计算机,电子商务基础——PPT课件
- 为什么使用NoSql及NoSql的优点
- Linux 下 NFS服务的搭建
- 因为造轮子,我一个月就转正了 | 原力计划
- 快解析 : 管家婆A8远程访问解决方案
- 心理测评软件php mysql_中小学版心理测评档案管理系统
- java中三大版本javaSE、javaEE个javaME
- 计算机二级经济订货批量公式,计算机二级考试真题-Excel-李晓玲-采购成本分析...
- 华为一员工猝死出租屋 警方初步排除他杀
- Blender进阶Python编程3D开发-源码分析笔记系列-做出你自己的3D数据图表
- 国内 Top2 高校研一在读,为什么感觉深度学习越学越懵?
- python父亲节快乐_一个“MacBook”新手的Python“笨办法”自学之旅 #第七章:字符串、文本、各种打印、转义序列、手动输入raw_input()...
- Windows XP 启动过程jjhou
- macos high sierra
- FFMPEG之音频播放
- P1228 地毯填补问题(Java语言实现)
- 10038错误,无法连接上阿里云服务器上的MySQL
- SAP部署SSL数字证书
热门文章
- 基于C++的图片压缩设计与实现
- 不要问我1是不是质数
- mysql的执行计划_MySQL——执行计划
- iOS面试 swift篇
- UEFI开发与调试---OVMF 固件简介
- xdb 服务_localhost 8080 XDB服务器需要用户名和密码的问题
- Node.js 在安装模块的时候报错,缺少python环境,56.ERR! configure error gyp ERR! stack Error: Can't find Python execut
- 视频教程-程序员的数学:线性代数-Python
- 医院的智能物流系统如何搭建?
- 一篇通俗易懂的文章初探NIO