1、什么是文件上传漏洞

文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,部分文件上传漏洞的利用技术门槛非常的低,对于攻击者来说很容易实施。即便很容易被攻击者利用漏洞,但是在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率。企业支持门户,给用户各企业员工有效地共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。向用户提供的功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站的权限,或危及服务器的可能性是非常高的。

2、文件上传检测流程

一般情况下,一个文件以HTTP协议进行上传时,通常都是以POST请求发送至Web服务器的。Web服务器在接收到请求后,用户与Web服务器建立连接,并传输数据。Web服务器在接收文件上传时,一般会有如下检测流程:

①客户端javascript校验(一般只校验文件的扩展名)。
②服务端文件头content-type字段校验。
③服务端文件内容校验。
④服务端目录路径检测。
⑤服务端文件扩展名检测。
⑥服务端后缀名黑白名单校验。
⑦服务端自定义正则校验。

3、文件上传漏洞产生的原因和危害

由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。打个比方来说,如果你使用 windows 服务器并且以 asp 作为服务器端的动态网站环境,那么在你的网站的上传功能处,就一定不能让用户上传 asp 类型的文件,否则他上传一个 webshell,你服务器上的文件就可以被他任意更改了。因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。

对于初学者而言,找漏洞最好是基于白盒审计进行,所谓白盒审计可以简单地理解为就是看着代码找漏洞,那么在正式挖洞前,我们先看看开源的DVWA给出的四种级别的文件上传的源代码。

4、DVWA—文件上传(low)

查看源码文件

basename(path,suffix) :
函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。

可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息

漏洞利用:
文件上传漏洞的利用是有限制条件的,首先当然是要能够成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知。不幸的是,这里三个条件全都满足。

我们先上传一个一句话木马:<?php @eval($_POST[123]);?>

可以看到上传成功并且返回了路径
再用蚁剑工具进行连接,得到服务器控制权

5、DVWA—文件上传(Medium)

先看下代码和low级的有什么区别

增加了对上传文件大小和类型的限制。文件大小限制问题不大,但是类型现在只允许上传jpeg和png的图片了。同样继续找办法绕过去。

方法一

因为只允许上传jpeg和png文件所以php文件类型一定被过滤了,通过burp抓包分析,在客户端上传页面这一侧,没有做限制,限制主要是服务器这边做的。而且服务器限制类型也不是通过后缀名,只是通过" Content-Type"这个属性来判断。

因此我们用burp将截取的报文修改一下

将Content-Type: application/octet-stream改为Content-Type:image/jpeg

执行

上传成功并且返回了文件路径
然后使用蚁剑工具尝试连接

连接成功,在蚁剑工具里可以任意上传下载甚至删除

方法二

上传文件名是"123.jpeg"的文件,随后在burp里面修改文件名,而不用修改" Content-Type "的内容,也可以实现文件上传。




成功!

方法三

%00截断

在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,可以在文件名中使用%00截断。

可选方法举例如下:

更改文件后缀为123.php.jpg,设置代理并上传。抓包并将php.jpg中的字符“.”(十六进制0x2e)更改为00。
更改文件后缀为123.php.jpg,设置代理并上传。抓包并在php.jpg中的字符“.”(十六进制0x2e)前右键选择insert byte,增加一个0x00字节。
更改文件后缀为123.php%00.jpg,设置代理并上传。抓包并选中%00,右键url-decode。

先删掉low级别上传的木马以免影响操作结果

文件改名并写入一句话木马

上传文件burp抓包

执行

上传成功

连接成功

6、DVWA—文件上传(High)

方法一

初学者先看代码

重点看下红色框部分,改进了两个很重要的地方:
①提取了后缀名进行判断,这样就不大好改名了。

②"getimagesize"虽然是用来获取图片文件大小的函数,但如果上传文件的文件头不是图像类型的话,会返回false。

第二条其实有办法绕过,我们可以在文件头部加上了jpg格式的GIF89

然后将文件名后缀改为.jpg

