Xi4or0uji's blog

文件上传汇总

字数统计: 910阅读时长: 3 min
2019/07/10 Share

前言

很早就应该出这篇了,之前国赛出题耽搁了一下,补坑补坑
这个漏洞相信有点接触的都很清楚要干嘛的,就不解释了,直接开讲

常见的上传文件的校验方法

这个漏洞体系庞大,不知道从何讲起,所以就先根据这些校验的方法将绕过的方法说一说

客户端校验绕过

这个检测是在前端,所以直接抓个包改一下就能绕过上传文件了

服务端绕过

content-type检验

这种检验抓包修改content-type即可

文件幻数检测

在文件内容前加入对应的文件头信息,GIF89a‰PNG之类的

文件加载检测

如果图片是通过渲染的方式进行测试的话,可以将一句话木马放在图片最后,尝试一下能不能执行

后缀名

大小写

有些服务器会忽略大小写,因此可以直接修改后缀名的大小写完成绕过

扩展名

有一些后缀名可能不在黑名单里面,但是也是能被服务器解析的

1
2
3
4
jsp jspx jspf
asp asa cer aspx
php php3 php4 php5 pht phtml
exe exee

%00截断

如果存在这个漏洞的话,可以上传一个文件名为test.php%00.jpg,用它绕过漏洞

解析漏洞

这个漏洞主要是web容器在解析文件时出了漏洞,导致其他格式的文本也能当做脚本格式去执行

多后缀

Apache的解析规则是从右往左进行判断,如果后缀名为不可识别的文件,就再向左进行解析
例如假设上传了一个test.php.abc,服务器不能识别abc,所以会向左看,解析php,能解析了,于是将它解析成php文件

配置漏洞

如果在Apache的conf文件里有这样一行配置AddHandler php5-script .php,这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
同理,如果在Apache的conf里有这样一行配置AddType application/x-httpd-php .jpg,即使扩展名是 jpg,一样能以 php 方式执行。

.htaccess

一般来说,配置文件都是全局的,但是Apache还有一种比较简单的配置当前目录和子目录的配置文件,当然想利用的前提是开启了模块的使用

1
2
AllowOverride All
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

ubuntu配置还需要加多句命令sudo a2enmod rewrite,然后还要重启服务器
假设我们能上传一个.htaccess文件并且写入

1
2
3
<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

这样子等我们上传shell.jpg的时候就能将shell.jpg文件当做php文件执行

例题

这里给一个例题,2018年的巅峰极客有一题BabyWeb,图太久远找不回了,只讲操作好吧
首先扫描端口看到3306是开放的,然后用hudra爆破mysql拿到密码是1q2w3e4r5t6y,进入数据库后可以得到账号和密码`BabyWeb@my.lol/babyweb@1990,成功登录进去以后就是想办法进行文件上传去getshell了 登录进mysql以后是看到一个type字段,内容是{“0”:”png”,”1”:”jpg”,”2”:”gif”},这里就是前端取的限制上传的值,直接改php改不了,但是我们可以绕一下,改成{“0”:”png”,”1”:”jpg”,”2”:”gif”,”3”:”xxx”,”5”:”htaccess”},这样就能成功上传.htaccess`文件,且内容为

1
2
3
<FilesMatch "shell.xxx">
SetHandler application/x-httpd-php
</FilesMatch>

然后再上传shell.xxx,这样就能成功解析shell.xxx文件然后getshell

CATALOG
  1. 1. 前言
  2. 2. 常见的上传文件的校验方法
    1. 2.1. 客户端校验绕过
    2. 2.2. 服务端绕过
      1. 2.2.1. content-type检验
      2. 2.2.2. 文件幻数检测
      3. 2.2.3. 文件加载检测
      4. 2.2.4. 后缀名
        1. 2.2.4.1. 大小写
        2. 2.2.4.2. 扩展名
      5. 2.2.5. %00截断
      6. 2.2.6. 解析漏洞
        1. 2.2.6.1. 多后缀
        2. 2.2.6.2. 配置漏洞
        3. 2.2.6.3. .htaccess
          1. 2.2.6.3.1. 例题