CTFHub技能树web之文件上传(一)

 一.前置知识

  1. 文件上传漏洞:文件上传功能是许多Web应用程序的常见功能之一,但在实施不当的情况下,可能会导致安全漏洞。文件上传漏洞的出现可能会使攻击者能够上传恶意文件,执行远程代码,绕过访问控制等。

  2. 文件类型验证:Web应用程序通常会对上传的文件类型进行验证,以确保只允许特定类型的文件上传。这种验证可以通过检查文件扩展名或内容类型(MIME类型)来实现。然而,这种验证机制往往是不可靠的,因为攻击者可以伪造文件扩展名或篡改内容类型。

  3. 文件名和路径操作:在处理上传文件时,应用程序可能会使用原始文件名进行操作,如保存在特定目录或显示给用户。不正确的文件名和路径操作可能导致目录遍历(Directory Traversal)漏洞,使攻击者能够访问应用程序的敏感文件或目录。

  4. 双重扩展名:攻击者可能会尝试通过使用双重扩展名来绕过文件类型验证。例如,将一个文件命名为"image.jpg.php",以欺骗应用程序认为它是一个图像文件,但实际上是一个可执行的PHP脚本。

  5. 文件内容验证:除了文件类型验证之外,应用程序还可以对文件内容进行验证,以确保上传的文件符合预期格式和结构。这可以通过解析文件内容或应用特定的文件签名(Magic Bytes)来实现。

  6. 文件上传目录权限:确保上传目录的适当权限设置非常重要。上传目录应该限制为只允许Web服务器进程写入,以防止攻击者上传恶意文件并执行它们。

  7. 服务器端代码执行:文件上传漏洞有时可以导致服务器端代码执行漏洞,这意味着攻击者可以上传包含恶意代码的文件,并在服务器上执行该代码。这可能会导致完全控制服务器的风险。

二.

常用函数
文件上传函数:

PHP:move_uploaded_file() 函数用于将上传的文件移动到指定位置。
Python(Flask框架):request.files['file'].save() 方法用于保存上传的文件。
文件类型验证:

PHP:$_FILES['file']['type'] 变量可以用于获取上传文件的MIME类型。
Python(Flask框架):file.content_type 属性用于获取上传文件的MIME类型。
文件名操作:

PHP:basename() 函数用于获取文件名部分,pathinfo() 函数可用于获取文件扩展名。
Python:os.path.basename() 函数用于获取文件名,os.path.splitext() 函数可用于获取文件扩展名。

以上转载原文链接如下:
原文链接:https://blog.csdn.net/cutesharkl/article/details/131702857

第一题:无验证

使用普通的php一句话木马<?php @eval($_POST['a']);?>,其中<?php ?>是php语言的开头和结尾格式,@的作用是如果执行错误不会报错,eval()表示把括号内的字符串作为php代码执行,$_POST['1']表示从页面中以post方式获取变量a的值

上传该木马文件,使用蚁剑连接

flag在该网站文件中,返回上一级就可以找到flag

第二题:前端验证

JavaScript会对我们上传的文件进行限制,允许图片格式上传,可以通过上传图片马或者使用bp修改一下文件后缀即可,本题使用bp修改文件后缀的方法,先将文件后缀修改为.jpg格式,文件上传然后抓包

将.jpg改为.php,然后发包

从文件路径可以看到成功上传.php后缀的木马文件

使用蚁剑成功连接

flag在该网站的html文件夹中

第三题:.htaccess

htaccess文件,全称是Hypertext Access(超文本入口)。是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

添加一个.htaccess文件,内容为AddType application/x-httpd-php .jpg,那么该服务器在之后对上传的文件处理方法是将jpg按照php文件处理

使用蚁剑连接,上传的.htaccess文件文件名字只能是.htaccess,只能有后缀而不能有文件的名,比如1.htaccess等,在第一次上传中我使用了1.htaccess,在后续上传jpg格式文件后服务器没有自动将jpg解析为php文件,需要注意

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录第二十一天 701.二叉搜索树中的插入操作 108.将有序数组转换为二叉搜索树

701.二叉搜索树中的插入操作 题目描述 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&a…

Tulsimer MB-1518——超纯水抛光树脂的技术应用

超纯水的制备和稳定性一直是相关领域极为重视的&#xff0c;那么超纯水中常会用到的抛光树脂技术&#xff0c;进口和国产对比起来究竟谁更甚一筹呢&#xff1f;接下来为大家分享的技术就是超纯水制备中常会用到的进口品牌&#xff1a;美国Tulsimer杜笙树脂中抛光树脂MB-106UP的…

设计师简历写作指南:教你如何获得高薪offer!

在找工作时&#xff0c;我们如何努力争取更多的主动权&#xff1f;在询问了许多大工厂的人力资源部后&#xff0c;即时设计帮助你总结了答案&#xff1a;请仔细设计你的简历&#xff01;一个好的设计师的简历应该怎么做&#xff1f;虽然简历只有几张纸&#xff0c;但它是你个人…

MyBatis Plus:自定义typeHandler类型处理器

目录 引言&#xff1a;关于TypeHandler PostGreSQL&#xff1a;JSON数据类型 PostGreSQL数据库驱动&#xff1a;PGobject类 TypeHandler类型处理器 自定义类型处理器 类型处理器实现&#xff1a;PGJsonTypeHandler 注册类型处理器 引言&#xff1a;关于TypeHandler MyBa…

