简介
文件上传漏洞是web应用最常见的漏洞之一,也是危害最大的漏洞之一。web应用有很多场景需要用户自己上传文件,比如头像上传。如果对上传的文件没有限制或者限制有缺陷,就可以上传一些脚本文件(shell文件),用户可以通过脚本文件远程连接服务器且获取对服务器的控制,将对信息安全造成极大的危害。 文件上传也是渗透测试中最重要的一个环节。
常用的检测和绕过方式
- js检测
很多应用只是在前端对文件后缀类型进行判断。用js对常见的shell文件后缀名过滤,如sap、jsp、php等文件。只需要删除相应的过滤代码,或者禁用js文件即可绕过。这也是最简单最不安全的限制方式,为了安全,目前很少存在了。
- 后端对MIME类型检测
MIME:全称Multipurpose Internet Mail Extensions,MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 常见的MIME类型:
代码语言:javascript复制text/plain 纯文本
text/html HTML 文档
text/javascript js代码
application/xhtml xml XHTML文档
image/gif GIF图像
image/jpeg JPEG图像
image/png PNG图像
video/mpeg MPEG动画
application/x-www-form-urlencoded POST方法提交的表单
Other
可以通过抓包工具修改MIME值来绕过。比如使用Burpsuite工具。
- 文件头检测
文件中不仅存储着数据信息,还存储着文件类型等基本信息,一般存储在文件的头部。比如很多手机拍照会在照片中存储位置信息。 常见文件头:
代码语言:javascript复制文件类型 16进制
html 68746D6C3E
zip 504B0304
rar 52617221
Other
- 大小写绕过
Windows系统对大小写不敏感,所以可以通过大小写绕过。Linux不可以,Linux大小写敏感。
php == pHp == PHP
- 双写绕过
当对后缀名过滤进行换空过滤时,可以用双写绕过。
"php"-->"" 时,"phphpp" --> "php";
- 0x00截断
00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以 (即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到 字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入 字符的方式,达到字符串截断的目的。
- 图片马
向图片中植入 php 代码,但是执行较困难,必须要中间件将该文件认为是 php 文件.除非有有相关的中间件解析漏洞或者有特定的运行php的网页。