黑名单检测
 
 一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些非法的字符或者字符串,当数据包中含有符合该列表的字符串时,即认定该数据包是非法的。 
 
 
 如下图,定义了一个数组$deny_ext = array('.asp','.aspx','.php','.jsp'); 
 
 
 然后有一个判断语句如果后罪名为数组里面的几个就不允许上传 
 
 
 
 
如何确认是否是黑名单检测
 
 黑名单是有限的,可以随意构造一个文件后缀,如果可以上传,则说明是黑名单检测,反之,为白名单检测。比如上传一个php后缀的文件,发现不允许上传,接下来就是去判断检测方式。 
  
   
    
     
 
    
    
     
 
    
    
     
 
    
    
     
      
 
     
     
      
 
     
     
      
 
     
     
     
      
       
        
         
          
           
            
 
           
           
            
 
           
           
            
 
           
           
            
 
           
           
            
 
           
           
           
            
 
           
           
            
 
           
           
            
 
           
           
           
            
 
           
           
          
         
        
       
      
     
    
   
  
                 
  随意构造一个文件后缀,比如将1.php改为1.aaa发现可以上传,说明是基于黑名单检测 
 
 
 绕过技巧
 
   1. 后缀双写绕过  
  
 
   
   2. 后缀大小写绕过  
  
 
   
   3. 其它可解析后缀绕过  
  
 
   
   4. 图片+配置文件绕过  
  
 
   
   。。。 
  
 
  其它可解析后缀绕过
 
    PHP: 
    
 
    
     php2、php3、php5、phtml、pht(是否解析需要根据配置文件中设置类型来决定) 
    
 
    
    ASP:asa、cer、cdx 
   
 
    
    ASPX:ascx、ashx、asac 
   
 
    
    JSP:jspx、jspf  
   
 
    
   Pass-03
方法1:
 
    更改 Apache 的配置项 AddType application/x-httpd-php .php .phtml ,然后上传 .phtml 文件  
   
 
    
    在实战中是不可以修改的,如果服务器本身就设置了这项那么我们可以利用。这里只是了解一下原理。 
   
 
    
 
    
    一般会将这一项注释掉,我们打开后,可以添加指定后缀,这样服务器就会将指定后缀的文件当做php文件解析 
   
 
    
 
    
    更改后将phpstudy服务重启即可,我们将post.php后缀修改为phtml发现上传成功。接下来就可以利用工具进入服务器 
   
 
    
 
   方法2:
 
     抓包,双写 ::$DATA  
    
 
     
     在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,它的目的就是不检查后缀名  
    
 
     
     例如:"phpinfo.php::$DATA" Windows会自动去掉末尾的::$DATA变成"phpinfo.php 
    
 
     
     
     我们查看源代码可以发现这么一个变量 
    
 
     
     网站有所防御,会清除::$DATA,防止我们利用::$DATA绕过监测后缀名。 
    
 
     
     服务器是从第一个字符开始匹配::$DATA,比如第一个从:开始,只有后面完全匹配::$DATA,才会清除,那么我们就可以利用双写::$DATA。那么到底如何双写呢。 
    
 
     
     
     1.::$DATA::$DATA,这种写法明显不对,因为第一次开始匹配,发现一个::$DATA清除后,还会继续匹配发现还是::$DATA那么就都会清除掉。 
    
 
     
     
     2.::$::$DATADATA,开始匹配,匹配到::$以后下一个应该是字母D但是下一个是:则会认为不是,那么就开始从第二个:同理,知道匹配到中间的::$DATA,会将这个清除掉,然后会接着从下一位开始匹配也就是D开始第一个就匹配失败,那么继续往后,后面都不是从:开始。所以最后就留一下了一个::$DATA。这样就达成了我们的目的 
    
 
     
 
     
     开始抓包 
    
 
     
     在这里双写,然后放包会发现.php文件上传成功 
    
 
     
 
     
     访问图像链接,将::$data去掉再次访问 
 
    
 
     
 
     
     可以看到一句话木马上传成功 
    
 
     
 
    图片+配置文件绕过
Pass-04
 
      .htaccess 文件(或者“分布式配置文件”),全称是HypertextAccess(超文本入口)。提供了针对目录改变配置的方法。它里面可以存放Apache服务器配置相关的指令。  
     
 
      
      .htaccess  
     
 
      
     <FilesMatch "as.png">setHandler application/x-httpd-php</FilesMatch>
 
      通过一个.htaccess 文件调用 php 的解析器去解析一个文件名中只要包含"as.png"这个字符串的任意文件,所以无论文件名是什么样子,只要包含"as.png"这个字符串,都可以被以 php 的方式来解析,一个自定的.htaccess 文件就可以以各种各样的方式去绕过很多上传验证机制。 
     
 
      
      
      
       也可以使用以下方式:  
      
 
       
       先上传  
       .htaccess  
       文件,内容如下 
      
 
       
        SetHandler application/x-httpd-php(这个万能) 
       
 
        
         或者 
        
 
         
          AddType application/x-httpd-php jpg 
         
 
          
           再上传一句话木马  
           shell.txt  
           或者  
           shell.jpg  
           文件 
          
 
           
           
           解题过程 
          
 
           
           可以看到这关的源代码添加了更多的黑名单。我们再想通过其他后缀解析php文件就比较困难,那么就用到了.htaccess 文件,先编辑好上传 
          
 
          
            之所以可以使用 
           .htacces文件是因为这关源代码中不会随机更改文件名 
          
 
           
 
          
            而第三关会将上传厚的文件随机更改名字这样就会让 
           .htacces文件失效 
          
 
           
 
           
 
          
            上传好 
           .htaccess 文件后再上传一个.png的文件,直接将一句话木马文件后缀改成这个。 
           .htaccess 文件的作用是将任何文件当成php文件进行解析 
          
 
           
 
          
            发现上传成功,使用中国蚁剑进行连接也成功了 
          
 
           
 
          点和空格绕过
pass-4
            由于删除点和首尾去空这些验证只是一次性,所以我们可以进行 
           点和空格绕过。 
          
 
          
            bp抓包绕过 这里我们上传post.php文件,然后bp抓包修改为1.php. .这里是点+空格+点。然后放包 
          
 
           
           
 
          
            可以看到删除点和去空后还剩下一个点,且文件成功被解析 
          
 
           
 
          pass-5
            查看源代码发现将.htaccess文件也列入黑名单 
          
 
          
            那么利用点和空格绕过 
          
 
           
 
           
 
          


















