微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

  • 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一遍,试一试。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