LDAP查询中的LDAP注入c#

Posted

技术标签:

【中文标题】LDAP查询中的LDAP注入c#【英文标题】:LDAP injection in LDAP query c# 【发布时间】:2017-05-07 02:00:26 【问题描述】:

这是我用于验证用户是否在 AD 组中的布尔连接。 我的代码中有一个安全标志。

    private bool testconnection(string user)
    
        bool isInGroup = false;
        if (user.Length <= 7 && user.All(char.IsLetterOrDigit))
        
            string groupName = "GroupName";
            DirectoryEntry de = new DirectoryEntry("LDAP://DC=mycompany,DC=com");
            DirectorySearcher searcher = new DirectorySearcher(de);
            searcher.Filter = "(&(objectClass=user)(|(cn=" + user + ")(sAMAccountName=" + user + ")))"; //When I'm concatenating the user name, here I got the security flag which is below.

            SearchResult result = searcher.FindOne();

            if (result != null)
            

                DirectoryEntry person = result.GetDirectoryEntry();
                PropertyValueCollection groups = person.Properties["memberof"];

                foreach (string g in groups)
                
                    if (g.Contains(groupName))
                    
                        isInGroup = true;
                        break;
                    
                

            
        
        return isInGroup;
    

我想知道,如何在 searcher.filter 中将用户名作为参数传递而不是“+user+”

安全标志:

说明

该软件没有充分清理 LDAP 查询或响应中使用的特殊元素,从而允许攻击者在执行 LDAP 查询之前修改其语法、内容或命令。 建议 验证所有用户提供的输入,以确保其符合预期的格式,并尽可能使用集中的数据验证例程。使用黑名单时,请确保清理例程执行足够次数的迭代以删除所有不允许字符的实例。 谢谢, 克里希纳

【问题讨论】:

【参考方案1】:

根据LDAP Injection Prevention Cheat Sheet,在名为 .Net AntiXSS 的某种独立库中提供了一些类。

【讨论】:

以上是关于LDAP查询中的LDAP注入c#的主要内容,如果未能解决你的问题,请参考以下文章

如何找出我的 Windows 域上托管 LDAP 的服务器?

zhanwei

LDAP 查询以返回包含给定用户的 OU

注入攻击中的解释器

C# - 使用 LDAP 检索 Active Directory 的组成员

ldap查询鉴权