文件上传漏洞(upload靶场)
目录
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);函数取一个图像的第一个字节并检查其签名。
仍可以用上一关的图片马,

相关文章:
文件上传漏洞(upload靶场)
目录 Pass-01:前端绕过 方法一:浏览器禁用js 方法二:直接修改或删除js脚本 方法三:修改后缀绕过 Pass-02:服务器检测 Pess-03:黑名单绕过 Pass-04:.htaccess文件 Pass-05:windows特性和user.ini 方法一:php.自动解析为ph…...
苦瓜书盘官网,免费pdf/mobi电子书下载网站
苦瓜书盘(kgbook)是一个专注于提供6英寸PDF和MOBI格式电子书的免费下载平台,专为电子阅读器用户设计。该平台为用户提供了丰富的电子书资源,涵盖文学、历史、科学、技术等多个领域,旨在打造一个全面的电子书资源库。用…...
Linux:理解进程,系统调用,进程,进程切换,调度,分时操作系统和实时操作系统,
操作系统要向上提供对应的服务 操作系统,不相信任何用户或者人;------------银行------窗口 因此提供了系统调用,(函数调用)-->用户和操作系统之间进行某种数据交互 一:系统调用 计算机的各种硬件资…...
深入理解Vue中的Component:构建灵活且可复用的前端模块
在前端开发的世界里,随着应用程序的规模和复杂度不断增加,如何有效地组织和管理代码成为了一个关键问题。Vue.js作为一款流行的前端框架,通过其强大的组件系统为开发者提供了一种优雅且高效的解决方案。本文将深入探讨Vue中的Component(组件),包括其基本概念、创建方式、…...
【javaEE】多线程(基础)
1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...
vscode - 操作整理
文章目录 vscode - 操作整理概述笔记打开文件后,编码另存为配置指定后缀的文件的语言模式语言模式配置 - Batch 安装eol插件配置文件如果用vscode打开的文件没有显示回车,原因及处理vscode启用了信任模式,需要信任工作区才行。 将打开的文件中…...
linux 基本命令教程,巡查脚本,kali镜像
linux实操 shutdown练习 Shutdown -h 5 意思是五个小时之后进行重启 新用户密码设置, Useradd 用户名 新建用户 Passwd 进行设置密码 覆盖关机时间 Shutdown -c 取消重启设置 top练习 查看进程 僵尸进程 kill:查看jobs号直接杀死 kill %num 查看…...
R语言使用scitable包交互效应深度挖掘一个陌生数据库
很多新手刚才是总是觉得自己没什么可以写的,自己不知道选什么题材进行分析,使用scitable包后这个完全不用担心,选题多到你只会担心你写不完,写得不够快。 今天演示一下使用scitable包深度挖掘一个陌生数据库 先导入R包和数据 li…...
Kali WebDAV 客户端工具——Cadaver 与 Davtest
1. 工具简介 在 WebDAV 服务器管理和安全测试过程中,Cadaver 和 Davtest 是两款常用的命令行工具。 Cadaver 是一个 Unix/Linux 命令行 WebDAV 客户端,主要用于远程文件管理,支持文件上传、下载、移动、复制、删除等操作。Davtest 则是一款…...
QSplashScreen启动画面开发详解
QSplashScreen启动画面 1. 基本概念2. 使用场景3. 基本操作与代码示例3.1 创建简单的启动画面3.2 动态更新启动画面信息4. 自定义启动画面样式4.1 自定义文字和背景5. 高级应用:结合多线程加载6. 注意事项7. 总结其他QT文章推荐QSplashScreen 是 Qt 框架中用于在应用程序启动时…...
线性代数笔记28--奇异值分解(SVD)
1. 奇异值分解 假设矩阵 A A A有 m m m行 n n n列 奇异值分解就是在 A A A的行向量上选取若干对标准正交基,对它作 A A A矩阵变化并投射到了 A A A的列空间上的正交基的若干倍数。 A v → u → σ u → ∈ R m v → ∈ R n A\overrightarrow{v}\overrightarrow{u…...
【记录一下学习】Embedding 与向量数据库
一、向量数据库 向量数据库(Vector Database),也叫矢量数据库,主要用来存储和处理向量数据。 在数学中,向量是有大小和方向的量,可以使用带箭头的线段表示,箭头指向即为向量的方向,…...
面试准备——云相册项目(1)基础
项目概述 云相册项目旨在为用户提供便捷的照片存储、管理和访问服务。通过客户端与服务器的配合,实现照片的上传、下载以及一些基本的命令交互功能,方便用户在不同设备上随时查看和管理自己的相册。 技术要点 编程语言与环境:使用 C 语言开…...
Redis数据结构深度解析:从String到Stream的奇幻之旅(一)
Redis系列文章 《半小时掌握Redis核心操作:从零开始的实战指南》-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(一)-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(二&…...
Linux - 网络基础(应用层,传输层)
一、应用层 1)发送接收流程 1. 发送文件 write 函数发送数据到 TCP 套接字时,内容不一定会立即通过网络发送出去。这是因为网络通信涉及多个层次的缓冲和处理,TCP 是一个面向连接的协议,它需要进行一定的排队、确认和重传等处理…...
【Linux-网络】从逻辑寻址到物理传输:解构IP协议与ARP协议的跨层协作
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长,行则将至 目录 📚前言 📖 IP地址的组成 🔖IPv4 🔖IPv6 📚…...
解锁前端表单数据的秘密旅程:从后端到用户选择!✨
😄 解锁前端表单数据的秘密旅程:从后端到用户选择!✨ 嘿,技术爱好者们!👋 你有没有在开发中遇到过这样的困惑:表单里的数据(比如图片附件、识别点 ID)从哪儿来的&#x…...
Kotlin字符串操作在Android开发中的应用示例
Kotlin字符串操作在Android开发中的应用示例 引言 在Android开发中,Kotlin已经成为主流的编程语言,它提供了许多便捷的字符串操作功能。本文将结合一个具体的Kotlin示例程序,详细介绍Kotlin中字符串的创建、格式化和使用方法。 示例代码 以…...
【机械视觉】C#+visionPro联合编程———【一、C# + VisionPro 联合编程详解以及如何将visionPro工具加载到winform】
机械视觉与 C# VisionPro 联合编程详解 目录 机械视觉与 C# VisionPro 联合编程详解 概念 应用场景 1. 工业检测与质量控制缺陷检测 2. 定位与机器人引导 3. 识别与分类 4. 复杂流程控制 将visionPro工具加载到winform 环境准备 一、创建winform项目 二、打开窗体…...
迷你世界脚本自定义UI接口:Customui
自定义UI接口:Customui 彼得兔 更新时间: 2024-11-07 15:12:42 具体函数名及描述如下:(除前两个,其余的目前只能在UI编辑器内部的脚本使用) 序号 函数名 函数描述 1 openUIView(...) 打开一个UI界面(注意…...
江科大51单片机笔记【9】DS1302时钟可调时钟(下)
在写代码前,记得把上一节的跳线帽给插回去,不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 (1)重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因为…...
发行思考:全球热销榜的频繁变动
几点杂感: 1、单机游戏销量与在线人数的衰退是剧烈的,有明显的周期性,而在线游戏则稳定很多。 如去年的某明星游戏,最高200多万在线,如今在线人数是48名,3万多。 而近期热门的是MH,在线人数8…...
微信小程序接入deepseek
先上效果 话不多说,直接上代码(本人用的hbuilder Xuniapp) <template><view class"container"><!-- 聊天内容区域 --><scroll-view class"chat-list" scroll-y :scroll-top"scrollTop":…...
为解决局域网IP、DNS切换的Windows BAT脚本
一、背景 为解决公司普通人员需要切换IP、DNS的情况,于是搞了个windows下的bat脚本,可以对有线网络、无线网络进行切换设置。 脚本内容 echo off title 多网络接口IP切换工具:menu cls echo echo 请选择要配置的网络接口: echo echo 1. 有线网络&am…...
VUE3开发-9、axios前后端跨域问题解决方案
VUE前端解决跨域问题 前端页面需要改写 如果无效,记得重启服务器 后端c#解决跨域问题 前端js取值,后端c#跨域_c# js跨域-CSDN博客...
【计算机网络】计算机网络的性能指标——时延、时延带宽积、往返时延、信道利用率
计算机网络的性能指标 导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中我们介绍了计算机网络的三个性能指标——速率、带宽和吞吐量。用大白话来说就是:网速、最高网速和实时网速。 相信大家看到这三个词应该就…...
Kubermetes 部署mysql pod
步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…...
Docker和DockerCompose基础教程及安装教程
Docker的应用场景 Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 CentOS Docker 安装 使用官方安装脚本自动安装 安装命令…...
网络安全等级保护—定级
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络安全等级保护五个保护等级 五个保护等级 受侵害的客体 对客体的侵害程度 一般损害 严重损害 特别严重损害 公民、法人和其他组织的合法权益 第一级 第二级 …...
服务器数据恢复—raid5阵列中硬盘出现坏道的数据恢复流程
服务器故障情况: 某公司一台服务器中有一组多块硬盘组成的磁盘阵列。磁盘阵列中有2块硬盘出现故障离线,服务器崩溃,上层数据丢失。 硬件检测: 硬件工程师对客户服务器内的所有硬盘进行物理故障检测,最终确认这2块硬盘…...