文件可以上传成功,但是改名就比较麻烦了,无法在上传文件这个漏洞搞定,只能借助其他漏洞。
利用DVWA中的Command Injection(命令注入),将123.jpg改名成123.php
在这里我犯了个低级错误Windows下的文件改名用的是move,Linux才是mv,感谢大佬涛

|move ../../hackable/uploads/123.jpg../../hackable/uploads/123.php



改名成功!
接下来蚁剑获取webshll

方法二

创建一个图片马,直接上传,一句话木马藏在图片末尾
虽然我们的一句话木马上传成功了,但是他是以jpg为后缀的,蚁剑不能直接连接,必须让他作为php解析。

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

蚁剑的原理是向上传文件发送包含参数的post请求,通过控制参数来执行不同的命令,而这里服务器将木马文件解析成了图片文件,因此向其发送post请求时,服务器只会返回这个“图片”文件,并不会执行相应命令。

那么,怎么才能让我们的图片以 php 格式运行呢? 文件包含!我们可以利用DVWA的文件包含漏洞,让我们的图片格式的一句话木马以php格式运行。
我们访问该URL:

http://127.0.0.1/vulnerabilities/fi/?page=file:///D:/phpstudy_pro/WWW/DVWA-master/hackable/uploads/666.jpg

把该图片当成php文件执行
然后我们就可以用中国菜刀进行连接了
因为这个网站是要登录的,所以我们在蚁剑中右键,然后浏览网站,然后登录就可以在蚁剑中保持我们的session。然后就可以获取Webshell了。

不知道什末原因我的浏览器一直显示解析错误,我尝试解析.txt/.php文件都可以成功解析,
问题应该出在了file协议上查一下file协议也没搞懂

浏览器通过file://访问文件和http://访问文件的区别:

file协议用于访问本地计算机中的文件,好比通过资源管理器中打开文件一样,需要主要的是它是针对本地的,即file协议是访问你本机的文件资源。

http访问本地的html文件,相当于将本机作为了一台http服务器,然后通过localhost访问的是你自己电脑上的本地服务器,再通过http服务器去访问你本机的文件资源。

再简单点就是file只是简单请求了本地文件,将其作为一个服务器未解析的静态文件打开。而http是在本地搭建了一个服务器再通过服务器去动态解析拿到文件。

其他区别:

file协议只能在本地访问
本地搭建http服务器开放端口后他人也可以通过http访问到你电脑中的文件,但是file协议做不到
file协议对应有一个类似http的远程访问,就是ftp协议,即文件传输协议。
file协议无法实现跨域

http://127.0.0.1/hackable/uploads/666.jpg

7、DVWA—文件上传(Impossible)

先看下代码的主要部分

①使用了"imagecreatefromjpeg"和"imagecreatefrompng"对上传的文件重新生成为图片,去掉了不属于图片的部分。

②给文件重命名成随机字符串,可以去掉一些asp或者php等脚本属性,就是完全无法执行了。 基本上上面这两点限制做完,只能上传图片了。

