(31)【文件包含漏洞】简介、原理、危害、分类、函数、伪协议、利用过程……

目录

一、前言:

二、简介:

三、原理:

四、危害:

五、系统默认配置文件目录

5.1、Linux:

5.2、TomCat:

5.3、Windows:

六、分类:

6.1、本地文件包含漏洞

6.2、远程文件包含漏洞

七、文件包含函数

7.1、php:

7.1.1、include()

7.1.2、include_once()

7.1.3、fopen()

7.1.4、require()

7.1.5、require_once()

7.2、jsp/Servlet:

7.2.1、ava.io

7.2.2、file()

7.2.3、java.io

7.2.4、filereader()

7.3、asp:

7.3.1、include file

7.3.2、include virtual

八、php伪协议

8.1、12个php支持的伪协议

8.2、php://filter为例

8.2.1、原理:

8.2.2、参数:

8.2.3、形式:

九、利用过程:

9.1、pikachu(Fiel Inclusion-local)

 9.1.1、第一步:分析是否存在文件包含

9.1.2、第二步:用burpsuite对变量进行爆破(小插曲)

9.1.3、第三步:分析使用的函数

9.1.4、第四步:读取敏感文件

9.2、pikachu(Fiel Inclusion-remote)

9.2.1、配置:

9.2.2、第一步:分析是否存在文件包含

9.2.3、第二步:利用文件包含漏洞

9.2.4、第三步:中国蚁剑连接


 (星光不负赶路人)


一、前言:

文件包含就像我们编写C、python、Java程序的时候都有用到包含内置的源文件,也就相当于将指定源文件内容复制到当前文件,好比C语言中的#include "file" 和 #include <file>,都包含文件。


二、简介:

文件包含漏洞,开发人员未免避免代码的重复写入,也就是在开发过程中将各个功能或基础文件分为多个模块,然后在需要的代码中包含其他文件/模块

即文件将A包含到B文件后,B文件中就包含了A、B文件。


三、原理:

文件包含漏洞

是当服务器开启allow_url_include选项后,可包含文件被设置为变量,用户可以通过利用某些函数改变变量进而引入要包含的文件,并能控制这个动态变量,如果被恶意利用,而服务器端未如果未文件的变量值进行严格校验,或者被攻击者绕过校验,从而导致恶意代码的注入,就导致了文件包含漏洞的产生。

前提:

allow_url_include=1,即允许远程包含


四、危害:

敏感信息泄露(网站源码、配置文件、系统日志等)

配合上传漏洞获取Webshell(图片马等)

执行任意脚本代码(远程执行.php脚本代码)

控制服务器(能执行任意命令)


五、系统默认配置文件目录

5.1、Linux:

/etc/passwd

        //保存了系统中所有的用户信息

/etc/shadow

        //用户的密码信息

/root/.ssh/authorized_keys

        //公钥文件

/root/.bash_history

        //用户终端操作历史记录

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

        //apache2默认配置文件

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

        //虚拟网站设置

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

        //php相关设置

/etc/httpd/conf/httpd.conf

        //apache

/etc/php5/apache2/php.ini

        //ubuntu系统的默认路径

5.2、TomCat:

apache-tomcat-8.5.51/conf/tomcat-users.xml

        //tomcat的角色(授权用户)配置文件

apache-tomcat-8.5.51/conf/server.xml 

        //tomcat的主配置文件

apache-tomcat-8.5.51/conf/web.xml

        //tomcat应用程序的部署描述符文件

apache-tomcat-8.5.51/logs/catalina.out

         //即tomcat的标准输出和标准出错,所有输出到这两个位置的都会进入catalina.out,这里包含tomcat运行自己输出的日志以及应用里向console输出的日志。

5.3、Windows:

C:\boot.ini

        //查看系统版本

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

        //查看IIS虚拟主机配置文件

C:\windows\repair\sam

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

C:\Program Files\mysql\my.ini

        //mysql配置,记录管理员登陆过的MYSQL用户名和密码

C:\Program Files\mysql\data\mysql\user.MYD

        //mysql.user表中的数据库连接密码

C:\windows\php.ini php.ini

        //php配置文件

C:\Windows\system.in

        //winnt的php配置信息

C:\Windows\win.ini

        //winnt的mysql配置文件

C:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini

        //存储虚拟主机网站路径和密码

C:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf

        //查看WINDOWS系统apache文件

C:/Resin-3.0.14/conf/resin.conf

        //查看jsp开发的网站resin文件配置信息.

C:\Windows\System32\drivers\etc\hostswinserver

        //配置Telnet信息


六、分类:

6.1、本地文件包含漏洞

本地文件包含LFI(local file include)

顾名思义,对服务器的本地文件进行包含(也就是能控制服务器本地文件),然后利用本地文件包含,对系统敏感的配置文件进行包含。如果结合文件上传漏洞,然后将恶意文件下载到本地,再包含这些恶意文件,就能形成更大的危害。

6.2、远程文件包含漏洞

远程文件包含RFI(remote file include)

顾名思义,对第三方的服务器文件进行远程文件包含(也就是远程包含),如果通过URL地址对第三方服务器的恶意文件进行包含(调用其他网站的恶意文件),产生的危害更大(好像都没必要利用文件上传漏洞了)


七、文件包含函数

7.1、php:

7.1.1、include()

找不到文件,只生成警告(E_WARNING),并且脚本会继续

include 'filename';

7.1.2、include_once()

在脚本执行期间包含并运行指定文件,如果该文件中的代码已经被包含了,则不会再次包含。如同此语句名字暗示的那样,只会包含一次,且 include_once 会返回 true。

