【漏洞靶场】文件上传后端检测点绕过--upload-labs

2023-11-14

一、漏洞描述

在uploads-labs第八关中,服务器采用了黑名单的方式过滤上传文件的后缀,黑名单中包含了所有违法的后缀。包括可以让所有文件都当php脚本执行的.htaccess配置文件。但是在验证函数中缺少deldot()函数从字符串的尾部开始,从后向前删除点,直到该字符串的末尾字符不是点为止。可以利用在文件后缀后再加点的方式绕过检测。

二、漏洞发现

在upload-labs第八关中就是采用了黑名单验证文件后缀的方式做文件上传的限制,先在本地写php脚本若上传成功,且知道上传后文件在网站保存的路径,可通过网页访问获得服务器配置信息,命名为z.php

直接来看源码,file_exists判断文件路径是否存在,array数组函数中就是服务器的黑名单,几乎包含过滤了所有非法后缀。

trim() 函数:移除字符串两侧的空白字符或其他预定义字符。这里将上传的文件名去掉两边的字符串

strtolower()函数:将字母转换为小写。若是.PHP处理后是.php

strrchr()函数:查找一个字符c在一个字符串s中最后一次出现的位置(也就是从s的右侧开始查找字符c首次出现的位置),并返回从字符串中的字符c所在的位置开始直到字符串s结束的所有字符。 若没有找到字符c,则返回NULL。这里若上传z.php函数处理后返回.php

str_ireplace()函数:使用一个字符串替换字符串中另一些字符串,对大小写不敏感。将::$DATA转换为空

在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名,例如:"z.php::$DATA"Windows会自动去掉末尾的::$DATA变成"z.php"

经过上面的过滤,原本的文件名现在只留下文件后缀。判断文件后缀是否在上面定义的数组中,若在就不允许上传。若不在就将文件名改文件原有的名字+合法文件后缀

$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认

因为黑名单几乎包含了所有非法后缀,直接改写文件后缀是不行的。但是因为服务器没有将文件后缀最后的点过滤。可以将文件后缀改写为z.php.改写后服务器strrchr函数会取文件名最后出现的点到结尾的字符串。那就只有点一个字符,从而绕过黑名单实现绕过。又因为windows的特性当建立文件时候会自动去除文件名最后的点字符,从而上传脚本变为z.php。在liunx中不行。

三、漏洞利用

上传脚本,并用burp抓包,将文件名后面加点。上传成功,因为靶场上传后会返回给用户上传的图片,从而在响应包中得知上传路径。