文件上传漏洞实验-通过截取http请求绕过前端javascript验证进行文件上传相关推荐

  1. 文件上传漏洞、WebShell、防御及绕过利用、Web容器解析漏洞、编辑器上传漏洞

    文章目录 文件上传漏洞 漏洞概述 漏洞成因 漏洞危害 WebShell 大马 小马 GetShell 漏洞利用的条件 PUT方法上传文件 漏洞的防御.绕过和利用 黑白名单策略 安装upload-lab ...

  2. 如何实现上传多个图片并依次展示_js前端实现多图图片上传预览的两个方法(推荐)...

    一.将图片转成icon码的实现方式 html代码: js代码 //图片预览功能 function previewImage(file,imgNum) { var MAXWIDTH = 200; var ...

  3. SpringMVC→简介、MVC、SpringMVC工作原理、Maven搭建第一个SpringMVC、请求参数接收、重定向、文件上传、AJAX异步访问、请求参数接收绑定JSON、@注解及传参

    MVC SpringMVC工作原理 Maven搭建第一个SpringMVC 目录结构 web.xml *-servlet.xml Controller请求处理类 跳转页面 Maven运行服务器项目 浏 ...

  4. 文件上传漏洞-原理篇

    目录 第1章 文件上传漏洞基础 1.1 漏洞概述 1.2 漏洞成因 1.3 漏洞危害 1.4 漏洞利用姿势 第2章 文件上传漏洞检测与绕过 2.1 前端检测和绕过 2.2 服务器端检测和绕过 第3章 ...

  5. 太厉害了,终于有人能把文件上传漏洞讲的明明白白了

    大家好! 我是小黄,很高兴又跟大家见面啦 ! 拒绝水文,从我做起 !!!! 未经允许,禁止转载 ,违者必究!!!! 本实验仅适用于学习和测试 ,严禁违法操作 ! ! ! 今天更新的是: P7 漏洞类型 ...

  6. Webshell文件上传漏洞

    简述: 文件上传漏洞是由于网站对上传的文件没有进行严格筛查,导致用户可以上传一些可执行文件的恶意代码,或webshell,如asp,hph等,然后再通过url访问执行恶意代码,或是通过webshell ...

  7. 文件上传漏洞的小总结

    目录 一.原理 二. 高危触发点 三.前端处理 四. 后端处理 五. 上传分类 1. js验证 绕过方法 2. 文件扩展名检测 (1). htaccsee上传漏洞 (2). Apache1.x,2.x ...

  8. 2022渗透测试-文件上传漏洞的详细讲解

    目录 1.什么是文件上传漏洞 2.生成图片木马 3.靶场 1.第一关 2.前端检测(第二关) 3.服务器端检测--MIME类型(第二关) 4.服务器端检测--文件类型(第十四关) 5.服务器文件内容验 ...

  9. 文件上传漏洞 (上传知识点、题型总结大全-upload靶场全解)

    文件上传漏洞 什么是文件上传漏洞 什么是webshell 一句话木马大全 产生文件上传漏洞的原因 文件上传漏洞的攻击与防御方式 1.前端限制 2.检查扩展名 1.黑名单策略, 2.白名单策略 3.检查 ...

最新文章

  1. vue 封装dialog_element-dialog封装成子组件
  2. 启动mysqld报 mysql the server quit without updating pid file
  3. Linux命令之sftp - 安全文件传输命令行工具
  4. [渝粤教育] 西南科技大学 数据库应用 在线考试复习资料(3)
  5. 工作194:vue.runtime.esm.js?2b0e:619 [Vue warn]: Duplicate keys detected: ‘/system‘. This may cause an
  6. 微信红包技术架构首次流出,贼牛逼啊!
  7. 小米Wifi切换无线网卡模式
  8. opencv的sift算法
  9. MySQL分库分表及中间件Mycat
  10. 【UE】初识Slate编辑器-理解一个最基础的编辑器界面
  11. 软件实施工程师职业规划
  12. 按键精灵的5级开发认证,笔试题参考
  13. 京东常用的API接口
  14. SD卡CF卡U盘硬盘等磁盘属性显示为0字节怎么恢复数据
  15. 计算机一级考试瓜果产量,全国计算机等级考试一级B考试(最新样题).doc
  16. 蜘蛛程序php,php模仿百度spider蜘蛛爬虫程序例子
  17. 最完美的公式——欧拉公式
  18. http网页返回状态码含义
  19. 二总线-MBus讲解
  20. NVMe技术基础知识

热门文章

  1. 《动手学机器人学》7.4机器人运动学介绍|机械臂运动学|两轮差速底盘运动学|轮式里程计
  2. 九龙证券|什么是庄家洗盘和出货?各有什么特征?
  3. 2023暑期实习历程总结
  4. 什么是CHINANET
  5. Unity新版粒子特效
  6. 火狐marquee_滚动字幕【兼容性:谷歌/火狐/IE6+】
  7. 从玄学到网红,互联网企业取名有何学问?
  8. 句子类型 - there be结构
  9. 计算机网络技术及应用部分
  10. 双十一好物怎么入手,五款双十一最值得入手的好物分享