文件上传漏洞(upload靶场)

news2025/3/10 9:52:55

目录

Pass-01:前端绕过

方法一:浏览器禁用js

方法二:直接修改或删除js脚本

方法三:修改后缀绕过

Pass-02:服务器检测

Pess-03:黑名单绕过

Pass-04:.htaccess文件

Pass-05:windows特性和user.ini

方法一:php.自动解析为php(windows下)

方法二:.user.ini绕过

Pass-06:大小写绕过

Pass-07:空格绕过

Pass-08:尾部点绕过

Pass-09:::$DATA特殊符号绕过

Pass-10:利用  '. .'绕过 

Pass-11:双写绕过

Pass-12:get %00截断

Pass-13:post %00截断

Pass-14:照片马(二进制过滤文件类型)

Pass-15:照片马(返回数组过滤文件类型)

Pass-16:照片马(第一字节过滤文件类型)


Pass-01:前端绕过

直接上传会被前端js代码过滤

代码分析第一关是前端过滤类型

方法一:浏览器禁用js

利用浏览器的设置可以禁用js,从而绕过过滤限制

方法二:直接修改或删除js脚本

用Burpsuit,开启拦截pass-01,打开burpsuit界面,Do intercept-Response to request选项,可以得到这次发包的响应包

forward放包找到前端验证部分

直接删除前端js白名单

上传成功

方法三:修改后缀绕过

使用Burpsuit抓包修改后缀达到绕过目的

先将web.php文件后缀修改为jpg(web.jpg绕过前端)

拦截到requset修改web.jpg

修改后send的一下

上传成功

Pass-02:服务器检测

直接上传,提示文件类型不正确

代码分析:

会判断upload_file的类型从而其实文件类型不正确

用BurpSuite抓包看到content-type:application/octet-stream

那就request修改类型为image/jpeg

成功上传

查看上传php文件

Pess-03:黑名单绕过

直接上传 提示不允许上传.asp、 .aspx、.php、 .jsp

代码分析:是一个文件后缀过滤的黑名单

Pass-04:.htaccess文件

源码分析:本关过滤了大多的后缀

但是没有过滤.htaccess   .htaccess文件,指在特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

此功能在httpd.conf中的ALLowOverride ALL 字段决定

所以我们可以建立一个.htaccess文件,文件内容为:

php
<FilesMatch "web.jpg">
  SetHandler application/x-httpd-php
</FilesMatch>
//将该目录以及子目录下的web.jpg当作php文件执行

上传.htaccess文件

接着上传web.php修改后缀为web.jpg

访问上传文件web.jpg成功解析

Pass-05:windows特性和user.ini

和第四关相比.htaccess被过滤

方法一:php.自动解析为php(windows下)

在windows系统下可行

web.php. windows系统的特性自动过滤掉,成为web.php

而在Linux下环境

方法二:.user.ini绕过

.user.ini绕过

上传.user.ini

再上传web.jpg

但是当前是docker拉取的环境 失败

Pass-06:大小写绕过

分析代码:

相比前几个关少了  $file_ext = strtolower($file_ext); //转换为小写

所以大小写就可以绕过

Pass-07:空格绕过

代码分析:

少了$file_ext = trim($file_ext); //首尾去空

可以空格绕过

Pass-08:尾部点绕过

代码分析:

没有$file_name = deldot($file_name);//删除文件名末尾的点

可以用点绕过

Pass-09:::$DATA特殊符号绕过

代码分析:

没有$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

可以用::$DATA特殊符号绕过

Pass-10:利用  '. .'绕过 

尾部去点去空格

依旧可以用web.php. .来绕过

Pass-11:双写绕过

代码分析:

依旧是黑名单但是 代码:$file_name = str_ireplace($deny_ext,"", $file_name);

从文件名 $file_name 中删除所有在 $deny_ext 列表中定义的被禁止的扩展名,替换为空

所以可以双写绕过

Pass-12:get %00截断

换成了白名单

$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);

下面的$file_ext匹配上传文件名中的.最后一次出现位置+1后面的所有字符串

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

使用get传参 重置上传路径

所以可以使用%00截断的方法

web.php%00+xxxxxx.jpg绕过白名单

当执行move_uploaded_file函数时,服务器会对路径中%00后的内容不做解析,默认迁移文件为web.php

Pass-13:post %00截断

和12关区别就是13关换为了post传参

Pass-14:照片马(二进制过滤文件类型)

代码分析:

getReailFileType()用于检测文件头部两个字节的信息(前两个字节是文件格式的标识),并且通过二进制码判断其文件的类型,然后控制文件的上传

直接上传web.php的web.jpg文件上传是失败的

对比正常的照片和web.jpg的文件 头部有明显不同,恰巧代码就是通过头字段来判断的

所以这里使用png照片和web.php代码结合

Pass-15:照片马(返回数组过滤文件类型)

这里用上一题的照片码上传失败显示文件未知,上传失败!

按理说可以用上一题的照片马,

会不会是照片大小的问题

重新截取小照片整合php

GIF89a ?    !?
   ,      D ;
<?php
    phpinfo();
?>

后面发现上传成功

Pass-16:照片马(第一字节过滤文件类型)

代码分析:

通过exif_imagetype($filename);函数取一个图像的第一个字节并检查其签名。

仍可以用上一关的图片马,

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

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

相关文章

苦瓜书盘官网,免费pdf/mobi电子书下载网站

苦瓜书盘&#xff08;kgbook&#xff09;是一个专注于提供6英寸PDF和MOBI格式电子书的免费下载平台&#xff0c;专为电子阅读器用户设计。该平台为用户提供了丰富的电子书资源&#xff0c;涵盖文学、历史、科学、技术等多个领域&#xff0c;旨在打造一个全面的电子书资源库。用…

