文件上传漏洞的原理、绕过方法

文件上传漏洞原理:利用客户端通过浏览器向服务器发送文件这一普遍功能,实现恶意文件的上传,从而获取目标主机的权限。

一、文件上传漏洞的绕过

绕过的手段有很多,总结来说,主要分为前端校验与后端校验

前端校验:浏览器对上传的文件内容进行检查,一般网页中会存在JavaScript语句
绕过手段:关闭浏览器的JS检查或者直接查看源代码,将源代码中的检查函数“杀”掉
前端校验现在一般作用不大,很多浏览器自带防御措施,所以一般采取后端校验的方式,也就是  在服务器端对其进行检查;

这里先推荐大家学习一下预备知识: 

     PHP 文件上传 | 菜鸟教程

后端校验:发生在服务器端的校验,通常是php代码对文件的后缀名进行过滤,文件内容的检测等等,但也有相应的绕过手段;

MIME类型绕过:服务器端的php代码会对文件的MIME类型进行检测,绕过手段也很简单,使用burpsuite抓取数据包,对上传文件的MIME类型进行修改,在HTTP请求头中content-type字段下的内容就是该文件的MIME类型
常见的图片MIME类型:

 jpg   image/jpeg

 png image/png

 gif image/gif

后端校验中的文件后缀名绕过:

1、双写绕过(双写绕过抓住了PHP代码的过滤只存在一次这一特点,不会对其进行循环验证)

2、空格绕过

3、点绕过

4、陌生后缀名绕过

5、.htaccess绕过(与Apache的配置相关)

[CTF].htaccess的使用技巧总结_.htaccess ctf_Y4tacker的博客-CSDN博客

6、::$DATA绕过(有时代码会对其进行过滤,采取双写绕过)

7、路径可控时截断%00

8、大小写绕过

自己大致做了一遍upload靶场,里边有很多题是文件的后缀名绕过,总体感觉代码审计真的很重要,你需要在看懂页面的源代码的前提下,才可采取相应的针对性的绕过手段,所以建议学习web安全之前一定要好好学学PHP语言的语法,包括它的表单上传、cookie验证、getpost等上传方式

后面就是针对文件内容检测的绕过:

有时服务器不会检查后缀名,而是检测文件的内容。比如说一个上传头像的位置只允许上传jpg、png、gif格式的图片,此时PHP抓住图片文件的文件头都是一样的这一特性进行检测,如若我们直接上传webshell像PHP一句话木马等,其文件头必定不符合要求。

但此时我们可以利用一张正常的图片进行掩饰,将图片与一句话木马语句结合起来形成一张图片马,则可以对其进行绕过

图片马的制作:利用cmd命令copy 1.jpg/b + webshell.php/a tupianma.jpg

此时虽然生成的tupianma.jpg还是一张jpg图片,但查看它的十六进制可以发现最后存在一句话木马

文件上传漏洞的原理、绕过方法_第1张图片

此时危险就已经存在了,假如说我们已经上传了这一张图片至我们需要攻击的服务器,再结合文件包含漏洞,即可运行这个一句话木马(这里说明下,因为图片马无法被PHP解释器直接解析,所以需要利用文件包含的漏洞对其进行扫描,才可启动这个木马,以便之后我们的webshell管理工具对其进行连接) 

这里还有木马的变形,避免我们的木马被目标主机的杀毒软件查杀

最后就是二次渲染和条件竞争了,个人觉得条件竞争比较难理解

二次渲染:服务器会对客户端上传的文件进行二次渲染,通过代码实现

这时,问题就出现了,上面说的图片马中的一句话木马可能在二次渲染的过程中被删除了,导致渲染后的图片不存在木马语句,也就失去了效果,此时我们需要改变一句话木马插入在图片中的位置,防止渲染时的丢失。

条件竞争,个人现在也未完全理解,大致就是利用服务器代码处理的时间差来访问存储在服务器端的临时文件!

今天把文件上传漏洞的基础梳理了一遍,还有很多值得学习的地方!!

你可能感兴趣的:(网络,安全,服务器)