成功利用脚本,获取服务器配置信息。也可上传一句话木马,通过蚁剑,菜刀等后门工具链接获取webshell。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【漏洞靶场】文件上传后端检测点绕过--upload-labs 的相关文章

  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • 用于验证 ip 列表中的 ip 范围的正则表达式

    我有正则表达式用于验证 50 个 ips 逗号分隔的列表 25 0 5 2 0 4 0 9 01 0 9 0 9 3 25 0 5 2 0 4 0 9 01 0 9 0 9 1 50 列表示例 10 10 10 1 127 0 0 1 现在
  • 通过 Java 连接 Apache Drill

    在 Apache Drill 的 Wiki 中 我只能看到通过 SqlLine 客户端运行的查询 除了 REST API 之外 是否有任何编程方式可以在 Drill 中运行查询 有任何示例或指示吗 或者它与使用 JDBC 驱动程序运行 SQ
  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 是否存在可处理 PRC/.mobi 文件的 PHP 库?

    我正在写一个WordPress 插件 http github com chrisclarke eBook Export Plugin for WordPress以大多数主要电子书格式从选定类别创建电子书 我想支持 MobiPocket 因为
  • PHP比较两个字符串的随机位置

    PHP比较两个字符串 示例我得到了一串数字 1 2 2 1 and another is 2 1 2 1 结果是 true 因为它只是 1 2 2 1 和 2 2 1 1 的位置洗牌 但如果该值为 1 2 2 2 and another i
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 自动检测内部/外部开发环境

    我们使用以下函数来自动检测我们是在内部机器上还是在实时服务器上 然后为各种组件选择适当的配置 function devIsLocal res false http host SERVER HTTP HOST if http host loc
  • Laravel nova diffForHumans 日期时间

    我对用户有字段last active 我想用 diffForHumans 或显示时间time from now来自 Moment js 我怎样才能做到呢 现在我只使用 DateTime make Activiy last active gt
  • 获取特定月份/年份的第一天

    有没有比以下更好的方法返回特定月份 年份的第一天的日期 month date m year date Y from date Y m d mktime 0 0 0 month 1 year 这在计算上并不完全优雅 但我喜欢它 因为它非常可读
  • 在 php、ajax 或 javascript 中加载进度?

    任何人都知道如何在系统仍在服务器端获取数据的同时在客户端显示加载进度以及完成的百分比 例如 当我在客户端按下 确定 按钮时 它会调用服务器端从数据库收集数据 整个过程可能需要2到3分钟 如何在客户端显示加载进度 大约加载完成了多少 我怎样才
  • 在 .htaccess 中更改什么以使其停止显示子域

    我有这个 RewriteEngine on RewriteCond HTTP HOST m myurlname com RewriteCond HTTP USER AGENT safa NC RewriteRule http m myurl
  • Laravel 计划命令一旦启动就停止?

    我已经为 laravel 5 1 项目设置了预定命令 它有效 命令已经启动 但愚蠢的是我没有考虑如何停止它 通常您不想停止它 但该命令正在向数据库表中插入近 50 万行 而我只是想确保我可以在不登录服务器的情况下启动它 显然我需要在某个时候
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • 通过 jQuery 从输入类型=“文件”多个中删除文件

    我在使用 PHP 和 jQuery 上传文件时遇到问题 表单可以一次上传多个图像 这些图像可以在滑块中预览 表单还包含两个字段标题和描述 滑块通过 jQuery 工作 当用户通过单击选择文件来选择多个图像时
  • 纠正装饰器模式的一个大缺点

    不久前 我在重构一些游戏战斗代码时决定尝试装饰器模式 战斗者可以拥有各种被动能力 也可能是不同类型的生物 我认为装饰器可以让我在运行时以各种组合添加行为 因此我不需要数百个子类 我几乎已经完成了 15 个左右的被动能力装饰器 在测试中我发现
  • 如何从 Laravel 中的表中选择所有列名称?

    我试图从表中获取所有列名Teller 功能 public function getTableColumns tables return DB select DB raw SELECT COLUMN NAME DATA TYPE COLUMN
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input

