文件上传漏洞原理及技巧

本文参考书目<web安全攻防:渗透测试实战指南>
有pdf,若想认真学习请支持正版买本纸质的
参考文档:Upload_Attack_Framework
文档链接:http://www.owasp.org.cn/OWASP_Training/Upload_Attack_Framework.pdf

ps:本篇是在某天无意中查看到翻出来的,记录着好久前还没记完笔记。推荐还是看上面的文档链接吧。当然以下笔记内容也希望能有所帮助。

介绍

上传文件是一种常见的功能,比如一些网站允许用户上传图片、视频、头像和许多其他类型的文件。但是如果用户上传恶意脚本在服务器处得到解析,那么就有可能造成信息泄露或者服务器被控制等危害。
以上加深部分就是文件上传漏洞的本质,其问题也在于如何上传以及如何去解析两点。

实战举例

在线实验地址
http://www.hetianlab.com/expc.do?ce=f1d444ca-5848-4506-b6a7-32fd5a22ebab
编写好脚本
在这里插入图片描述
上传此脚本到目标网站
在这里插入图片描述
浏览器输入脚本路径进行访问(服务器对其进行解析并返回结果)(这里前提你知道脚本在服务器的存放位置)
在这里插入图片描述
以上就完成了一个完整的文件上传漏洞及利用。

上传技巧

在这里插入图片描述
此图中的ABCDE检测过程应该是最普通的检测步骤,文件上传检测能够在其中任意一步发生。以下也按照此顺序进行绕过技巧分析。

一、客户端 javascript 检测 (通常为检测文件扩展名)

JS检测绕过上传漏洞常见于用户选择文件上传的场景,如果上传文件的后缀不被允许,则会弹框告知,此时上传文件的数据包并没有发送到服务端,只是在客户端浏览器使用JavaScript对数据包进行检测。

举例,下图上传文件后出现此提示框(且并未有此页面的流量经过网关),说明就是浏览器处进行了js检测。
在这里插入图片描述
这时有两种方法可以绕过客户端Jav aScript 的检测。

  • 使用浏览器的插件,删除检测文件后缀的JS 代码, 然后上传文件即可绕过。
  • 首先把需要上传文件的后缀改成允许上传的,如jpg 、png等, 绕过JS 的检测,
    再抓包,把后缀名改成可执行文件的后缀即可上传成功。
    在这里插入图片描述

二、服务端 MIME 类型检测 (检测 Content-Type 内容)

在客户端上传文件时,通过burpSuite抓取数据包,当上传一个php格式的文件时,可以看到数据包中Content-Type的值是application/octet-stream,而上传jpg格式的文件时,数据包中Content-Type 的值是image/jpeg 。
如果服务端代码是通过Content-Type的值来判断文件的类型,那么就存在被绕过的可能,因为Content-Type 的值是通过客户端传递的,是可以任意修改的。
所以当上传一个php 文件时, 在Burp Suite 中将Content-Type修改为image/jpeg ,就可以绕过服务端的检测。
在这里插入图片描述

三、服务端目录路径检测 (检测跟 path 参数相关的内容)

这个倒是没怎么遇到过的样子,感兴趣的点击上方参考文档链接去查看详细内容。

四、服务端文件扩展名检测 (检测跟文件 extension 相关的内容)

在这里插入图片描述
虽说前面js也能检测扩展名,不过也能被轻易绕过,因此一般都在服务器端进行检测。

黑名单:禁止符合任一规则的文件通过
绕过方法总的来说就是即能达到自己目的,又不触及任何黑名单规则的方法。比如以下禁止.php作为扩展名为一项规则。

  1. 比如改建后缀名大小写、
  2. 不常用但能用的后缀名(htm等)、
  3. 或者是文件名写入截断(比如过时的00截断,或者window下,强制写入.php:jpg会变成.php后缀),
  4. 或者可以的话,上传一个自定义的.htaccess,就可以轻松绕过各种检测。

白名单:只有符合所有规则的文件才能通过
白名单相对安全多了,不过也不是绝对的安全。比如以下用扩展名必须为.jpg作为一项规则。

  1. 文件名写入截断(比如过时的00截断,或者window下,强制写入.php:.jpg会变成.php后缀)
  2. 上传一个自定义的.htaccess,就可以轻松绕过各种检测。

五、服务端文件内容检测 (检测内容是否合法或含有恶意代码)

文件幻数检测:文件幻数所代表的意义应该就是内容的类型,表示内容是jpg文件、gif还是png等。文件幻数位于文件开头,使用修改二进制的工具,在内容前添加(或替换)对应的文件幻数即可。下图为例,gif和png文件幻数在开头的pdf连接内有。
在这里插入图片描述
文件相关信息检测:在文件内有文件的相关信息,比如文件大小等,类似于幻数提供信息,将其改写即可。

文件加载检测:在调用文件时,会对其内容部分进行检测,查看是否存在攻击代码等。常见的是图像渲染测试。其注入方法之一是在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般是图片的注释区。

在这里插入图片描述
文件加载中,如果是二次渲染,即仅保留内容及一些必要信息,将注释区等信息剔除,形成新的文件。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值