文件上传漏洞原理

文件上传漏洞介绍

文件上传是现代互联网常见功能,

允许用户上次上传图片、视频、及其他类型文件,向用户提供的功能越多,Web受攻击风险越大。

上传文件时,如果未对上传文件进行严格验证和过滤,就容易造成文件上传漏洞,上传脚本文件(包括asp,aspx,php,jsp等)

恶意上传行为可能导致网站乃至整个服务器被控制。恶意的脚本文件又被成为WebShell,WebShell具有强大的功能,如查看服务器目录、服务器中文件、执行系统命令等。

JS检测绕过(前端检测)

检测原理

调用Js的selectFile()函数, 检测文件后缀

绕过方法:

1.删除本地浏览器js方法(禁用js)

2.修改文件后缀

文件后缀绕过

检测原理

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

绕过方法

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

 

绕过方法2

结合Apache文件解析机制,从后往前解析文件后缀,若后缀不可识别则继续判断直到遇到可解析的后缀为止,例如123.php.360,Apache解析机制会将其解析为php文件并执行

 

ps:不允许上传php文件,就上传php.360(笑)

文件类型绕过(白名单绕过)

MIME绕过:

检测原理

利用$_FILES['files'] ['type']判断图片格式是否为image/gif,image/jpeg,image/pjpeg,不是则不允许上传

绕过方法

$_FILES['files'] ['type'] 该值从请求数据包中Content-Type中获取,因此burp抓包修改这个标签值即可绕过

上传文件为php时,Content-Type值为application/octer-stream,上传文件为jpg格式的文件时Content-Type值是image/jpeg。

文件幻数检测绕过:

检测原理

利用getimagesize()函数,如果不能获取图片信息(表示该文件并非图片)则不能上传该文件

绕过方法

在脚本文件开头补充图片对应头部值(比如加上GIF89a)

 89 50 4E 47 0D 0A 1A 0A (PNG头部),注意要选中十六进制转ascii

文件截断绕过 

检测原理:

由于00代表结束符, PHP会把00之后的字符都删除

截断条件:PHP版本小于5.3.4.magic_quotes_gpc(魔术引号)处于off状态

适用情况:

上传的文件被重命名了,无法找到自己上传的文件

绕过方法:

GET方法中加入%00截断

POST方法中传入%00并解码

ps:截断绕过可以控制文件的上传路径

文件内容绕过

检测原理:

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

<?php

fputs(fopen('./shell.php','w'),'<?php phpinfo();?>')

?>

绕过方法:

利用成功上传至删除文件的时间差,上传一个.php文件,在未删除之前访问该php文件使其运行生成一个新的php文件,新文件不会被删除。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值