漏洞描述
开发中文件上传功能很常见,作为开发者,在完成功能的基础上我们一般也要做好安全防护。 文件处理一般包含两项功能,用户上传和展示文件,如上传头像。
文件上传攻击示例
upload.PHP
upload.html
上述代码未经过任何验证,恶意用户可以上传PHP文件,代码如下
恶意用户可以通过访问 如http://server/uploads/shell.PHP?command=PHPinfo(); 来执行远程命令
Content-type验证
upload.PHP
该方式是通过Http请求头信息进行验证,可通过修改Content-type ==> image/jpg绕过验证,可以通过脚本或BurpSuite、fiddle修改 如下 Content-disposition: form-data; name="userfile"; filename="shell.PHP" Content-Type: image/gif
图片类型验证
备注:如JPEG/JPG文件头标识为FFD8
upload.PHP
可以通过图片添加注释来绕过此验证。 如添加注释,保存图片后将其扩展名改为PHP,则可成功上传。 上传成功后访问该文件则可看到如下显示
文件扩展名验证
upload.PHP
当黑名单不全,构造特殊文件名可以绕过扩展名验证
直接访问上传的文件
将上传文件保存在非web root下其他文件夹下,可以防止用户通过路径直接访问到文件。 upload.PHP
用户不可以直接通过http://localhost/uploads/ 来访问文件,必须通过view.PHP来访问 view.PHP
查看文件代码未验证文件名,用户可以通过例如http://localhost/view.PHP?name=..//PHP/upload.PHP,查看指定的文件
解决漏洞示例
upload.PHP
view.PHP
上述代码文件名随机更改,文件被存储在web root之外,用户通过id在数据库中查询文件名,读取文件,可以有效的阻止上述漏洞发生
总结
通过以上示例分析,可总结一下几点
3.文件查看采用数据库获取文件名,从而在相应文件服务器读取文件
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。