【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧

一,工具资源下载

百度网盘资源下载链接地址:

百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间icon-default.png?t=N7T8https://pan.baidu.com/s/1IHTnqsiUBd4DWmEKoXOcrA?pwd=8888
提取码:8888 

二,靶场安装及 1-5关

【网络安全 --- 文件上传靶场练习】文件上传靶场安装以及1-5关闯关思路及技巧,源码分析-CSDN博客文章浏览阅读195次。【网络安全 --- 文件上传靶场练习】文件上传靶场安装以及1-5关闯关思路及技巧,源码分析https://blog.csdn.net/m0_67844671/article/details/134102042?spm=1001.2014.3001.5502

三,6-15关

3-6 第六关:

空格和点配合绕过

先看一下源代码里面的代码将上传的文件名都改为小写了,那么上面的方法就不行了。

利用Windows系统的文件名特性。文件名最后增加空格和点,写成1.php .,这个需要用burpsuite抓包修改,上传后保存在Windows系统上的文件名最后的一个.会被去掉,实际上保存的文件名就是1.php  

改完以后放行,然后关闭拦截

 回来查看发现已经上传成功了

 

这一关主要用的是windows文件命名的特性 

3-7 第七关

原理同Pass-06,文件名后加点和空格,改成 1.php. ,这个我们就不演示了

3-8 第八关

基于文件流特性::$DATA来绕过,windows下的ntfs文件流特性来玩的。

先查看源码,分析代码,少了 $file_ext = str_ireplace(‘::$DATA‘, ‘‘, $file_ext);//去除字符串::$DATA 这一句,我们可以采用Windows文件流特性绕过,文件名改为1.php::$DATA , 上传成功后保存的文件名其实是1.php

正常上传的话不让上传php木马文件,我们上传时抓包

 在文件名tu.php后面加上::$DATA

 

成功绕过去了

 

3-9 第九关:

点空格点绕过

先看源码

原理同Pass-06,上传文件名后加上点+空格+点,改为 1.php. . ,这里我就不演示了  

1.php. .  先通过trim函数去左右空格,然后删除文件名末尾的点,就剩1.php. 了;strchr函数是从一个字符串中查找指定的字符,并返回从这个字符到结尾的内容,所以得到的是.php.    ;然后转换小写,去除文件流没影响,最后首位去空,剩下.php.       ;最后保存的时候Windows自动会把末尾的点也会去掉,就这样成功绕过去了    

3-10 第十关:

双写绕过

先看源代码

看到str_ireplace,这是一个替换用的函数,第一个参数为替换的内容,这里指定是是deny_ext数组,第二个参数为'',第三个参数为文件名,意思就是文件名里包含数组里的后缀的话直接替换为''

这个很好绕过,比如说我们传一个tu.php;发现php在数组里面,就会替换成'';最后就剩下一个tu了,我们的做法是双写,上传一个tu.pphphp文件,这样的话发现确实存在php,就会进行替换替换以后就剩下tu.php了,就绕过去了

 我把服务端文件存储的文件夹清空了,上传以后我们看一看效果

选择我们改过后缀的文件 

 发现上传成功嘞了 

如我们所料,成功上传了 

 

3-11 第十一关:

%00截断,这个属于白名单绕过,这是php语言自身的问题,php低版本存在的漏洞

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']
['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_GET['save_path']."/".rand(10,99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = '上传出错!';}} else{$msg = "只允许上传.jpg|.png|.gif类型文件!";}
}

 分析代码,这是以时间戳的方式对上传文件进行命名,使用上传路径名%00截断绕过,不过这需要对文件有足够的权限,比如说创建文件夹,上传的文件名写成1.jpg, save_path改成../upload/1.php%00 (1.php%00.jpg经过url转码后会变为1.php\000.jpg),最后保存下来的文件就是1.php

选择一个webshell文件,然后抓包 

 

抓包如下

 

按如下图进行修改,然后放包,关闭抓包

 

我的一直提示上传错误,原理是没问题的,你们自己试一下,我回去好好研究研究

 

3-12 第十二关:

0x00绕过

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']
['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_POST['save_path']."/".rand(10, 
99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传失败";}} else {$msg = "只允许上传.jpg|.png|.gif类型文件!";}
}

 原理同Pass-11,上传路径0x00绕过。利用Burpsuite的Hex功能将save_path改成../upload/1.php【二进制00】形式

跟十一关不同的地方在于,第十一关的上传路径在URL上我们可以通过%00(也就是0URL编码以后就是%00)来截断,现在文件上传路径在数据中,所以需要0x00十六进制形式截断

我们上传一个webshell.jpg图片,然后抓包

发现上传路径在数据部分里

 

我们可以这样做,后面接上aini.php (注意有个空格),为了方便改数据的时候定位 

点击上面的Hex,让数据以十六进制形式显示 

 

往下翻,找到我们路径的位置,我们在aini.php后面加了空格,空格转换为十六进制就是20,所以很好定位,左边红色框里的20就是我们自己故意留下的空格

 

然后就是把20改为00,也就是十六进制的00了,跟第十一关%00截断原理一模一样

 

