文件上传漏洞●

0x00 什么是文件上传漏洞

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。利用上传漏洞可以直接得到WEBSHELL,危害等级超级高。上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。文件上传检测一般有几种:javascript检测、扩展名检测、HTTP头检测、文件头检测等,除了绕过这些检测,还可以通过解析漏洞、截断绕过。

0x01 javascript检测与绕过

首先我们先进行黑盒检测,我们可以先制作PHP一句话木马,也就是把<?php @eval($_POST['xxh']);?>写进txt,后缀名改为.php。然后选择文件进行上传。

然后弹窗显示只能上传格式为gif、jpg、bmp、png的文件,随后我们查看源代码。

找到from标签,当onsubmit事件在表单中确认按钮被点击时候执行check()函数,也就是会执行红色框中的js代码。这段代码大致意思是,取表单中file的值,也就是判断刚刚上传的文件是否为空,不为空则取出扩展名,然后判断扩展名是否为gif、jpg、bmp、png,如果是(true)就提交表单,如果不是就alert弹出对话框,停止提交表单。由此可见,如果们我想办法让函数返回true,或者直接不运行这段javascript代码就可以绕过javascript对上传文件类型的判断。显然第二种方法就非常暴力了,既然你写在前端,我直接在你前端代码删了,跟我在做黑客闯关游戏中遇到的一样。下图把onsubmit事件删了,然后重新上传文件。

然后记下上传的地址,使用菜刀进行连接一句话木马,密码为:xxh

看到目录里有我们上传的小马,已经成功绕过js检测,拿下网站。

0x02 扩展名检测与绕过

同样先判断检测,该网站为asp语言,制作asp一句话小马,,文件名为1.asp,然后上传后显示不允许上传asp类型的文件

我们把文件名后缀改为.xxh,点击上传后发现可以成功上传

由此,程序在判断上传文件的类型时,可能是检测文件的扩展名来判断文件是否为可执行脚本名,如果是就不允许上传。我们只要找到程序没有进行判断的可执行文件的扩展名就可以成功上传webshell,已知IIS默认可执行扩展名为:asp、aspx、cer、cdx、ashx、htr等等。那么一个个试了之后,发现可以上传cer扩展名文件。

上传成功,找到上传地址,同样用菜刀连接。拿下网站。

0x03 HTTP头检测与绕过

该漏洞原因在于判断代码只判断http头信息里的文件类型,导致访客提交修改过的http头信息绕过判断上传,造成此漏洞。该网站采用php语言

同样制作一句话木马,<?php @eval($_POST['xxh']);?>,文件名为1.php,选择文件,点击上传。

显示请先上传jpg、gif、png格式图片,所以不能上传php脚本文件,那么我们重命名为.jpg后缀,再进行上传。

看到jpg文件上传成功,那么我们可以认为,程序在判断文件类型时,是通过检测扩展名来判断文件是否合法,或者是检测http信息头里的文件类型来判断是否合法。我们来抓包确认一下。使用burp神器。

点击上传时,burp进行拦截抓包,我们可以发现,在HTTP头里文件类型为image/jpeg,也就是图片格式,如果我们修改content-type的值为:application/octet-stream,然后放包。

显示请先上传jpg、gif、png格式文件,那么之前上传的jpg文件就上传不了了,所以我们可以确定,程序是通过Content-Type值来判断上传文件类型的。所以我们可以修改HTTP头来使得我们可以上传php脚本文件,把我们制作的一句话木马重命名为1.php,点击上传,burp拦截,把Content-Type值改为 image/jpeg,放包,我们就把一句话木马上传成功了。

然后同样菜刀连接,拿下网站。

大家可以在百度搜索一些文件扩展名的Content-Type值,方便学习。

0x04 文件头检测与绕过

该网站采用php语言,同样制作PHP一句话,<?php @eval($_POST['xxh']);?>,文件名为1.php,选择文件,点击上传。

显示只能上传以下类型文件: png,gif,jpg,rar,exe,bmp,那么文件重命名为1.jpg,再上传发现还是一样。那么我们继续用正常的图片文件上传

文件上传成功,我们可以正常打开图片

由此我们可以说明,该程序是通过是否是png,gif,jpg,rar,exe,bmp格式的文件头来判断上传的文件是否合法。

那么我们就可以使用传说中的图片马进行绕过,因为他是检测文件头,那么我们可以通过隐写术原理,图片解析到文件尾就停止解析,然后后面随便写什么内容都不会被解析。打开cmd,准备好一句话木马和正常图片,我们通过copy命令合成图片马。使用命令:copy /b anhun.jpg+1.php jpg.php,也就是把anhun.jpg和1.php合并为新的jpg.php文件。此时要注意,一句话木马开头要多几个空格,因为没有空格进行合并以后,图片的文件尾会覆盖掉木马的尖括号。当然如果做多了CTF,我们可以直接使用winhex等十六进制编辑器,编辑器打开图片,然后图片文件尾多加几个00,然后复制一句话木马,点击保存。