随机推荐

  • 金山云AI新突破:集智高清让带宽降下去让画质升上来

    眼观六路 耳听八方 大脑 情绪和注意力均处在亢奋状态 运用各种招术攻击对手的同时也能巧妙防御 游戏直播为万千玩家提供了观摩高手过招的绝好机会 很多职业选手也由此拥有了大批粉丝 进一步增添了游戏的魅力 游戏如今已从亚文化向主流文化蔓延 而对于
  • 【构建ML驱动的应用程序】第 2 章 :制定计划

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 25 道常见的 TypeScript 面试题及答案

    前端Q 我是winty 专注分享前端知识和各类前端资源 乐于分享各种有趣的事 关注我 一起做个有趣的人 公众号 点击上方 前端Q 关注公众号 回复加群 加入前端Q技术交流群 编辑整理 杨小爱 TypeScript 是一种静态类型的 面向对象
  • Python爬虫获取Csdn文章

    request获取html 安装 pip install requests 使用 import requests HTTP请求 GET POST PUT DELETE HEAD OPTIONS get res requests get ht
  • YOLOv5(PyTorch)目标检测:原理与源码解析

    PyTorch版YOLOv5目标检测 原理与源码解析 课程链接 https edu csdn net course detail 31428 Linux创始人Linus Torvalds有一句名言 Talk is cheap Show me
  • ReentrantLock实现PV操作-模拟多线程竞争数据库连接池资源场景

    使用ReentrantLock Condition模拟PV操作 实现多线程竞争数据库连接池资源 资源耗尽后阻塞等待 归还资源后唤醒阻塞线程的场景 代码中为10个线程竞争5个数据库连接资源 ConnectionPool class 连接池 C
  • 极光推送 别名

    今天做极光推送 做完了 总结一下 方便下次查看 极光推送 别名推送 可以点对点通讯 使用别名 用于给某特定用户推送消息 例如 注册帐号完成后 可以用别名推送的方式 把账户名当作别名推送给极光服务器 然后 服务器请求一下极光服务器发一条极光推
  • 线性回归与逻辑回归的联系与区别

    1 联系 线性回归 sigmoid函数 逻辑回归 2 区别 1 功能不同 线性回归是做回归的 逻辑回归是做分类的 2 参数求解方法不同 线性回归是用最小二乘法求解参数 逻辑回归是用梯度上升法求解参数 后续补充
  • 因为干过外包,我脏了简历!大厂HR透露:干过外包就刷掉

    最近一位网友问了一个问题 做过外包 甲方就不要了吗 引起了一大波疯狂劝退 并且不少人还总结了不选外包的3个理由 1 外包会成为简历污点 去过外包 很难再进大厂了 2 外包岗稳定性极差 项目说没就没 被裁几率很大 3 外包福利待遇差 外包和正
  • 文件的上传(图片、PDF、视频)

    提示 本文仅记录本人工作中遇到的难点与个人见解 仅供参考 如有问题请见谅 目录 前言 一 创建UploadUtil工具类 二 需要在yml中定义上传到系统的路径 三 创建UploadControlle 前言 文件上传 也称为upload 是
  • [云原生专题-62]:Kubesphere云治理-DevOps-持续集成与pipeline自动上云工具Jenkins

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123021850 目录 第1章 Jen
  • 【每日一问】computed、methods、watch有什么区别?

    来自官方文档的解释 找他们三个来做比较 说明他们还是有相同点的 1 computed VS methods computed有缓存 methods没有缓存 computed方法 不管调用多少次 只要值不修改 它就会走第一次的缓存 后面3次被
  • 贝叶斯网络(belief network)及相关知识整理

    贝叶斯网络 belief network 及相关知识 频率派 认为theta是个固定的未知常数 认为样本是随机的 重点研究样本分布 贝叶斯派 认为theta是不确定的未知数 认为样本是固定的 重点研究参数theta的分布 贝叶斯的思考方式不
  • 程序员失业后应做的五件事

    当金融危机席卷全球市场的时候 解雇通知书就象雪片一样飞出 虽然IT职业保障令人担忧 但是某些人还是能在失业后找到新的就业机会 Robert Fleming在两个月前失去了他在渥太华某软件公司的IT管理员工作 他花了3个星期的时间来调整自己的
  • python爬虫程序之百度翻译,pyexecjs模块的用法(python里的js解析库)

    目录 百度翻译爬虫程序 1 需求分析 2 URL分析 3 难点 请求参数分析 4 如何生成sign值 5 pyexecjs模块 6 程序设计 7 程序改进思路 pyexecjs模块是python爬虫库里关于javaScript的一套程序 它
  • **亲测有效**:VSCode “终端将被任务重用,按任意键关闭”/vscode 终端运行npm弹出选择程序对话框/尝试新的跨平台 PowerShell

    亲测有效 尝试新的跨平台 PowerShell VSCode 终端将被任务重用 按任意键关闭 vscode 终端运行npm弹出选择程序对话框解决方法 最近遇到一个新的问题 所以对于几个问题有了新的认识 修改补充 vscode终端运行npm总
  • 使用SheetJS读写Excel文件

    文章目录 目的 基础说明 读取 写入 总结 目的 项目中有一个Excel转JSON的工具 之前这个工具一直使用 Python 的 openpyxl 库来编写的 然后使用 pyinstaller 打包成 exe 文件 之前这个工具只是个命令行
  • Invalid bound statement (not found): xxxxx.UserDao.selectUserById 无法注入,无法映射详解

    在使用SSM框架时 遇到 idea报这种错误 Invalid bound statement not found xxxxx UserDao selectUserById 说明你的mybatis的配置文件并没有配好 正确模板如下
  • 最小二乘法与最佳平方逼近(简单版+例子)

    文章内容 本文主要介绍最小二乘法和最佳平方逼近的算法思想 并没有进行严格的数学证明和数学推导 如果仅仅是想要了解该算法的大致思路 那么本文非常适合你 最小二乘法和最佳平方逼近可以说是一回事 最小二乘法主要用于离散型变量 而最佳平方逼近用于的
  • 【漏洞靶场】文件上传后端检测点绕过--upload-labs

    一 漏洞描述 在uploads labs第八关中 服务器采用了黑名单的方式过滤上传文件的后缀 黑名单中包含了所有违法的后缀 包括可以让所有文件都当php脚本执行的 htaccess配置文件 但是在验证函数中缺少deldot 函数 从字符串的