首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >渗透测试文件上传漏洞原理与验证(2)——文件上传检测与绕过

渗透测试文件上传漏洞原理与验证(2)——文件上传检测与绕过

原创
作者头像
周周的奇妙编程
发布2024-11-19 22:40:01
发布2024-11-19 22:40:01
1.5K0
举报
文章被收录于专栏:渗透测试专栏渗透测试专栏

客户端检测与绕过

客户端(Client):或称为用户端(前端),与服务器相对应。由于客户端对于文件上传漏洞的防御是通过JS代码实现的,所以客户端检测与绕过也称为JS检测与绕过。

调用JS的selectFlle()函数,先将文件名转换为小写,然后通过substr获取文件名最后一个点号后面的后缀(包括点号)进行判断。

绕过方法

由于后端PHP代码没有对文件做任何检测,所以只要绕过前端JS的校验就可以上传WebShell。

  • 删除浏览器事件
  • 利用BurpSuite抓包修改文件后缀名
  • 构造上传表单

删除浏览器事件

删除浏览器事件
删除浏览器事件

利用BurpSuite抓包修改文件后缀名

利用BurpSuite抓包修改文件后缀名
利用BurpSuite抓包修改文件后缀名

构造上传表单

服务端检测绕过

对于文件上传,只从Web 前端进行检测显然防护不足,那么服务器端检测就特别重要了。一般服务端检测包括以下几个方面:

  • 后缀名检测与绕过
  • MIME类型检测与绕过
  • 文件内容检测与绕过
  • 00截断检测与绕过
  • 条件竞争检测与绕过

后缀名检测与绕过

通过函数pathinfo()获取文件后缀,将后缀转为小写后判断是不是php

绕过方法 1 : 黑名单--大小写绕过

绕过方法 1 : 黑名单--名单列表绕过(黑名单之外的后缀名)

有些中间件允许解析其他文件后缀名,如asa、cer之类的或在httpd.conf配置文件中,配置如下代码,则能解析php、php3、phtml文件。所以上传一个后缀名为php3、phtml的文件即可。

绕过方法 1 : 黑名单--Windows特性

一些特殊的文件名命名方式在Windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:

绕过方法 2 : 白名单

白名单绕过需要配合文件包含漏洞或者解析漏洞

绕过方法3: .htaccess文件攻击

.htaccess文件是Apache 服务器中的分布式配置文件(IS中不存在该文件),该配置文件会覆盖Apache 服务器的全局配置,作用于当前目录及其子目录。

如果一个Web 应用允许上传.htaccess 文件,那就意味着攻击者可以更改Apache 的配置,这是十分危险。

在httpd.conf配置文件中,AlowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为AI,那么所有在.htaccess文件里有的指令都将被重写,即允许.htaccess文件覆盖掉Apache 的配置。

将内容符合php语法规则的文件当作PHP文件解析

匹配文件名中的关键字

比如:当文件名info.php.png中包含关键字.php,并且.htaccess 文件内容如下,info.php.png 中的代码会被执行。

匹配文件名

绕过方法4

结合Apache文件解析机制,从右向左开始解析文件后缀,若后缀名不可识别则继续判断直到遇到可解析的后缀为止。

MIME类型检测与绕过

MIME(Multipurpose lnternet Mail Extensions)是描述消息内容类型的因特网标准。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME 类型如下:

判断$ FILES"file"是不是图片格式(image/gif、image/jpeg、image/pjpeg),不是则不允许上传。在HTTP协议中,使用Content-Type 字段表示文件的MIME 类型。$ FILES"file"的值是从请求数据包中Content-Type中获取。

通过抓取数据请求包,上传php文件时,Content-Type值是application/octer-stream,上传jpg格式的文件时Content-Type值是image/jpeg。可修改文件类型进行绕过。

文件内容检测与绕过

利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。

文件幻数检测

文件相关信息检测,检测图像文件相关信息

文件内容检测与绕过

在脚本文件开头补充图片对应的头部值,或在图片后写入脚本代码。

制作图片马

  • 在图片后写入脚本代码
  • copy 1.jpg/b+1.php/a 2.jpg

参数/b指定以二进制格式复制、合并文件,用于图像类/声音类文件

参数/a指定以ASCII格式复制、合并文件,用于txt等文档类文件

00截断检测与绕过

截断漏洞出现的核心就是chr(0),这个字符不为空(NuI),也不是空字符(""),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。由于00代表结束符,PHP会把00后面的所有字符删除。

截断条件:PHP版本小于5.3.4、magic_quotes_gpc为OFF状态

检测原理(GET方式)

检测原理(POST方式)

条件竞争检测与绕过

一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。这里使用sleep()函数来模拟判断是否含有脚本所需要的时间。

利用成功上传到删除文件的时间差,上传一个.php文件,在未删除之前立即访则会自动生成一个新php文件,新文件不会被删除。


本文部分图片摘自深信服安全服务认证工程师课程课件中,为方便个人学习使用,勿作商用!!!!文字内容为自己手打,并非直接搬运!如有侵权,请联系删除!!!

本文档所提供的信息仅用于教育目的及在获得明确授权的情况下进行渗透测试。任何未经授权使用本文档中技术信息的行为都是严格禁止的,并可能违反《中华人民共和国网络安全法》及相关法律法规。使用者应当合法合规地运用所学知识,不得用于非法入侵、破坏信息系统等恶意活动。我们强烈建议所有读者遵守当地法律与道德规范,在合法范围内探索信息技术。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 客户端检测与绕过
    • 绕过方法
      • 删除浏览器事件
      • 利用BurpSuite抓包修改文件后缀名
      • 构造上传表单
  • 服务端检测绕过
    • 后缀名检测与绕过
      • 绕过方法 1 : 黑名单--大小写绕过
      • 绕过方法 1 : 黑名单--名单列表绕过(黑名单之外的后缀名)
      • 绕过方法 1 : 黑名单--Windows特性
      • 绕过方法 2 : 白名单
      • 绕过方法3: .htaccess文件攻击
      • 绕过方法4
    • MIME类型检测与绕过
    • 文件内容检测与绕过
    • 文件内容检测与绕过
    • 00截断检测与绕过
    • 条件竞争检测与绕过
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档