LDAP和LDAP注入/预防

轻量级目录访问协议

null

LDAP(Lightweight Directory Access Protocol,轻型目录访问协议)是一种必须在大学和初创企业中使用的软件协议,它允许任何人在公共互联网或企业内部网上查找组织、个人以及网络中的文件和设备等其他资源。

LDAP的一个常见用途是提供一个中心位置来存储用户名和密码。这允许许多不同的应用程序和服务连接到LDAP服务器以验证用户

我的大学:

图片[1]-LDAP和LDAP注入/预防-yiteyi-C++库

我的大学毕业了

本协议中可执行的主要操作

  • 加上: 在数据库中添加新数据
  • 绑定(验证): 所有身份验证和加密都在本节中完成
  • 删除: 删除数据drm数据库
  • 搜索和比较: 搜索操作用于搜索和读取条目。
  • 修改: LDAP客户端使用修改操作请求LDAP服务器对现有条目进行更改
  • 解除绑定: 关闭连接。

具有多个属性的简单目录条目:

 dn: cn=akash sharan, dc=example, dc=com
 objectClass: organizationalStudent
 cn: akash sharan

存在LDAP统一资源标识符(URI)方案,客户端在不同程度上支持该方案,服务器返回引用和继续引用。

LDAP URI语法:

ldap://host:port/DN?attributes?scope?filter?extensions
ldap://ldap.example.com/cn=akash%20sharan, dc=example, dc=com

host - IP address
DN - is the distinguished name to use as the search base.
for example - cn=John Doe, dc=example, dc=com
Attributes - is a comma-separated list of attributes to retrieve.
Scope specifies the search scope and can be "base" 
(the default), "one" or "sub" classes.
Filter is a search filter.
Extensions are extensions to the LDAP URL format.

LDAP注入

LDAP注入是一种攻击,用于攻击基于web的应用程序,这些应用程序基于用户输入构造LDAP语句。当应用程序无法正确清理用户输入时,可以通过类似于SQL注入的技术修改LDAP语句。

正常操作:

LDAP-Diagram

代码注入操作:

LDAP-Code-Injection-Diagram

LDAP注入示例: 对于用户搜索,以下代码负责执行操作

Insert the username

将在后端执行的LDAP查询

String ldapSearchQuery = "(cn =" + $userName + ")" ;
System.out.println(ldapSearchQuery);


如果未验证变量$userName,则可能是 可以实现LDAP注入 ,详情如下:

如果用户在框搜索中输入“*”,系统可能会返回LDAP基础上的所有用户名。如果用户输入“akash”(|(password=*)),它将生成下面的代码,显示akash的密码(cn=akash)(|(password=*))。

预防

  • 输入验证 :必须对所有用户端输入进行消毒。它应该没有可能是恶意的可疑字符和字符串。现有的OWASP Api有助于防御以下漏洞:
    • 爪哇岛
    • C#AntiXSS功能,包括编码器。LdapFilterEncode(字符串),编码器。LDAPDifferencedNameEncode(字符串)和编码器。LDAPDifferentiedNameEncode(字符串、布尔、布尔)。

    我将为您提供上述搜索查询的搜索过滤器:

    public static final String escapeLDAPSearchFilter(String filter)
    {
    // If using JDK >= 1.5 consider using StringBuilder
    StringBuffer sb = new StringBuffer();
    for ( int i = 0 ; i < filter.length(); i++) {
    char curChar = filter.charAt(i);
    switch (curChar) {
    case '\' :
    sb.append( "\5c" );
    break ;
    case '*' :
    sb.append( "\2a" );
    break ;
    case '(' :
    sb.append( "\28" );
    break ;
    case ')' :
    sb.append( "\29" );
    break ;
    case 'u0000' :
    sb.append( "\00" );
    break ;
    default :
    sb.append(curChar);
    }
    }
    return sb.toString();
    }

    
    

  • 安全配置: 在处理用户对象权限时保护敏感信息。当应用程序在登录过程中使用目录时,这一点尤为重要。在组织中设置ldap时,应采取限制和限制措施。

工具书类 https://www.owasp.org/index.php/LDAP_Injection_Prevention_Cheat_Sheet https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol http://www.faqs.org/rfcs/rfc2254.html

本文由 阿卡什·沙兰 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享