文件上传原理

目录

 一、什么是文件上传漏洞

二、漏洞产生的原因 

三、常见校验上传文件的方法

四、绕过方法

五、文件防御



 

 

 

(图片来源于网络)

 一、什么是文件上传漏洞

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。 

二、漏洞产生的原因 

  • 没有对上传的文件做校验,导致具有危害性的脚本被保存到了服务器上;
  • 没有控制服务器对上传目录的解析和执行行为,导致误执行了危害性的脚本;

三、常见校验上传文件的方法

客户端校验

  1. 通过javascript来校验上传文件的后缀是否合法,可以采用白名单,也可以采用黑名单的方式
  2. 判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。(服务端没有得到数据--burpsuite无法抓包)

通常情况下,如果白名单能满足需求,就尽量使用白名单,因为白名单更加的安全,而黑名单容易被意想不到的方法进行绕过。

服务器端校验

  1. 校验请求头 content-type字
  • HTTP协议规定了上传资源的时候会在请求头Header中添加一项MIMETYPE,即Content-Type,用来标识上传资源内容的类型,这个动作一般由浏览器来完成,常见的MIMETYPE类型如下:

  • text/plain,纯文本
  • text/html,HTML文档
  • text/javascript,JS代码
  • application/x-www-urlencoded,POST方法提交的表单
  • application/msword,MicrosoftWord文件
  • application/变成语言,该种编程语言的代码
  • application/pdf,PDF文档
  • application/octet-stream,二进制数据
  • application/xhtml+xml,XHTML文档
  • image/gif+jpeg+png,各种类型的图片
  • vedio/mpeg,动画
  • multipart/form-data,POST提交时伴随文件上传的表单
  • 后端在处理上传请求的时候,可以获取header种的Content-Type类型,来判断上传的文件是否符合要求。当然这种方式也很容易被绕过,使用BP工具,拦截浏览器请求,修改Content-Type类型就行了,虽然这种方法不保险,但是加上一层防护也还是必

 2.后缀扩展名

  •   黑名单策略,

        文件扩展名在黑名单中的为不合法

  • 白名单策略

        文件扩展名不在白名单中的均为不合法

3.通过自己写正则匹配来判断文件幻数(文件头)内容是否符合要求,一般来说属于白名单的检测,常见的文件头(文件头标志位) 

  • JPG,JPE,JPEG对应FF D8 FF E0 00 ”JPGGraphicFile”
  • GIF对应47 49 46 38 39 61 ”GIF89A”
  • PNG对应89 50 4E 47
  • ZIP对应50 4B 03 04 ”ZipCompressed”
  • RAR对应52 61 72 21
  • DOC/XLS/PPT对应D0 CF 11 E0 A1 B1 1A E1
  • doc;.xls;.xlt;.ppt;.apr,”MSCompoundDocumentv1orLotusApproachAPRfile”(D0CF11E0A1B11AE1)

后端可以检查文件头的前几位字节,就可以判断是否为合法的文件类型,但是这种方式也不是完全保险的,并不能替代检查文件后缀的方式,因为黑客完全可以构造一个脚本文件,其文件头伪装成正常的上传文件类型。

4.文件加载检测:一般是调用API或函数去进行文件加载测试,例如图像渲染测试,当测试结果正常的时候才允许上传 

  • 一次渲染(代码注入)
  • 二次渲染 

5. 后缀名黑名单校验

6. 后缀名白名单校验

7. 自定义

  • WAF校验,即使用不同的WAF产品来进行过滤,通常是独立与服务程序的一段中间程序或者硬件

 四、绕过方法

1.前端绕过

  • 通过浏览器F12很简单的修改文件后缀名就可以完成绕过检查。
  • 木马修改后缀名后上传,通过改包工具修改上传。
  • 如果是JS脚本检测,在本地浏览器客户端禁用JS即可。可使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现绕过。

准备一句话木马:

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

并且修改后缀名为jpg,上传操作,通过burpsuit抓包改包,使其后缀名修改回php。

2. 校验请求头content-type字段绕过

使用各种各样的工具(如burpsuite)强行篡改Header就可以,将Content-Type: application/php改为其他web程序允许的类型

3. 文件头检查文件

给上传脚本加上相应的幻数头字节就可以,php引擎会将 <?之前的内容当作html文本,不解释而跳过之,后面的代码仍然能够得到执行比如下面:
(一般不限制图片文件格式的时候使用GIF的头比较方便,因为全都是文本可打印字符。)

4.二次渲染绕过

往是在图片后头附件一段php代码,或者是改包发送一个图片马。但是如果使用了二次渲染。我们上传的文件名称会被修改,并且文件末尾段一些冗余的信息(一句话木马)会被删除。

所以很明显,我们只需要将我们需要写入的东西塞在图片中间(虽然会使图片损坏,但是我们又不需要图片。。),用winhex或者是010editor等在文件内进行修改即可。
————————————————
版权声明:本文为CSDN博主「Fasthand_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43390703/article/details/104858705

 

5.文件加载检测:

通过例如加载文件进行图像渲染的方式来测试,这个时候就一般需要在正常的文件中插入木马代码了,例如图像,那么插入的代码一般会放在图像的注释区,因此不会影响图像正常渲染绕过这种检测,此时可以使用工具(称为插马器)来进行插入,例如edjpgcom,或者直接用copy命令来合成也可以。当然这种检测不一定能够完全绕过

  • 后缀名检测

    后缀黑名单检测:找查blacklist(黑名单列表)的漏网之鱼,例如

    • 大小写:如果检测的时候不忽略大小写,那么可以改变后缀名的大小写绕过

    • 扩展名:列表中如果忽略了某些后缀

    1.      能被解析的文件扩展名列表:

    2.      jsp jspx jspf

    3.     asp asa cer aspx

    4.     php php php3 php4 pht

    5.     exe exee

  • 后缀白名单检测:白名单检测还是会比黑名单强一点,常见的绕过方法有%00截断,还有服务器的解析漏洞

  • %00截断漏洞:如果存在这类漏洞,那么后缀名的检测都可以绕过,此时我们可以如下命名一个上传文件

test.php%00.jpg

  • 解析漏洞:这类漏洞是本身服务器的中间件产生的,例如apache,nginx都被爆出过存在解析漏洞,存在解析漏洞的话,上传的安全性几乎就完全失去了,下面再详细分析。文件上传漏洞 )

五、文件防御

文件上传漏洞防御

  • 首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。
  • 其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。
  • 最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。

防范文件上传漏洞常见的几种方法:

1.文件上传的目录设置为不可执行
只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

2.判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

3.使用随机数改写文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

4.单独设置文件服务器的域名
由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

作者还是小白菜鸟阶段,文章总结有些不全,望见解,后续会逐渐完善 

更多知识点详情请见: 

文件上传漏洞 (上传知识点、题型总结大全-upload靶场全解)_Fasthand_的博客-CSDN博客_uaf漏洞

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syy️️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值