文件上传漏洞的绕过

一、文件上传漏洞介绍

1.文件上传漏洞

文件上传漏洞:在网站上传普通文件的位置,未对上传的文件进行严格的验证和过滤,导致可以通过绕过上传机制上传任意文件。进而导致用户可以通过上传WebShell(与网站后端语言一致)并执行从而控制服务器

2.文件上传漏洞的必备条件

  • 文件上传功能能正常使用:能够通过绕过上传机制上传想要上传的文件

  • 上传文件保存的路径可知:上传文件时,网页通常会带有一个返回显示上传的文件,可以通过查看网页元素的方式查看

  • 上传文件可以被访问:可以通过文件的路径访问到改文件

  • 上传文件可以被解析:访问该文件时,不会将源码作为网页元素直接输出

3.检测上传文件的方式

  • 客户端Javascript检测:检测文件的扩展名

  • 服务端MIME类型检测:在服务端中,使用$_FILES访问文件信息,检测POST报文content-type字段的内容(存储在$_FILES[按钮的name属性值][type]中)

  • 服务端文件扩展名检测:检测跟文件extension相关的内容

  • 服务端文件内容检测:检测内容是否合法、是否含有恶意代码等

二、绕过方法 

1.客户端Javascript检测

在浏览器中禁用网页的Javascript权限即可

2.服务端MIME类型检测

使用Burp抓包,更改POST报文中的content-type字段的内容

3.修改字段检测

若表单由多个数据(多部分实体),则需要使用boundary指定分隔符,用于封装消息的多个部分的边界,存储在报文主体中。需要更改的content-type字段也不是报文首部的content-type字段,而是存储在报文主体中对应上传文件的content-type字段

  3.黑名单检测(文件扩展名检测)

  • 黑名单:代码文件中包含一个数组或列表,其值为一些非法字符或字符串,当数据报包含有符合该列表的字符串时,就认定该数据包是非法的

  • 确认黑名单的方法:随意构造一个必定不在列表中的数据包,若能上传则说明是黑名单检测

  • 绕过姿势:通过抓包修改后缀名

  • 利用后缀大小写进行绕过:Windows中对大小写是不敏感的
    利用空格绕过:Windows在保存文件时,会自动去除末尾的空格
    利用 . 绕过:Windows在保存文件时,会自动去除末尾的 .
    利用::$DATA绕过:在Windows中,如果文件名 + ::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名
    利用双写后缀绕过:有些代码中,会将数据包中符合黑名单列表的字符串替换为空,而不会直接报错。这就导致了在上传成功后,访问不到之前上传的文件(因为文件后缀被替换为空)

    4.特殊绕过方式

    我们以test.php为例
    利用大小写绕过:test.php → test.PhP
    利用空格绕过::test.php → test.php + 空格
    利用.绕过::test.php → test.php.
    利用::$DATA绕过:test.php → test.php::$DATA
    利用双写后缀绕过:test.pphphp
    替换为其它后缀绕过:test.php → test.phtml
    这几种绕过方式可以一起使用:test.php → test.php. .

    5.文件内容检测

通过开头的文件幻数进行检测:判断文件开头的前10个字节,基本就能判断出一个文件的真实类型

方法:(制作图片马)


1.使用16进制编辑器打开一个图片(使用的图片文件越小越好),在图片后面插入WebShell,且文件的扩展名应该与WebShell的类型对应
2.在WebShell前插入符合伪装文件类型的文件幻数
3.在cmd下执行:copy 01.png/b + test.php/a shell.jpg,制作图片马
csdn.net/qq_52643498/article/details/120238839

你可能感兴趣的:(web安全,安全,网络安全)