Посмотрев видео kamaz`a Cookies & headers SQL injection я очень заинтересовался его методом вывода данных через BENCHMARK. Главное преимущество этого метода в том, что для узнавания таблиц, колонок, дампа данных и т.д. требуется только один запрос. Чтобы не составлять громадные запросы для вывода данных вручную я написал этот скрипт - [Benchmark] MySql Data Dumper. Рассмотрим конфиг программы: Code: ##################################### my $url = "http://xxx.ru/my/compare.php?id=666+and+1=0+union+select+1,^"; my $com = "--"; my $useragent = "Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.8) Gecko/20100723 Ubuntu/9.10 (karmic) Firefox/3.6.8"; my $dbg = 0; ##################################### $url - инъекция, принтабельное поле заменить на " ^ " $com - комментарий к инъекции "--", "/*" и др. $useragent - значение юзерагента $dbg - дебаг, по умолчанию выключен. Плюсы этого скрипта и метода в целом: [+] очень мало записей в логах [+] всё делается очень быстро [+] возможность вывода баз, таблиц, колонок и значений. [+] сохранение в файл [-] при большом количестве выводимых данных - сильная нагрузка на сервер. [-] пока - скрипт работает через GET [-] версия MySql должна быть >= 4.1 [-] иногда Benchmark бывает нестабилен, или count(*) выдает неверное значение ВНИМАНИЕ ! При дампе значений скрипт спрашивает, относительно чего производить сортировку в цикле бенчмарка. Сортировку надо производить строго по уникальным значениям, "id", к примеру. Если сортировать по паролю, возможна ситуация что у нескольких пользователей один и тот же пароль, и в этом случае, в место двух записей мы получим одну, и всё дальнейшее действие бенчмарка будет нарушено и не вернёт нужный результат. То есть, если надо сдампить логины и пароли, то вводим "username,password,id" и после выбираем: "Order by id". Скачать: benchmark_dumper.pl P.S для дампа больших объёмов данных - к примеру, если надо сдампить 20к юзеров, советую использовать исключительно этот скрипт
а как составить запрос для вывода данных, если принтабельное поле: site.com/index.php?id=-1+union+select+1,2,'Здесь',4 сам разобрался Code: +union select 1,2,concat(@i:=0x00,@o:=0x0d0a,benchmark(1450,@o:=CONCAT(@o,0x0d0a,(SELECT concat(@i:=mail,0x3a,password) from customers WHERE mail>@i order by mail LIMIT 1))),@o),4
Также не советую злоупотреблять количеством одновременно выводимых таблиц. Бо бенчмарк может запросто положить сервер (и иногда намеренно используется именно для этих целей в запросах вида Code: benchmark(100000, md5('qwerty')) ) Поэтому, во избежании излишней нагрузки на сервер, рекомендую выводить, допустим, не 1 раз на 10000 а 4 раза по 2000 записей.
kamaz, время выполнения бенчмарка оочень сильно зависит от хоста, на котором выполняется. как пример, я нашел сайт, который выводил 20к записей за 10-15 секунд, и сайт, который выводил названия четырёх таблиц около минут =))
Помогите разобраться, пытаюсь сдампить БД юзеров в 24к но Benchmark вылетает и не чего не дампит. Формат ввожу такой: db.tbl затем название колонок которые нужно сдампить: c_email,c_firstname,c_lastname,c_id Далее вылетает: Order by ... ? [0] c_email [1] c_firstname [2] c_lastname [3] c_id Ввожу c_id Немного подумав он закрывается. Пробовал дампить по одной колонке, c_id он дампит нормально, но любые другие колонки не дампит. Подскажите плиз в чем трабла ?
Этот метод не универсален, поэтому возможна неправильная работа скрипта. Можно попробовать составить запрос вручную.