0


文件上传学习笔记

文件上传学习笔记

一、漏洞成因

上传文件时,服务器端代码未对客户上传的文件进行严格的验证和过滤。

二、 文件上传漏洞利用

1、客户端检测绕过(js检测绕过)

1)、删除浏览器事件

直接删除这段
在这里插入图片描述
上传成功
在这里插入图片描述

2)、利用burp suite 抓包修改文件后缀名

先将要上传的文件后缀名修改成页面允许上传的类型,这样在点击上传后就可以通过前端的验证,用burp工具进行抓包,在burp中将文件后缀名改回原本想要上传的格式,再进行上传,这样就可以上传我们想要的类型文件而不会被前端的验证拦截。
在这里插入图片描述在这里插入图片描述
修改后缀名后释放
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、当服务器检测上传文件的MIME类型即媒体类型

MIME 类型
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型)是一种标准,用来表示文档、文件或字节流的性质和格式。它在IETF RFC 6838中进行了定义和标准化。
在这里插入图片描述
抓包修改content type的类型即可上传成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、文件头校验

文件头检查是指当浏览器上传到服务器的时候,白名单进行的文件头检测,符合,则允许上传,否则不允许上传。
每一种文件的文件头部都不一样,当服务器检测上传文件的文件头时,可以在文件内容中手动加入特定的头部信息。
在这里插入图片描述
在这里插入图片描述

4、服务端的检测绕过

后端设置了后缀名黑名单

1)、列表绕过

可以使用等价扩展名绕过
在这里插入图片描述
黑名单,不允许上传的类型
在这里插入图片描述
在这里插入图片描述

2)、htaccess文件

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

3)、大小写绕过

当没有对文件后缀名进行转小写的命令时,可以大小写绕过
在这里插入图片描述

在这里插入图片描述

4)、加空格绕过

抓包,在文件后缀名加空格“ ”
在这里插入图片描述
在这里插入图片描述

5)、加点绕过

抓包,在文件后缀名加“ . ”
在这里插入图片描述
在这里插入图片描述

6)、::$DATA绕过

抓包,在文件后缀名加“ ::$DATA”
在这里插入图片描述
在这里插入图片描述

7)、点加空格加点绕过

抓包,在文件后缀名加“ . .”
在这里插入图片描述
在这里插入图片描述

8)、双写绕过

在这里插入图片描述
在这里插入图片描述

5、后端设置了后缀名白名单

1)、当只能上传图片文件时,可以使用图片马

在这里插入图片描述
制作图片马
在这里插入图片描述
先进入所需文件所在的路径
输入:copy 原始图片/b+脚本文件/a 新的图片文件名
/b :二进制格式复制、合并文件,用于图像类、声音类文件
/a :以ASCII码格式复制、合并文件,用于txt等文档文件
在这里插入图片描述
在正常情况下,图片并不会被解析为可执行文件,所以我们需要通过文件包含或者文件解析漏洞来实现对图片木马的利用。靶机的/upload/目录下新建一个include.php
在这里插入图片描述
访问include.php,并用GET方式传递file=xxxx.jpg。这个xxxx.jpg便是正常上传的图片木马的地址。
在这里插入图片描述

2)、当上传文件被改名时(00截断)

传参方式为POST,使用%00进行截断
在这里插入图片描述
先把文件名后缀名改为可上传的后缀名,然后抓包,使用%00截断
在这里插入图片描述在这里插入图片描述
传参方式为GET,使用%00进行截断
注意:
1、php.ini的magic_quotes_gpc为OFF状态
2、php版本小于5.3.4
在这里插入图片描述

6、二次渲染图片马突破

文件马
在这里插入图片描述
上传图片马,并复制图片链接进行查看:
在这里插入图片描述
右击复制图片,将图片下载到本地,使用010 Editor16进制编辑器打开图片,发现末尾的php代码没有了:
在这里插入图片描述
GIF绕过二次渲染的方法,就是通过对比上传前和上传后的两个文件,如果说哪个位置,它的上传前和上传后的没有变,我们就把php一句话代码插入到这个位置。
在这里插入图片描述
重新上传,图片下载到本地,查看php代码是否存在,通过查看我们的PHP代码发现未被过滤:
在这里插入图片描述

在这里插入图片描述

7、文件内容检查

1)、避开
<?php

语句

如果检测是<?php ?>
可以试一试使用其他标签,如

<script language="php">eval($_POST[2333]);</script>
2)、避开
eval()

关键字

可以使用GET代替eval。

<?php @$_GET[a]($_POST[b]);?>
标签: 学习 安全

本文转载自: https://blog.csdn.net/m0_66618018/article/details/127147826
版权归原作者 大yiba 所有, 如有侵权,请联系我们删除。

“文件上传学习笔记”的评论:

还没有评论