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

news2024/9/25 7:22:06

在这里插入图片描述

🌝博客主页:泥菩萨

💖专栏: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.coloradmin.cn/o/1945832.html

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

相关文章

Windows 11 系统对磁盘进行分区保姆级教程

Windows 11磁盘分区 磁盘分区是将硬盘驱动器划分为多个逻辑部分的过程&#xff0c;每个逻辑部分都可以独立使用和管理。在Windows 11操作系统中进行磁盘分区主要有以下几个作用和意义&#xff1a; 组织和管理数据&#xff1a;分区可以帮助用户更好地组织他们的数据&#xff0c…

怎么使用动态IP地址上网

如何设置动态IP地址上网&#xff1f; 设置动态IP地址上网的步骤如下&#xff1a; 一、了解动态IP地址 动态IP地址是由网络服务提供商&#xff08;ISP&#xff09;动态分配给用户的IP地址&#xff0c;它会根据用户的需求和网络情况实时改变。相比于静态IP地址&#xff0c;动态…

闲鱼、抖音、快手纷纷入局,“谷子”经济千亿市场纷争再起

二次元的狂热&#xff0c;终于还是蔓延到了三次元。 此前&#xff0c;在咸鱼上的一场拍卖中&#xff0c;一块直径75mm&#xff0c;重达20克的“吧唧”&#xff08;徽章&#xff09;&#xff0c;以7.2万人民币的价格被成功拍下。而与此同时&#xff0c;上海黄金交易所中的金价是…

Three.js 官方文档学习笔记

Address&#xff1a;Three.js中文网 (webgl3d.cn) Author&#xff1a;方越 50041588 Date&#xff1a;2024-07-19 第一个3D案例—创建3D场景 创建3D场景对象Scene&#xff1a; const scene new THREE.Scene(); 创建一个长方体几何对象Geometry&#xff1a; const geomet…

【C++】:AVL树的深度解析及其实现

目录 前言一&#xff0c;AVL树的概念二&#xff0c;AVL树节点的定义三&#xff0c;AVL树的插入3.1 第一步3.2 第二步 四&#xff0c;AVL树的旋转4.1 右单旋4.2 左单旋4.3 右左双旋4.4 左右双旋4.5 插入代码的完整实现4.6 旋转总结 五&#xff0c;AVL树的验证六&#xff0c;实现…

详细讲解vue3 watch回调的触发时机

目录 Vue 3 watch 基本用法 副作用刷新时机 flush 选项 flush: pre flush: post flush: sync Vue 3 watch 基本用法 计算属性允许我们声明性地计算衍生值。然而在有些情况下&#xff0c;我们需要在状态变化时执行一些“副作用”&#xff1a;例如更改 DOM&#xff0c;或是…

数字图像处理笔记(一)---- 图像数字化与显示

系列文章目录 数字图像处理学习笔记&#xff08;一&#xff09;---- 图像数字化与显示 数字图像处理笔记&#xff08;二&#xff09;---- 像素加图像统计特征 数字图像处理笔记&#xff08;三) ---- 傅里叶变换的基本原理 文章目录 系列文章目录前言一、数字图像处理二、图像数…

文件I/O基础

一、传统I/O数据传输过程 用户进程调用 read() 函数,发送上下文切换,用户进程由用户态切换成内核态,CPU向磁盘发起数据读取IO请求,然后返回;磁盘控制器收到请求,就开始准备数据,把数据放入磁盘控制器的内存缓冲区中,然后产生一个中断;CPU收到中断信号,停下手头工作,…

linux系统查历史cpu使用数据(使用sar 查询cpu和网络占用最近1个月历史数据)。

一 sar 指令介绍 在 Linux 系统中&#xff0c;sar 是 System Activity Reporter 的缩写&#xff0c;是一个用于收集、报告和保存系统活动信息的工具。它是 sysstat 软件包的一部分&#xff0c;提供了丰富的系统性能数据&#xff0c;包括 CPU、内存、网络、磁盘等使用情况&am…

802.11 Omnipeek 抓包