然后上传jpg.php,可以看到上传成功!

然后菜刀连接,拿下网站

0x05 NULL字节路径截断漏洞

用asp写入文件时,如果文件名字里插入了 NULL字节,那么NULL字节后面的字符就会被忽略。例如正常的文件路径abc/xxh.jpg ,当xxh.jpg 的名字改成abc/xxh.aspNULL.jpg 则写入的文件实际是abc/xxh.asp。如果asp程序NULL字节可以插入到文件名的参数里并且没有进行安全的过滤,就形成了NULL字节路径截断漏洞。

我们使用某论坛发帖处执行。注册用户以后发表帖子,随便上传一张图片,由下图可知

看到这两个参数和图像标签[IMG]upload/forum/2014522124458.jpg[/IMG]是有对一个关系的。一个是路径,一个是文件名。这里这两个参数我们可控,如果服务器程序没做验证的话,我们这里可以上传任意类型的问题。制作asp一句话,文件名改为1.jpg。接下来使用burp修改数据包来上传一句话,选择文件点击上传,然后burp成功拦截,可以右键发送一个reteaper,点击RAW,我们在文件名下添加.asp+空格+123,空格为了方便定下位置。

随后点击hex,查看十六进制,定位到文件名下,然后把20改为00,也就是NULL,因为空格的十六进制就是20。

修改完以后点击发送

已经上传完毕,然后使用菜刀连接,记住完整的上传路径,使用菜刀连接,拿下网站。

0x06 IIS解析漏洞

一、在网站下建立文件夹的名字为*.asp、*.asa的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。例如创建目录xxh.asp,那么/xxh.asp/1.jpg将被当作asp文件来执行。

二、网站上传图片的时候,将网页木马文件的名字改成“*.asp;.jpg”,也同样会被IIS当作asp文件来解析并执行。例如上传一个图片文件,名字叫“xxh.asp;.jpg”的木马文件,该文件可以被当作asp文件解析并执行

使用某论坛做演示,注册完论坛以后,看哪里可以进行文件上传的地方,一般是在头像设置那边。演示地址出现问题,页面布局混乱,所以习惯就好。

先上传asp一句话木马,文件名为1.asp

提示只能上传这些图片上格式,说明对asp格式文件做了限制,然后我们可以先看看iis的版本,随便输入一个不存在的地址。

这是IIS6.0特有的报错页面,因为该解析漏洞是出现在IIS6.0版本。所以我们可以使用解析漏洞,把1.asp重命名为1.asp;jpg再重新上传,发现上传成功

获取了头像地址,然后使用菜刀连接,拿下网站

0x07 NGINX解析漏洞

Nginx默认以cgi的方式支持php的运行,如以下配置

ocation ~ .php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi_params;}

关键变量SCRIPT_FILENAME由nginx生成的$fastcgi_script_name决定,而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。而为了较好的支持PATH_INFO的提取,在PHP的配置选项里存在cgi.fix_pathinfo选项,其目的是为了从SCRIPT_FILENAME里取出真正的脚本名。

打开演示网页,发现是DZ论坛,我们可以用nmap方式查看NGINX的版本为0.7.64

怎么去探测这个漏洞呢?找到一张图片,打开图片地址,在url中在图片文件名后面加上/.php

发现并没有当做404处理,而是把这个图片当做PHP进行解析,输出乱码。所以存在nginx的解析漏洞

那么我们注册一个账号,找到能够上传文件的地方,一般在个人资料上传头像的地方就有,制作php一句话,文件名为1.jpg,上传木马。上传成功后连接菜刀,拿下网站。这里演示地址出现问题,所以就不发图了。

0x08 apache mime解析漏洞

每遇到一种后双重后缀名(如xxx.php.rar)的文件,Apache都会去conf/mime.types 文件中检查最后一个后缀, 如果最后一个后缀并没有在mime.types文件中定义, 则使用前一个后缀来解释 , 因为在默认情况下,rar并未在mime.types中定义, 故Apache会使用php后缀来解释文件。

目标服务器可以遍历目录,发现了fckeditor编辑器。从图片上的信息可以得出几个结论:能够向上传文件、Apache版本为2.0.53、支持PHP,版本为5.3.2,结合apache版本和php版本,可能目标存在apache解析漏洞。

找到可以上传的页面。然后进行一句话木马,1.php的文件上传

此时无法上传php后缀的文件,然而目标网站可能存在解析漏洞,我们可以把文件名改为1.php.rar,上传文件,发现上传成功,菜刀连接,拿下网站。

0x09 结束语

关于文件上传大概有这么几种检测和绕过检测的方法,当然还有更高级的绕过方法,比如说条件竞争上传等。那么如何防御文件上传漏洞呢?可以把文件上传的目录设置为不可执行,判断文件类型时候可以结合MIME Type、后缀检查等等方式。

