我的编程空间,编程开发者的网络收藏夹
学习永远不晚

文件上传漏洞

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

文件上传漏洞

目录

前言

1.原理

2.类型

3.复现

3.1环境

3.1.1函数介绍

3.2过程

3.2.1客户端绕过

3.2.2服务端绕过

        黑名单检查后缀

        白名单检查后缀


文件上传漏洞是wb安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒。恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。本文仅关联相关安全问题无其他导向

程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是否只在前端通过js代码进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如aspphpaspxphp3php5等文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。

客户端绕过、服务端绕过

3.1环境

upload-labs靶场+phpStudy小皮

GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场一个想帮你总结所有类型的上传漏洞的靶场. Contribute to c0ny1/upload-labs development by creating an account on GitHub.https://github.com/c0ny1/upload-labs小皮面板(phpstudy) - 让天下没有难配的服务器环境!phpStudy官网2019正式推出phpStudy V8.0版本PHP集成环境,支持Windows与Linux系统,支持WEB面板操作管理,一键网站开发环境搭建配置,另经典版本phpStudy2016/2018/JspStudy环境套件同步更新中,欢迎网站开发者或运维下载使用!https://www.xp.cn/

3.1.1函数介绍

trim()作用:从一个字符串的两端删除空白字符deldot()作用:从字符串的尾部开始,从后向前删除点.,直到该字符串的末尾字符不是.为止strrchr()作用:查找字符串在另一个字符串中最后一次出现strtolower()作用:转换大小写str_ireplace()作用:字符串替换操作,不区分大小写

https://www.jb51.net/article/239371.htmhttps://www.jb51.net/article/239371.htm

3.2过程

3.2.1客户端绕过

原理

由于程序猿只在前端通过js代码进行后缀检验,正是他的粗心导致了可利用的漏洞

方法

(1)停用JavaScript(适用于upload-labs靶场的第一关)ctrl shift+i-->设置-->偏好设置-->停用Javascript

总结

文件上传漏洞中如果是出现前端js限制这种情况,那么绕过方法非常简单就是停用浏览器的JavaScript,这种前端黑名单的限制方法是不应该出现的,更加严谨的是需要前端后端都需要进行限制,upload-labs的第二关就是对后端也进行了限制

3.2.2服务端绕过

原理

通过后端限制的缺陷来进行绕过,一般都是在网页上写一段javascript脚本,校验上传文件的后缀名是否合法,有白名单和黑名单两种形式,区别就是,黑名单明确了不能上传的文件格式,白名单则明确了可以上传的文件格式

黑名单检查后缀

方法 

(2)使用抓包工具burp修改包数据(适用于upload-labs靶场的第一、二关)创建一句话-->修改后缀满足“.jpg|.png|.gif”(绕过前端限制)-->设置浏览器代理(burp代理)-->通过burp抓包然后修改上传文件后缀然后放行

(3)通过大小写的方法绕过(适用于upload-labs靶场的第五关)PHP、Aspx等

(4)空格绕过(upload-labs靶场第六关)后缀使用空格技巧通过,绕过原因为后端并没有过滤空格,这里前提也是在Windows下利用它的特性会去除文件名空格

(5)使用点绕过(upload-labs第七关)+burp抓包绕过由于没有过滤点,我们可以通过后缀加点的方法绕过,这里是依据Windows系统自动去除上传文件的点

 

(6)Windows数据流特性,完整的数据后面是含有::$DATA的而这个::$DATA就称为数据流,只不过在文件的后缀中不会显示出来,所以利用这个特性我们就可以通过upload-labs靶场的第八关

(7)路径拼接绕过(upload-labs靶场第九关)第九关虽然限制的看似没有问题但是恰恰问题就出现在它的限制顺序中,我们考虑如果我们按照它的限制顺序让它把过滤的都过滤掉只剩下我们需要上传的就可以了

(8)双写绕过(upload-labs靶场第十关)通过burp抓包+双写后缀来绕过

