文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
文件上传导致的常见安全问题:
上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行;
上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);
上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;
上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈;
完成这个攻击需要的条件:
首先,上传的文件要能被Web容器解释执行,所以文件上传后所在目录要是Web容器所覆盖到的路径;
其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或无法通过Web容器解释这个脚本,那么不能称之为漏洞;
最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,可能导致攻击不成功;
Web For Pentester -- File Include
Example 1
上传php文件<?php echo phpinfo();?>输出关于 PHP 配置的信息
点击here即可查看配置信息
找到上传的文件路径,上传一句话木马<?php @eval($_POST['chopper']);?>
打开中国菜刀,连接成功
Example 2
上传文件
服务器的对文件的判断
- 服务端MIME 类型检测(检测Content-Type 内容)
- 服务端目录路径检测(检测跟path 参数相关的内容)、
- 服务端文件扩展名检测(检测跟文件extension 相关的内容)
- 服务端文件内容检测(检测内容是否合法或含有恶意代码)
BP抓包查看
不能上传php文件,修改后缀,将一句话木马改成hack.php.123(浏览器遇到不能识别的文件名后缀跳过)
上传文件,连接木马即可。