文件上传(二)
下面我们来总结另外几个与中间件以及http请求头有关文件上传的漏洞,它们都与客户机或服务器的操作系统无关。
Apache
文件名解析漏洞
由于Apache解析文件后缀名的顺序是从右往左,所以我们可以在文件名最后加上Apache无法识别的文件后缀名来绕过。例如我们要上传一个PHP木马,那我们可以把文件名命名为”*.php.123″,其中”123″是Apache无法识别的后缀名,则Apache会解析左边的”php”后缀名,从而实现绕过。
.htaccess
Apache中的.htaccess文件是用户用来自定义管理目录的,我们可以新建一个”.htaccess”文件,并在里面写入自定义的内容,例如:
<FilesMatch "test">
SetHandler
application/x-httpd-php
</FilesMatch>
这样Apache会把文件名中含有”test”的文件当作PHP文件执行。利用这个特性,我们可以把图片马以这样的方式让Apache解析。
Nginx
文件名解析漏洞
大多数网站都使用白名单机制限制上传文件类型,但是我们可以在上传文件的路径后面加上”*.php”,例如https://www.example.com/upload/1.png/2.php
。当Nginx解析到URL中的”2.php”时,由于我们并没有真正上传这个文件,Nginx会向上级目录查找,即把我们实际上传的”1.png”当作PHP文件解析。这里”1.png”实际上是修改了后缀名的大马或小马。
MIME类型检测
服务器通过对http请求头里的”content-type”字段进行检验,来判断文件类型是否符合要求。常见的符合要求的文件名有:image/jpeg,image/gif,image/png等。要利用这个漏洞,我们需要把http请求头中的”content-type”字段改为上面几种符合要求的MIME即可。不过要注意要在文件头加上”GIF89a”来绕过可能的文件头校验。
那如果遇到白名单检测呢?这时候就要配合文件包含漏洞了。在以后的笔记中,我将会总结文件包含的一些技巧。
P.S.开学了,以后笔记的提交和更新频率会有所减慢,敬请谅解!