切换回来以后,其实aini.php后面看不出来有变化,但是确实已经加上了截断 

 

不过还是跟第十一关一样的文件上传失败的错误,暂时没找出原因,不过原理就是这个,你们自己试一下看看 

 

3-13 第十三关:

绕过文件头检查

function getReailFileType($filename){$file = fopen($filename, "rb");$bin = fread($file, 2); //只读2字节fclose($file);$strInfo = @unpack("C2chars", $bin);    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    $fileType = '';    switch($typeCode){      case 255216:            $fileType = 'jpg';break;case 13780:            $fileType = 'png';break;        case 7173:            $fileType = 'gif';break;default:            $fileType = 'unknown';}    return $fileType;
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$file_type = getReailFileType($temp_file);if($file_type == 'unknown'){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

以上是检查文件头的函数 

绕过文件头检查,添加GIF图片的文件头GIF89a,绕过GIF图片检查。

或者我们使用命令copy 1.jpg /b + shell.php /a webshell.jpg,将php一句话追加到jpg图片末尾,代码不全的话,人工补充完整。形成一个包含Webshell代码的新jpg图片,然后直接上传即可。但是我们没有办法拿到shell,应为我们上传的图片马无法被解析成php形式,通常图片马配合%00或者0x00截断上传,或者配合解析漏洞

我在下面这篇博客里讲了绕过文件头检查的三种方式,可以去这篇博客里参考

【网络安全 --- 任意文件上传漏洞(2)】带你了解学习任意文件上传漏洞-CSDN博客文章浏览阅读45次。【网络安全 --- 任意文件上传漏洞(2)】带你了解学习任意文件上传漏洞。讲述了任意文件上传漏洞,以及几种绕过方法https://blog.csdn.net/m0_67844671/article/details/134036922?spm=1001.2014.3001.5502

3-14 第十四关:

function isImage($filename){$types = '.jpeg|.png|.gif';if(file_exists($filename)){$info = getimagesize($filename);$ext = image_type_to_extension($info[2]);if(stripos($types,$ext)>=0){return $ext;}else{return false;}}else{return false;}
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$res = isImage($temp_file);if(!$res){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

 原理跟 代码注入绕过--getimagesize() 一样,参考以下博客

【网络安全 --- 任意文件上传漏洞(2)】带你了解学习任意文件上传漏洞-CSDN博客文章浏览阅读47次。【网络安全 --- 任意文件上传漏洞(2)】带你了解学习任意文件上传漏洞。讲述了任意文件上传漏洞,以及几种绕过方法https://blog.csdn.net/m0_67844671/article/details/134036922?spm=1001.2014.3001.5502

getimagesize() 函数用于获取图像尺寸 ,索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM这里有详解:

PHP 获取图像信息 getimagesize 函数-CSDN博客文章浏览阅读2.9w次。getimagesize() 函数用于获取图像尺寸,类型等信息。imagesx() 函数用于获取图像的宽度。imagesy() 函数用于获取图像的高度。getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。语法:array getimagesize( string fhttps://blog.csdn.net/sanbingyutuoniao123/article/details/52166617  

image_type_to_extension() 函数用于获取图片后缀  

3-15 第十五关:

exif_imagetype()绕过

跟第十三,第十四关差不多

function isImage($filename){//需要开启php_exif模块$image_type = exif_imagetype($filename);switch ($image_type) {case IMAGETYPE_GIF:return "gif";break;case IMAGETYPE_JPEG:return "jpg";break;case IMAGETYPE_PNG:return "png";break;    default:return false;break;}
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$res = isImage($temp_file);if(!$res){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

其中:exif_imagetype() 此函数是php内置函数,用来获取图片类型  

 

 

 

 

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

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

相关文章

var与*avg与**kwargs

前因 看不懂下面这段代码是怎么个意思 loss model.get_loss(**samples) def get_loss(self, source, prev_outputs, target, mask, **unused):...后果 https://blog.csdn.net/weixin_46841421/article/details/110871251 两种类型都讲到了 https://www.jianshu.com/p/be921…

Generative AI 新世界 | Falcon 40B 开源大模型的部署方式分析

在上期文章,我们探讨了如何在自定义数据集上来微调(fine-tuned)模型。本期文章,我们将重新回到文本生成的大模型部署场景,探讨如何在 Amazon SageMaker 上部署具有 400 亿参数的 Falcon 40B 开源大模型。 亚马逊云科技…

使用MSYS2的静态Qt版本进行Widgets项目编译时需要注意的问题

项目场景: 需要编译一个静态版本的应用程序,并用upx进行压缩,以便减少携带的动态链接库,生成每个文件不超过10MB的轻量级绿色发布包。使用动态库不利于发布。准备发布的环境,是学校的教学中心的学生计算机。学生计算机…

干货!数字IC后端入门学习笔记

很多同学想要了解IC后端,今天大家分享了数字IC后端的学习入门笔记,供大家学习参考。 很多人对于后端设计的概念比较模糊,需要做什么也都不甚清楚。 有的同学认为就是跑跑 flow、掌握各类工具。 事实上,后端设计的工作远不止于此。…

力扣:146. LRU 缓存(Python3)

题目: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&#x…

【C++笔记】C++多态

【C笔记】C多态 一、多态的概念及实现1.1、什么是多态1.2、实现多态的条件1.3、实现继承与接口继承1.4、多态中的析构函数1.5、抽象类 二、多态的实现原理 一、多态的概念及实现 1.1、什么是多态 多态的概念: 在编程语言和类型论中,多态(英…

【vue2.x】新手如何快速用vue导入GLTFLoader模型

Three.js支持包括 .obj、.gltf等类型的模型结构。glTF(GL传输格式)是Khronos的一个开放项目,它为3D资产提供了一种通用的、可扩展的格式,这种格式既高效又与现代web技术高度互操作。 文章目录 一、安装引入Three.js在需要使用3D模…

DNS 域名解析系统

文章目录 前言什么是 DNS 域名解析系统为什么需要 DNS 域名解析DNS 是如何发展的hosts 文件维护域名和IP的映射关系DNS 系统(服务器)DNS 镜像系统 前言 前面为大家分享了关于计算机网络中应用层——自定义协议、传输层——UDP、TCP 协议、网络层——IP协…

Java修仙传之Flink篇

大道三千:最近我修Flink 目前个人理解: 处理有界,无界流的工具 FLINK: FLINK定义: Flink特点 Flink分层API 流的定义 有界数据流(批处理): 有界流:数据结束了,程序也…

OIerDb NG-来自信息的仪式感

OIerDb NG 参加过便有你的名字,历史不会遗忘你,仪式感满满! 自从体测之后,我对信竞的欲望更强烈了。。。 偷一点懒0.25就没了,这玩意要记入中考总分,一分一操场啊啊啊!

方法引用的学习

把已经有的方法拿过来用,当作函数时接口中抽象方法的方法体 1.引用出必须是函数式接口 2.被引用的方法必须已经存在 3.被引用方法的形参和返回值必须与抽象方法保持一致 4.被引用的方法功能要满足当前需求 /** 创建一个数组,按照倒叙排序* *///创建数…

1052 卖个萌

一.问题: 萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的: [左手]([左眼][口][右眼])[右手]现给出可选用的符号集合,请你按用户的要求输出表情。 输入格式: …

大数据之LibrA数据库系统告警处理(ALM-12005 OKerberos资源异常)

告警解释 告警模块对Manager中的Kerberos资源的状态进行监控,当Kerberos资源异常时,系统产生此告警。 当Kerberos资源恢复时,且告警处理完成时,告警恢复。 告警属性 告警参数 对系统的影响 Manager中的Kerberos资源异常&#…

ceph高可用、手动安装

操作系统:centos8 三台服务器: 192.168.6.22:mon,mgr,mds,osd 192.168.6.23:mon,mgr,mds,osd 192.168.6.24:mon,mgr,mds,osd 正式环境osd和mon不应该在一个节点,建议osd单独服务器安装。 ceph版本&am…

element表格自定义筛选

文章目录 前言一、简介二、效果展示三、源码总结 前言 提示:这里可以添加本文要记录的大概内容: …待续 提示:以下是本篇文章正文内容,下面案例可供参考 一、简介 修改el-table的筛选…待续 二、效果展示 三、源码 使用方法…

PHP判断闰年

闰年的规则 1.能被4整除且不能被100整除 (普通闰年) 2.能被400整除,公历年份是整百数的,必须是400的倍数才是闰年(世纪闰年) 代码 function isLeapYear($year) {if($year%40 && $year%100!0){r…

Go 中的 OOP- 用结构体代替类

Go是面向对象的吗? Go 不是一种纯粹的面向对象编程语言。这段摘录自 Go 的常见问题解答,回答了 Go 是否是面向对象的问题。 是也不是。虽然Go有类型和方法,并且允许面向对象的编程风格,但是没有类型层次结构。Go中的“接口”概念…

sentinel规则持久化-规则同步nacos-最标准配置

官方参考文档&#xff1a; 动态规则扩展 alibaba/Sentinel Wiki GitHub 需要修改的代码如下&#xff1a; 为了便于后续版本集成nacos&#xff0c;简单讲一下集成思路 1.更改pom 修改sentinel-datasource-nacos的范围 将 <dependency><groupId>com.alibaba.c…

[SUCTF 2019]EasySQL 1

题目环境&#xff1a; 把你的旗子给我&#xff0c;我会告诉你旗子是不是对的。 判断注入类型1回显结果 不是字符型SQL注入 1回显结果 数字型SQL注入 查所有数据库,采用堆叠注入1;show databases;查看所有数据表1;show tables;尝试爆Flag数据表的字段1;show columns from Flag; …

算法——程序的灵魂

文章目录 前言算法与程序的关系例子1&#xff1a;冒泡排序例子2&#xff1a;斐波那契数列算法优化与进阶总结 前言 大家好我是艾老虎尤&#xff0c;算法与程序是计算机科学中两个非常重要的概念。算法是解决问题的方法和步骤&#xff0c;而程序是算法的具体实现。在计算机科学…