本篇文章就写到这里,其实还可以写编辑器的漏洞,后面也还有一些文件上传的练习,只不过写的有点累了,就这样吧,有不对的地方欢迎指出。我是许心痕,心中有伤痕!

▼往期精彩回顾▼【web安全】简单XSS演练【web安全】sqli-lab靶场1-10关练习笔记【二进制安全】熊猫烧香病毒分析END

asp.net怎么写上传图片到mysql的页面_【web安全】文件上传漏洞相关推荐

  1. java web 上传图片漏洞_Web安全:文件上传漏洞

    原标题:Web安全:文件上传漏洞 一般将文件上传归类为直接文件上传与间接文件上传.直接文件上传就是服务器根本没有做任何安全过滤,导致攻击者可以直接上传小马文件及大马文件(如ASP.ASPX.PHP.J ...

  2. 上传图片被防火墙拦截_Web安全:文件上传漏洞

    文章来源:计算机与网络安全 一般将文件上传归类为直接文件上传与间接文件上传.直接文件上传就是服务器根本没有做任何安全过滤,导致攻击者可以直接上传小马文件及大马文件(如ASP.ASPX.PHP.JSP及 ...

  3. 文件上传漏洞之——漏洞进阶(读文件,写文件,包含图片马,包含日志文件,截断包含)

    php协议 PHP带有很多内置URL风格的封装协议,可用于类似fopen().copy(). file_ exists()和filesize()的文件系统函数 file:// 访问本地文件系统 htt ...

  4. kindeditor在服务器上上传图片显示叉叉,什么原因?,kindeditor=4.1.5 文件上传漏洞利用...

    kindeditor<=4.1.5 文件上传漏洞 - Kindeditor <=4.1.5 file upload vulnerability and use 漏洞存影响版本:小于等于4. ...

  5. 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传...

    第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...

  6. c语言http上传图片,基于RTOS的c语言实现http文件上传

    本实验为了减少代码量,使用了封装比较完善的http库,本文主要讲述http文件上传的主要要求. 一.分析http关键头部信息 为了分析http header,我们通过chrome得到上传文件时的htt ...

  7. mysql数据文件有10g_百万行mysql数据库优化和10G大文件上传方案

    最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个mysql而已. 问题1:针对MySQL Comm ...

  8. 文件上传java前端怎么写_做一个文件上传,前端是ajax提交数据后台是java,这个错误怎么办...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 严重: Servlet.service() for servlet [dispatcherServlet] in context with path [/ ...

  9. java 上传图片后没法立马显示出来_SpringMVC多个文件上传及上传后立即显示图片功能...

    多文件上传就是改良一个方法把MultipartFile类换成CommonsMultipartFile类,因为上传多个文件用数组方式的话MultipartFile类不能初始化,它不支持数组 packag ...

最新文章

  1. 亲测GO环境搭建,理解go build、go install、go get
  2. PHP添加mcrypt扩展模块(亲测)
  3. mysql数据库的后_MySQL数据库误删后的回复技巧
  4. IIS 使用OpenSSL 生成的自签名证书,然后使用SingalR 客户端访问Https 站点通信
  5. windows下sshfs挂载远程文件夹-server could not connect故障解决
  6. JavaScript DOM扩展——“选择符API和元素遍历”的注意要点
  7. c+ 引用传递坑_了解C ++中的引用传递
  8. 重心法例题matlab,重心法--例子.ppt
  9. 你不能访问此共享文件夹,因为你组织的安全策略的解决办法
  10. 最全的ios系统导出微信聊天记录生成词云教程
  11. MIMO-OFDM学习笔记(传播与衰落)
  12. 关于各种网站音频mp3的外链地址,真实的外链播放地址
  13. Centos7机器配置Google Authenticator动态密钥进行ssh二次验证图文详解
  14. matlab 绘制任意方向和位置的空间圆锥体
  15. EI 收录的出版物目录(EI检索目录表格官方下载)
  16. 计算机在机械智能制造中的应用,机电一体化技术应用于智能制造中的优势研究...
  17. python爬虫股票市盈率_使用python爬虫实现网络股票信息爬取的demo
  18. @EnableConfigurationProperties 进行注册
  19. MATLAB叠加高斯白噪声
  20. hibernate QBC和QBE精讲与案列分析(上)

热门文章

  1. java学习路线,一个初中生学java要多久,java难学吗
  2. UOJ #390 【UNR #3】百鸽笼 容斥+DP
  3. Swift学习之每日一tip (5)@autoclosure
  4. 适合程序员专心工作听的音乐集
  5. matlab获取当前打开软件的句柄,oop – 如何获取MATLAB句柄对象的ID?
  6. 震惊!让博主彻夜未眠的原因竟是这个(归并排序(c语言))
  7. 韦恩图-VennDiagram
  8. 依楼听风雨,淡看江湖路
  9. STM32F407VET6之OV2640———— OV2640
  10. stm32毕设分享 人体定位智能调速风扇系统