include_once("test.php")

7.1.3、fopen()

打开文件或者 URL

7.1.4、require()

找不到文件,会生成致命错误(E_COMPILE_ERROR)并停止脚本

require 'filename';

7.1.5、require_once()

在脚本执行期间包含并运行指定文件,如果该文件中的代码已经被包含了,则不会再次包含。

7.2、jsp/Servlet:

7.2.1、ava.io

7.2.2、file()

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

File对象代表磁盘中实际存在的文件和目录,通过构造方法创建一个File对象,创建File对象成功后,可以使用函数方法操作文件。

7.2.3、java.io

Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

7.2.4、filereader()

FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。可以通过构造方法创建需要的对象,创建FIleReader对象成功后,可以参照函数方法操作文件。

7.3、asp:

(动态包含)

7.3.1、include file

7.3.2、include virtual


八、php伪协议

8.1、12个php支持的伪协议

file://         访问本地文件系统
http://         访问 HTTP(s) 网址
ftp://         访问 FTP(s) URLs
php://          访问各个输入/输出流(I/O streams)
zlib://         压缩流
data://         数据(RFC 2397)
glob://         查找匹配的文件路径模式
phar://         PHP 归档
ssh2://         Secure Shell 2
rar://         RAR
ogg://         音频流
expect://         处理交互式的流

8.2、php://filter为例

8.2.1、原理:

php://filter可获取指定文件源码,如果再利用包含函数漏洞,php://filter流会被当作php文件执行,一般对其进行编码,使其不被执行,获取到编码后解码,从而达到任意文件的读取。

8.2.2、参数:

resource=<要过滤的数据流>    必须的。指定了要筛选过滤的数据流

read=<读链的筛选列表>    可选。设定一个或多个过滤器名称,以管道符(|)分隔。

write=<写链的筛选列表>    可选。设定一个或多个过滤器名称,以管道符(|)分隔

<;两个链的筛选列表>    任何没有以read= 或 write= 作前缀的筛选器列表会视情况用于读或写链

8.2.3、形式:

php://filter/read=convert.base64-encode/resource=[文件路径]

php://filter/resource=[文件路径]




九、利用过程:

9.1、pikachu(Fiel Inclusion-local)

 9.1.1、第一步:分析是否存在文件包含

当把每个选项都选一遍,可以发现filename=file1.php中的file从file1-file5

并且参数名为file1.php

这就是一个文件的包含

9.1.2、第二步:用burpsuite对变量进行爆破(小插曲)

其实要是有这个变量,可以用burpsuite抓包后

发送到intruder对变量进行爆破,看能不能获得其他信息

把1添加上载荷位置

再设置payload(有效载荷) 

数字型(number),设置6-50把(因为1-5都放前面让我们看见了,也就没什么东西)

再开始攻击

然后分析攻击的结果

9.1.3、第三步:分析使用的函数

其实这个file6.php是一个账号和密码

 根据报错,可以看见,使用的是include()函数进行,文件包含

9.1.4、第四步:读取敏感文件

本地文件读取

文件包含的是include里面的文件(我在它的上一目录新建了一个txt文件进行测试读取)

所以要注意文件读取的路径

../test.txt

系统文件读取

(这个C:要在最前面,然后一个一个文件夹往后退出去)

C:/../../../../../../../../../windows/WindowsUpdate.log

 还可以

结合上传漏洞,然后文件包含,把恶意代码以脚本运行,从而达到预期操作

9.2、pikachu(Fiel Inclusion-remote)

9.2.1、配置:

这一关要打开allow_url_include

 

将Off改为On

然后再重启

就好了

9.2.2、第一步:分析是否存在文件包含

发现存在include文件包含函数

9.2.3、第二步:利用文件包含漏洞

可以直接包含一个含有一句话马文件,被包含后解析执行

(也可以包含一个含有新建shell.php文件并写入恶意代码,被包含后解析执行)

假设我这是在远程服务器新建的文件(让你假设你就和我一起想)

 在文件里面写入一句马,连接密码写的pass

再进行远程文件包含

http://127.0.0.1:8080/pikachu-master/test.txt

(假设这个是远程的URL地址)

9.2.4、第三步:中国蚁剑连接

 再用中国蚁剑进行连接(菜刀也行)

我觉得蚁剑更强大一些

 

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
DVWA文件包含漏洞利用是指利用DVWA(Damn Vulnerable Web Application)中存在的文件包含漏洞进行攻击。文件包含漏洞是一种常见的安全漏洞,它允许攻击者通过构造恶意请求来包含并执行服务器上的任意文件。 在DVWA中,可以使用包含漏洞来访问系统中的敏感文件、执行恶意代码或者获取系统权限。攻击者可以通过构造特定的请求,利用DVWA中的文件包含漏洞来获取敏感信息或者执行任意代码。 为了利用DVWA中的文件包含漏洞,攻击者通常会使用一些常见的函数,如php中的include()、include_once()、require()、require_once()等。通过构造恶意的文件路径,攻击者可以让服务器加载并执行恶意文件。 因此,为了防止文件包含漏洞利用,开发人员应该在编写代码时注意对用户输入进行过滤和验证,避免将用户输入直接用于文件包含函数中的参数。同时,及时更新和修补系统和应用程序的漏洞也是非常重要的。 #### 引用[.reference_title] - *1* *2* *3* [DVWA之包含漏洞(file Inclusion)——文件包含漏洞产生的原因、文件包含漏洞利用方式、DVWA之包含漏洞...](https://blog.csdn.net/weixin_45116657/article/details/100602769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值