(9)php后缀特性绕过(upload-labs靶场第三关)php2、php3、php5、phtml等,一般php配置文件中不会设置这样的特性,所以不会生效

(10)利用.htaccess配置+图片马绕过(upload-labs靶场第四关)利用它的伪静态特性,首先在.htaccess配置文件中写入命令让传入目标文件下的文件都用php执行,然后我们通过cmd合成一个图片马传入目标文件目录下,然后通过.htaccess文件的特性来使用php执行该图片马

编写.htaccess配置文件通过vscode进行修改内容如下,并将它传入目标路径下

SetHandler application/x-httpd-php

在cmd中通过以下命令生成图片马,test.php中的内容为我们写入的一句话木马

copy aa.png/b + test.php/a image.png

白名单检查后缀

方法

(1)MIME类型绕过服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法burp抓包修改content-Type实现绕过

常见的MIME类型 - Scivous - 博客园1,常见的MIME类型(通用型): 超文本标记语言文本 .html text/html xml文档 .xml text/xml XHTML文档 .xhtml application/xhtml+xmlhttps://www.cnblogs.com/scivous/p/14059858.html

(2)00截断漏洞&get型(出现于php5.2版本漏洞)(upload-labs第十一关)使用burp抓包添加%00然后修改php后缀名的方式绕过

00截断原理:\0截断了后面的执行语句让其默认已经执行完成了,所以导致恶意文件上传成功 

 

(3)00截断漏洞&post型(upload-labs第十二关)get传参首先在url要解码所以你就需要提前将\0进行编码成%00,而post传参不需要所以要把这里的%00解码使用burp抓包添加%00先对%00进行url-decode然后修改php后缀名的方式绕过

 

引入特别的Windows特性实例:U-Mail邮件系统在Windows+php+iis(phpstudy2018)环境下Windows具有以下特性小于号(<)相当于星号(*)大于号(>)相当于问号(?)双引号(")相当于小数点(.)这里我们又知道在操作系统中*星号表示所有的意思,所以利用这个特性我们可以去绕过一些特别的限制eg:当我们将这样的bypass.<<<文件上传到目标路径下相当于匹配了php后缀也就是bypass.php那么就可以达到我们想要的效果
(4)文件包含漏洞绕过(upload-labs靶场第十三、十四、十五关)生成图片马方法和前面的第4关中一样,然后上传验证是否成功

文件包含漏洞形成原因是:用户可以控制你包含的文件

文件包含漏洞解决方法:如果你使用了文件包含函数,那么你就需要将文件包含的文件写死,不要让用户可以去控制(url中输入的文件使包含成功)

(5)特殊的文件包含漏洞绕过(upload-labs靶场第十六关)使用了imagecreatejpeg()函数,通过010editor工具对比上传前后函数变化的位置,将一句话木马写入到未改变的位置来实现绕过

   

通过010工具对比修改前后的位置差异来插入一句话实现绕过 

(6)时间型竞争漏洞(upload-labs第十七关)依据“先上传后删除的特性+burp抓包进行时间竞争绕过

来源地址:https://blog.csdn.net/newlife1441/article/details/126329763

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

文件上传漏洞

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

网站漏洞修复之Metinfo 文件上传漏洞

Metinfo CMS系统被爆出网站存在漏洞,可上传任意文件到网站根目录下,从而使攻击者可以轻易的获取网站的webshell权限,对网站进行篡改与攻击,目前该网站漏洞影响范围是Metinfo 6.2.0最新版本,以及以前的所有Metinfo
2023-06-03

java文件上传漏洞怎么解决

要解决Java文件上传漏洞,可以采取以下措施:文件类型白名单过滤:在服务器端对文件上传请求进行检查,确保只接受预期的文件类型。可以通过检查上传文件的扩展名或使用文件类型检测库来实现。文件大小限制:限制上传文件的大小,可以防止上传过大的文件导
2023-10-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录