【快速搞定Webpack5】基本配置及开发模式介绍(二)

在开始使用webpack之前么&#xff0c;我们需要对Webpack的配置有一定的认识。 一、5大核心概念 1. enty&#xff08;入口&#xff09; 指示webpack从哪个文件开始打包 2. output&#xff08;输出&#xff09; 指示webpack打包完的文件输出到哪里去&#xff0c;如何命名等 …

Java 面向对象进阶 07 继承中成员变量,成员方法的访问特点(黑马)

一、继承中成员变量的访问特点&#xff1a; 打印结果为&#xff1a;zishow 这种情况打印出来的结果是Zi 这种情况打印的是Fu 这种情况就会报错 对于重名的情况&#xff0c;没有关键字&#xff0c;那么就是就近原则&#xff0c;打印出的是ziShow&#xff1b; this.name 指的是Zi…

java导出动态下拉框excel模板

1.原始模板 2.导出模板,下拉框为数据库中得到动态数据 public void downloadTemplate(HttpServletResponse response) throws IOException {// 所有部门List<String, String> departments expertManageMapper.selectAllDepartment();//所有职位List<String, String&g…

js设计模式:访问者模式

作用: 将操作方法封装在一个访问者对象中,而不是封装在每个被访问对象当中。 访问者对象可以通过调用被访问者的接口,用来操作被访问者。 示例: class App{accept(user){console.log(user,使用者)console.log(this,工具)user.use(this)}}class User{use(app){}}class Weixin…

Spring相关注解

文章目录 Spring注解Bean1、Bean 概述2、Bean 的声明1&#xff09;搭配 Configuration2&#xff09;搭配 Component3&#xff09;搭配 ApplicationContext 3、Bean 的注入1&#xff09;NO&#xff08;主要关注这个&#xff09;【1】同一配置类【2】不同配置类 2&#xff09;BY_…

使用 Docker 安装 Elasticsearch 8.4.3

使用 Docker 安装 Elasticsearch 8.4.3 一. 拉取 Elasticsearch Docker 镜像二. 使用Docker启动单节点集群三. 修改密码 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 从 Elastic…

友点CMS image_upload.php 文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

类之间的关系详解

在面向对象编程中&#xff0c;类之间的关系是构建和理解软件设计的基础。这些关系主要包括关联、聚合、合成、依赖、继承和实现。下面通过具体的例子和Java代码示例来说明这些关系。 1. 关联&#xff08;Association&#xff09; 关联关系表示两个类之间的结构化关系&#xff…

MySQL篇—事务和隔离级别介绍

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

Android 7.0以上charles无法抓取部分https包问题

首先保证配置一切正确 手机通过访问chls.pro/ssl下载.pem证书&#xff0c;如无法安装&#xff0c;在文件管理器中将后缀名改为.crt 在设置中安装该证书 Charles-Proxy - SSL Proxying Setting - Include 添加需要抓包的URL:443即可 以上基本配置结束后&#xff0c;看下代码 代…

彻底解决关于路由的问题,前端路由和服务端路由,history api 和 hash路由

首先路由分成两大块&#xff0c;分别是前端路由和服务端路由&#xff0c;而前端路由又分为两种模式&#xff0c;分别是 histroy api 模式和 hash 模式。 路由 前端路由&#xff1a;指在浏览器中进行路由控制的一种方式&#xff0c;通过监听 url 变化决定加载哪个页面组件或视图…

为什么运维要转行

为什么运维要转行 粉丝提问&#xff1a; 在各种APP里经常看到&#xff0c;趁年轻赶紧远离运维&#xff0c;为什么&#xff1f; 互联网老兵是这样回答的&#xff1a; 运维有很多分类&#xff0c;有干实施运维的&#xff0c;有干交付运维的&#xff0c;也有自动化运维&#xf…

命令行窗口文本复制到 Word 格式保持不变

命令行窗口文本复制到 Word 格式保持不变 References 标题栏右键 -> 编辑 -> 标记 / 全选 标题栏右键 -> 编辑 -> 复制 粘贴到 Notepad 中&#xff0c;语言栏设置对应语言&#xff0c;格式可以保持不变 复制文本粘贴到 Excel 中 选中 Excel 中文本复制&#xf…

数字化转型导师坚鹏:政府数据治理方法及成功案例

课程背景&#xff1a; 很多政府存在以下问题&#xff1a; 不知道如何理解数据治理标准化建设模式&#xff1f; 不清楚如何有效掌握政府数据治理落地技术&#xff1f; 不清楚如何有效学习标杆政府数据治理案例&#xff1f; 学员收获: 深入理解数据治理标准化建设模式。…

在Windows系统上静默安装软件

在Windows操作系统上静默安装软件通常涉及到通过命令行添加特定参数给安装程序&#xff0c;以使得安装过程中不显示用户界面或提示信息&#xff0c;从而实现自动化安装。以下是一些常见的静默安装参数示例&#xff1a; MSI包&#xff08;Windows Installer&#xff09;&#xf…

抛弃chatgpt,使用微软的Cursor提升coding效率

Whats Cursor? Cursor编辑器是一个基于GPT-4的代码编辑器&#xff0c;它可以根据用户的自然语言指令或者正在编辑的代码上下文为用户提供代码建议&#xff0c;支持多种编程语言&#xff0c;如Python、Java、C/C#、go等。Cursor编辑器还可以帮助用户重构、理解和优化代码&…