802.11 Omnipeek 抓包 前言Omnipeek安装软件配置 前言 设备准备环节和前面一样&#xff0c;本文不再赘述&#xff0c;参考前面的文章&#xff1a;https://blog.csdn.net/m0_55334946/article/details/140671901 采用 Omnipeek 抓包分析&#xff0c;我可以说比起 wireshark 已…

计算一段英文句子的最后一个单词的长度,单词间以空格隔开。

# 计算一段英文句子的最后一个单词的长度&#xff0c;单词间以空格隔开。 # 例如&#xff1a;输入”how are you“&#xff0c;输出&#xff1a;3EnglishStr:str str(input("请输入你的英文句子:")) EnglishList:list EnglishStr.split( ) strLength len(EnglishL…

走难而正确的路并持之以恒

走难而正确的路并持之以恒 接近八月&#xff0c;台风频繁。气象台说台风“格美”今夜将至&#xff0c;往粤北走&#xff0c;而留在粤东的将是持续的高温。高温的广州&#xff0c;这几晚的天空惊喜不断&#xff0c;成片的火烧云&#xff0c;站在猎德大桥观望&#xff0c;丹红的凤…

ModelArts中sinh算子的开发

一、环境配置 1、创建notebook并连接 使用ModelArts新建一个notebook,我这里镜像选择第一个,里面含有cann和Ascend910处理器,我这里环境只能使用ssh连接,创建一个密钥对,保存到C盘中的user/Administrator/目录下。 在网页中选择使用vscode接入,等待vscode打开后,选择密…

LangChain的数据增强

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

给Windows系统中注入服务,即windwos守护进程

最近总是在windwos环境下测试nginx&#xff0c;总是需要频繁重启nginx服务。于是考虑有没有可能把nginx加入到系统服务的操作。在网上找了一大堆资料&#xff0c;现在来总结一下&#xff01; 方法1&#xff1a;利用nssm工具实现 这是一个守护进程的软件&#xff0c;可以在win…

初阶数据结构——二叉树大汇总

这篇博客将会讲到二叉树的部分内容及堆的相关知识~ 这里将会涉及到大量的递归&#xff08;头大&#xff09; 目录 1.树 1.1树的概念 1.2树的相关概念 1.3树的表示 1.4树的实际应用 2.二叉树 2.1二叉树的概念 2.2特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.2…

【昇腾AI创新大赛集训营南京站学习笔记】-Ascend算子开发课程

昇腾AI创新大赛训练营 14:00-14:30 基础知识-理论课 一、CANN 、达芬奇架构和算子 1.AI Core逻辑架构 达芬奇架构包含三部分&#xff1a; 1&#xff09;计算类&#xff1a;矩阵计算单元&#xff08;两个矩阵扔进去相乘&#xff09;、向量计算单元、标量计算单元 2&#xff09;控…

一天搞定React(4)——Redux

Hello&#xff01;大家好&#xff0c;今天带来的是React前端JS库的学习&#xff0c;课程来自黑马的往期课程&#xff0c;具体连接地址我也没有找到&#xff0c;大家可以广搜巡查一下&#xff0c;但是总体来说&#xff0c;这套课程教学质量非常高&#xff0c;每个知识点都有一个…

鸿蒙OpenHarmony Native API【drawing_path.h】 头文件

drawing_path.h Overview Related Modules: [Drawing] Description: 文件中定义了与自定义路径相关的功能函数 Since: 8 Version: 1.0 Summary Functions FunctionDescription[OH_Drawing_PathCreate] (void)[OH_Drawing_Path] * 函数用于创建一个路径对象OH_Drawin…

前端页面:用户交互持续时间跟踪(duration)user-interaction-tracker

引言 在用户至上的时代&#xff0c;精准把握用户行为已成为产品优化的关键。本文将详细介绍 user-interaction-tracker 库&#xff0c;它提供了一种高效的解决方案&#xff0c;用于跟踪用户交互的持续时间&#xff0c;并提升项目埋点的效率。通过本文&#xff0c;你将了解到如…