Вызов крипт PHP - PullRequest
       36

Вызов крипт PHP

3 голосов
/ 29 сентября 2010

Друг дал мне вызов: он зашифровал строку, используя функцию шифрования PHP (CRYPT_STD_DES) (из PHP4). Я знаю соль, используемую для шифрования, и поскольку crypt является односторонним алгоритмом, я должен использовать метод перебора, и я знаю, что пароли состоят только из строчных букв.

Теперь у меня есть машина с 16 ядрами (2x Xeon) и большим количеством оперативной памяти. Какой самый эффективный способ реализовать эту силовую атаку (я предполагаю, что мне придется использовать PHP, что не совсем хорошо, но если у кого-то из вас есть идеи ...)

[EDIT]

И я забыл упомянуть, зашифрованное представление имеет длину 13 символов, а строка меньше 8 букв, как простое шифрование пароля:)

Ответы [ 3 ]

2 голосов
/ 29 сентября 2010

Это быстрая попытка в C кода (скомпилировано с gcc -O2 -lcrypt)в Ubuntu 10.04.1

  #define _XOPEN_SOURCE
  #include <unistd.h>
  #include <stdio.h>
  #include <stdlib.h>

  void inc(char *p)
  {
     int i;
     for (i=0 ; i<8 && p[i]=='z' ; i++);
     if (i >= 8) exit(printf("Not found :-(\n"));
     if (!p[i]) p[i]='a';
     else p[i]++;
     while (--i >= 0) p[i]='a';
  }

  int main ()
  {
    char *salt = "XY";
    char *buzz = "XYaAbBcCZ0123";

    char pass[] = { 'a',0,0,0,0,0,0,0,0 };

    while(1)
      if ( ! strcmp(crypt(pass, salt), buzz))
        exit(printf("Found %s :-)\n", pass));
      else
        inc(pass);
  }

Этот код должен выполняться в течение дня или двух (2,10 ^ 11 комбинаций) на в настоящее время ПК, вы можете запустить его на нескольких машинах, один из которых выполняетсяот "a" до "gzzzzzzz", другой от "haaaaaaa" до "nzzzzzzz" и т. д ... например.

2 голосов
/ 29 сентября 2010

Из руководства по PHP:

crypt () вернет хешированную строку, используя стандартный Unix Алгоритм или альтернатива на основе DES алгоритмы, которые могут быть доступны на система.

Некоторые операционные системы поддерживают больше чем один тип хэша. По факту, иногда стандарт на основе DES алгоритм заменен на MD5 алгоритм. Тип хеша срабатывает по солевому аргументу. До 5.3, PHP будет определять доступный алгоритмы во время установки на основе крипта системы (). Если нет соли при условии, PHP будет автоматически генерировать либо стандартный двухсимвольный (DES) соль или двенадцать символов (MD5), в зависимости от наличия MD5

Другими словами, функция crypt () просто вызывает функцию crypt () операционной системы из библиотеки C. Это означает две вещи.

Во-первых, тип шифрования стандартизирован. Вам не нужно использовать PHP для запуска грубой силы, вам просто нужно знать используемый алгоритм. Многие программы, такие как Cane и Abel или Jack the Ripper, способны сломать несколько алгоритмов с помощью атак методом перебора, словаря или радуги.

Во-вторых, тип шифрования зависит от операционной системы, в которой он был зашифрован. Это означает, что вам, возможно, придется попробовать несколько различных методов шифрования, если нет явного понятия о том, какой из них использовался (шаблон зашифрованной строки может вас зацепить).

Я бы определенно НЕ предлагал пытаться использовать PHP для грубой силы, поскольку интерпретируемые языки работают намного медленнее, чем их скомпилированные аналоги.

1 голос
/ 29 сентября 2010

Наиболее эффективный (хотя, вероятно, наименее опасный) способ, вероятно, состоит в том, чтобы найти человека, который уже реализовал его (например, используйте John the Ripper ).

...