Linux:理解进程,系统调用,进程,进程切换,调度,分时操作系统和实时操作系统,

操作系统要向上提供对应的服务 操作系统&#xff0c;不相信任何用户或者人&#xff1b;------------银行------窗口 因此提供了系统调用&#xff0c;&#xff08;函数调用&#xff09;-->用户和操作系统之间进行某种数据交互 一&#xff1a;系统调用 计算机的各种硬件资…

【javaEE】多线程(基础)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

vscode - 操作整理

文章目录 vscode - 操作整理概述笔记打开文件后&#xff0c;编码另存为配置指定后缀的文件的语言模式语言模式配置 - Batch 安装eol插件配置文件如果用vscode打开的文件没有显示回车&#xff0c;原因及处理vscode启用了信任模式&#xff0c;需要信任工作区才行。 将打开的文件中…

linux 基本命令教程,巡查脚本,kali镜像

linux实操 shutdown练习 Shutdown -h 5 意思是五个小时之后进行重启 新用户密码设置&#xff0c; Useradd 用户名 新建用户 Passwd 进行设置密码 覆盖关机时间 Shutdown -c 取消重启设置 top练习 查看进程 僵尸进程 kill&#xff1a;查看jobs号直接杀死 kill %num 查看…

R语言使用scitable包交互效应深度挖掘一个陌生数据库

很多新手刚才是总是觉得自己没什么可以写的&#xff0c;自己不知道选什么题材进行分析&#xff0c;使用scitable包后这个完全不用担心&#xff0c;选题多到你只会担心你写不完&#xff0c;写得不够快。 今天演示一下使用scitable包深度挖掘一个陌生数据库 先导入R包和数据 li…

【记录一下学习】Embedding 与向量数据库

一、向量数据库 向量数据库&#xff08;Vector Database&#xff09;&#xff0c;也叫矢量数据库&#xff0c;主要用来存储和处理向量数据。 在数学中&#xff0c;向量是有大小和方向的量&#xff0c;可以使用带箭头的线段表示&#xff0c;箭头指向即为向量的方向&#xff0c…

【Linux-网络】从逻辑寻址到物理传输:解构IP协议与ARP协议的跨层协作

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da;前言 &#x1f4d6; IP地址的组成 &#x1f516;IPv4 &#x1f516;IPv6 &#x1f4da…

解锁前端表单数据的秘密旅程:从后端到用户选择!✨

&#x1f604; 解锁前端表单数据的秘密旅程&#xff1a;从后端到用户选择&#xff01;✨ 嘿&#xff0c;技术爱好者们&#xff01;&#x1f44b; 你有没有在开发中遇到过这样的困惑&#xff1a;表单里的数据&#xff08;比如图片附件、识别点 ID&#xff09;从哪儿来的&#x…

【机械视觉】C#+visionPro联合编程———【一、C# + VisionPro 联合编程详解以及如何将visionPro工具加载到winform】

机械视觉与 C# VisionPro 联合编程详解 目录 机械视觉与 C# VisionPro 联合编程详解 概念 应用场景 1. 工业检测与质量控制缺陷检测 2. 定位与机器人引导 3. 识别与分类 4. 复杂流程控制 将visionPro工具加载到winform 环境准备 一、创建winform项目 二、打开窗体…

江科大51单片机笔记【9】DS1302时钟可调时钟(下)

在写代码前&#xff0c;记得把上一节的跳线帽给插回去&#xff0c;不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 &#xff08;1&#xff09;重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;&#xff08;2&#xff09;初始化 因为…

发行思考:全球热销榜的频繁变动

几点杂感&#xff1a; 1、单机游戏销量与在线人数的衰退是剧烈的&#xff0c;有明显的周期性&#xff0c;而在线游戏则稳定很多。 如去年的某明星游戏&#xff0c;最高200多万在线&#xff0c;如今在线人数是48名&#xff0c;3万多。 而近期热门的是MH&#xff0c;在线人数8…

微信小程序接入deepseek

先上效果 话不多说&#xff0c;直接上代码&#xff08;本人用的hbuilder Xuniapp&#xff09; <template><view class"container"><!-- 聊天内容区域 --><scroll-view class"chat-list" scroll-y :scroll-top"scrollTop":…

为解决局域网IP、DNS切换的Windows BAT脚本

一、背景 为解决公司普通人员需要切换IP、DNS的情况&#xff0c;于是搞了个windows下的bat脚本&#xff0c;可以对有线网络、无线网络进行切换设置。 脚本内容 echo off title 多网络接口IP切换工具:menu cls echo echo 请选择要配置的网络接口: echo echo 1. 有线网络&am…

VUE3开发-9、axios前后端跨域问题解决方案

VUE前端解决跨域问题 前端页面需要改写 如果无效&#xff0c;记得重启服务器 后端c#解决跨域问题 前端js取值&#xff0c;后端c#跨域_c# js跨域-CSDN博客

【计算机网络】计算机网络的性能指标——时延、时延带宽积、往返时延、信道利用率

计算机网络的性能指标 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 在上一篇内容中我们介绍了计算机网络的三个性能指标——速率、带宽和吞吐量。用大白话来说就是&#xff1a;网速、最高网速和实时网速。 相信大家看到这三个词应该就…

Kubermetes 部署mysql pod

步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml&#xff1a; apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…

Docker和DockerCompose基础教程及安装教程

Docker的应用场景 Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 CentOS Docker 安装 使用官方安装脚本自动安装 安装命令…

网络安全等级保护—定级

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 网络安全等级保护五个保护等级 五个保护等级 受侵害的客体 对客体的侵害程度 一般损害 严重损害 特别严重损害 公民、法人和其他组织的合法权益 第一级 第二级 …

macos 程序 运行

sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件