zoukankan      html  css  js  c++  java
  • 学WEB安全(PHP代码)--邮件头和LDAP注入

     

    邮件头注入



    注入原理:


    这个地方首先要说一下邮件的结构,分为信封(MAIL FROM、RCPT TO)、头部(From,To,Subject、CC、BCC等)、主体(message),所谓的邮件头注入,其实就是针对头部的部分。使用telnet对25端口进行手工发邮件的过程的事后会发现,对于邮件头部的字段其实就是换行符0x0A或者0x0D0x0A分割 ,在绝大部分系统里面不是 就是 ,所以就可以注入了。例如在一段没有过滤的FROM字段里面输入,就可以添加一个收件人。

    from=bobac%0ATo:attacker@attack.com
    

    注入分类:


    发件人修改


    本来发件人就可控,或者在别的字段里重复添加,但是要看邮件服务器针对多个from是如何实现的,是取第一个,还是取最后一个,还是如何操作。

    from=bobac%0Afrom:bobac1
    

    收件人、抄送人注入


    from=bobac%0ATo:attacker@attack.com
    from=bobac%0ACc:attacker1@attack.com%0ABcc:attacker2@attack.com
    

    主题注入


    不过这里要看邮件服务器是如何实现,多个主题是合并还是覆盖写还是取其中一个

    from=bobac%0ASubject:FakeSubject 
    

    消息体注入


    这里要注意头部和消息体之间是两个换行符所以可以类似下面,假消息会加入消息体中或者覆盖写消息体。

    from=bobac%0A%0ANewFakeMessage
    

    检测防御技术


    在每个类型里面把相关的字符过滤掉, , , 以及To,Cc,Bcc等关键字,最好直接根据邮件格式匹配。我们来看bWAPP的代码:

    function maili_check_1($data)
    {
    
        // URL decoding %0A -> 
     and %0D -> 
        $input = urldecode($data); 
            
        $input = str_replace("
    ", "", $input);
        $input = str_replace("
    ", "", $input);
        $input = str_replace("bcc:", "", $input);
        
        return $input;
        
    }
    
    function maili_check_2($data)
    {
    
        // URL decoding %0A -> 
     and %0D -> 
        $input = urldecode($data);
        
        $input = filter_var($input, FILTER_SANITIZE_EMAIL);
                
        return $input;
        
    }
    

    LDAP注入



    注入原理


    ldap的注入和ldap的检索密切相关,其本质是根据ldap查询语言构造特定的判断条件串,使得查询是成立的,与SQL注入很类似。具体LDAP查询语法请参考:LDAP查询过滤语法(MS)

    注入举例


    构造一个LDAP注入字符串,绕过口令认证,只用用户名登录:

    (&(USER= slisberger)(&)(PASSWORD=Pwd))
    

    检测防御


    检测输入的特殊字符,过滤特殊字符,【( ) = & * | " "】我们来看bWAPP的函数。

    function ldapi($data)
    {
             
        switch($_COOKIE["security_level"])
        {
            
            case "0" : 
                
                $data = no_check($data);           
                break;
            
            case "1" :
                
                $data = ldapi_check_1($data);
                break;
            
            case "2" :            
                           
                $data = ldapi_check_1($data);            
                break;
            
            default : 
                
                $data = no_check($data);            
                break;   
    
        }       
    
        return $data;
    
    }
    function ldapi_check_1($data)
    {
    
        // Replaces dangerous characters: ( ) = & | * WHITESPACE
        $input = str_replace("(", "", $data);
        $input = str_replace(")", "", $input);
        $input = str_replace("=", "", $input);
        $input = str_replace("&", "", $input);
        $input = str_replace("|", "", $input);
        $input = str_replace("*", "", $input);
        $input = str_replace(" ", "", $input);
       
        return $input;
        
    }
  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 2431 Expedition
    NYOJ 269 VF
    NYOJ 456 邮票分你一半
    划分数问题 DP
    HDU 1253 胜利大逃亡
    NYOJ 294 Bot Trust
    NYOJ 36 最长公共子序列
    HDU 1555 How many days?
    01背包 (大数据)
  • 原文地址:https://www.cnblogs.com/mutudou/p/13036403.html
Copyright © 2011-2022 走看看