文件上传漏洞及绕过

一、什么是文件上传?

将客户端数据以文件形式封装,通过网络协议发送到服务器端,在服务器端解析数据,最终在服务端硬盘上作为真实的文件保存。

二、为什么会产生文件上传漏洞? 

因为程序没有对用户提交的数据进行校验或过滤不严,导致用户可以提交修改过的数据。

一般一个文件上传过程中的检测有:客户端javascript检测(检测文件扩展名)、服务端MIME类型检测(检测content-type内容)、服务端目录路径检测(检测path参数相关的内容)、服务端文件内容检测(检测内容是否合法或含有恶意代码)等。

三、漏洞危害

恶意文件传递给解析器去执行,然后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理、命令执行等恶意操作。

四、绕过客户端的检测

  • 原理:通常在上传页面里含有专门检测文件上传的javascript代码,最常见的就是检测文件类型扩展名是否合法。
  • 方法:在本地浏览器客户端禁用js;可使用火狐浏览器的Noscript插件、IE中禁用JS等方式实现。

五、绕过服务端检测

服务端的代码常检测request包中的三个点:MIME类型、文件后缀、文件内容。

  • 绕过MIME类型检测

         原理:检测图片类型文件上传过程中http包的Content-type字段的值,来判断上传文件是否合法。

         绕过方法:用burpsuite截取并修改数据包中文件的content-type类型。

六、绕过黑名单检测

黑名单策略:文件扩展名在黑名单中为不合法,一般有个专门的blacklist文件,里面会包含常见的危险脚本文件。

绕过方法:

  • 后缀大小写绕过:在对后缀的判断中,如果只是对字符串进行单独的比较来判断是不是限制文件,可以采用后缀名大小写绕过形式。
  • 空格绕过:如果黑名单没有对后缀名进行去空处理,可以通过在后缀名后加空格进行绕过。
  • 双写绕过:如果黑名单是将问题后缀名替换为空,可以利用双写绕过。

七、绕过白名单检测

绕过方法:服务端判断文件类型是从后往前,而对文件解析是从前往后,可以利用00截断的方式进行绕过,包括%00截断与0x00截断。

Q:什么是%00截断和0x00截断呢?

A:0x00截断:系统在对文件名进行读取时,如果遇到0x00,就会认为读取已经结束。但要注意是文件的十六进制内容里的00,而     不是文件名中的00。

     %00截断:url发送到服务器后被服务器解码,这时还没有传到验证函数,也就是说验证函数里接收到的不是%00字符,而是%00解码后的内容,即解码成了0x00。

八、绕过文件内容检测

文件头检验原理:判断文件头内容是否符合要求。

常见的文件头对应关系:

  1. .jpeg、.jpg:JPGGraphic File
  2. .gif:GIF89A
  3. .zip:Zip Compressed

绕过文件头检查:突破getimagesize()函数。图像文件相关信息常用检测函数,用以获取文件类型,绕过只需要把文件头部分伪造好。

你可能感兴趣的:(WEB漏洞)