学习笔记三十七:白名单验证的突破

白名单验证的突破有以下几种情况:

  • MIME绕过(content-type验证)
  • 00截断
  • 配合解析漏洞(iis解析漏洞和apache的双重拓展名)
  • 大小写

修改MIME类型绕过白名单限制(content-type验证):

MIME(Multipurpose Internet Mail Extensions)多⽤途互联⽹邮件扩展类型。是设定某种扩展名的⽂件⽤⼀种应⽤程序来打 开的⽅式类型,当该扩展名⽂件被访问的时候,浏览器会⾃动使⽤指定应⽤程序来打开。多⽤于指定⼀些客户端⾃定义的⽂ 件名,以及⼀些媒体⽂件打开⽅式。

id   后缀名      MIME
0    gif        image/gif
1    jpg        image/jpeg
2    png        image/png
3    bmp        image/bmp
4    psd        application/octet-stream
5    ico        image/x-icon
6    rar        application/octet-stream
7    zip        application/zip
8    7z         application/octet-stream
9    exe        application/octet-stream
10   avi        video/avi
11   rmvb       application/vnd.rn-realmedia-vbr
12   3gp        application/octet-stream
13   flv        application/octet-stream
14   mp3        audio/mpeg
15   wav        audio/wav
16   krc        application/octet-stream
17   lrc        application/octet-stream
18   txt        text/plain
19   doc        application/msword
20   xls        application/vnd.ms-excel
21   ppt        application/vnd.ms-powerpoint
22   pdf        application/pdf
23   chm        application/octet-stream
24   mdb        application/msaccess
25   sql        application/octet-stream
26   con        application/octet-stream
27   log        text/plain
28   dat        application/octet-stream
29   ini        application/octet-stream
30   php        application/octet-stream
31   html       text/html
32   ttf        application/octet-stream
33   fon        application/octet-stream
34   js         application/x-javascript
35   xml        text/xml
36   dll        application/octet-stream
37   dll        application/octet-stream

00截断绕过白名单限制:

截断格式:1.php%001.jpg    00截断会导致后面的%001.jpg被截断不再读取   但.jpg仍可以被网站抓取用来判断格式,虽然我们真正要用的是1.php

当遇到路径和文件名要进行拼接时,我们可以这样拼接  ../upload/1.php%00filename=1.jpg

当没有路径参数时,可以这样尝试  filename=1.php%001.jpg

注意,所有跟路径和文件名有关的地方都有可能发生阶段,所以我们对此得一点点去尝试。

条件:

  • php版本⼩于5.3.4 详情关注CVE-2006-7243
  • php的magic_quotes_gpc为OFF状态
  • 我们对某一个或多个路径或文件名可控

当正常操作以上方法却还是行不通,就要考虑是不是POST请求或GET请求导致的。

GET和POST请求进行截断时的区别:

post不会像get那样对%00进行解码,所以需要在十六进制中手动修改。

1.php (注意后面有一个空格符)空格在16进制里是20,我们要手动把他修改成00,再forward

学习笔记三十七:白名单验证的突破

 

学习笔记三十七:白名单验证的突破

 

 解析漏洞绕过白名单限制:

双重拓展名:

apache ⽂件名解析时,是从后⾯开始检查后缀,按最后⼀个合法后缀执⾏。如: shell.php.xxx 因为 xxx 不被apache解析,所以apache会跳过 .xxx ,⽽解析最后⼀个后缀名,即.php,从⽽把这个⽂件当php⽂件解析了。

比如,我们上传1.php.src  当apache服务器对文件进行解析的时候如果它不认识.src,那么它会把.src去掉只保留.php,那么我们就成功绕过了。

iis解析漏洞:

iis6.0

通过抓包修改文件名为如下格式:

*.asp;1.jpg

分号后面的是不会读取的,但.jpg是在白名单中的,所以可以绕过。

iis7.0/7.5/Nginx<8.03

php.ini⾥默认cgi.fix_pathinfo=1,对其进⾏访问的时候,在URL路径后添加.php后缀名会当做php⽂件进⾏解析,漏 洞由此产⽣。

上传1.jpg,访问http://www.xxx.com/1.jpg/.php,此时1.JPG会被当做PHP脚本⽂件来解析。

大小写:

有的会对后缀名的大小写进行区分。

用字典fuzz一遍,试一试。

 

上一篇:SpringBoot源码解析(七)EnvironmentPostProcessor


下一篇:Spring Cloud Alibaba微服务架构入门最容易理解篇