Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rsddaros

sql injection funciona ou não??? alguem ja tentou???

Recommended Posts

Bom dia...Tenho o seguinte comando SQL para validar usuarios...mysql_query("SELECT * FROM usuarios, revenda WHERE usuario='$usuario' AND senha=MD5('$senha') AND permissoes='3' AND email=usuario AND status='1'",$con);onde as variaveis $usuario e $senha vem de um formulario html ... que eu não faço nenhum tratamento de string....to tentando fazer um sql injection.. so para ver se funciona oque todos dizem que funciona... mas a maioria não testou... então fiz o seguinte....coloquei este comando dentro do campo do formulario usuario mysql_escape_string("1' or id ='0'#")e digitei alguma coisa no campo senha so para não ficar em branco... então... NÂO FUNCIONOU....Alguem sabe como Fazer INJECTION?desde já Agradeço a ajuda... de todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, muito relativo, pq conforme passa, o php fica mais seguro quanto a isso. Por exemplo, agora ele ja vem configurado para tratar caracteres especiais em passagem e essas coisas, por exemplo, com o 4 você conseguia injetar variaveis get em metodos post, dai você tinha que ficar usando $_POST e $_GET para pegar as variaveis, hoje com o 5 ele vem configurado para fazer isso por padão, e assim por diante, mais é sempre bom validar essas coisas.

 

aqui tem um monte de resposta desse tipo

http://www.phpbrasil.com/faqs/faq.php/id/707

 

aqui tem a explicação lógica e como se deve tratar essas coisas, um link mais aprofundado

www.php.net/manual/pt_BR/security.database.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

"SELECT * FROM usuarios, revenda WHERE usuario='mysql_escape_string("1' or id ='0'#")' AND senha=MD5('$senha') AND permissoes='3' AND email=usuario AND status='1'"
Seu código assim não vai fazer sentido.

 

Você deveria tentar algo tipo a' OR 't'='t

Aí seu código, quando executado, ficaria algo como

"SELECT * FROM usuarios, revenda WHERE usuario='a' OR 't'='t' AND senha=MD5('$senha') AND permissoes='3' AND email=usuario AND status='1'"
O que sempre validaria seu formulário.

 

Pesquise mais para entender realmente como isso funciona.

 

Um modo de aumentar a proteção contra este tipo de ataque é utilizar um

mysql_real_escape_string($usuario)
Existem diversos códigos espalhados aqui pelo fórum onde você vai encontrar outros exemplos de proteção contra este tipo de ataque.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O meu script está assim:

$q_user = mysql_query("SELECT * FROM tabela WHERE login='$nome'");	if(mysql_num_rows($q_user) == 1) {   		$query = mysql_query("SELECT * FROM tabela WHERE login='$nome'");		$dados = mysql_fetch_array($query);		if(md5($_POST['senha']) == $dados['senha']) {			session_register("nome");

 

mas também não consegui injetar nada.

 

 

Como eu poderia fazer para a cnsulta retornar true e eu conseguir logar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deveria tentar algo tipo a' OR 't'='t

Aí seu código, quando executado, ficaria algo como

"SELECT * FROM usuarios, revenda WHERE usuario='a' OR 't'='t' AND senha=MD5('$senha') AND permissoes='3' AND email=usuario AND status='1'"
O que sempre validaria seu formulário.
Mas assim ainda tem a AND senha= que tem que ser valida... se não "não vai sempre ser validado...."

 

tentei usar... tentei tambem fazer a' OR 't'='t'# não funcionou tambem... a' OR 't'='t idem

 

O formulário é POST ou GET?

POST

 

O meu script está assim:

$q_user = mysql_query("SELECT * FROM tabela WHERE login='$nome'");	if(mysql_num_rows($q_user) == 1) {   		$query = mysql_query("SELECT * FROM tabela WHERE login='$nome'");		$dados = mysql_fetch_array($query);		if(md5($_POST['senha']) == $dados['senha']) {			session_register("nome");

mas também não consegui injetar nada.

 

 

Como eu poderia fazer para a cnsulta retornar true e eu conseguir logar ?

E´esse é o problema todos falam que funciona... mas nunca vi ninguem fazer... ou mesmo.... talvez seja so boatos... sei lá... so vendo pra CRER...

Compartilhar este post


Link para o post
Compartilhar em outros sites

vcs estao tentando executar um sql injection mas nao da porque ele ja esta seguro, usando md5() ele ira criptografar o sql injection e a senha gerada nao vai bater nunca, por isso que ele nao aceita, seu codigo nao ta 100% seguro mas usando MD5 ja deixa ele bem seguro contra esses tipos de ataques

 

e pessoal sobre o sql injection nao importa a letra se é 't' ou 1 ou qualquer outra coisa, o que precisa fazer é um select retornar verdadeiro exemplo 0' or 'abacate' = 'abacate

Compartilhar este post


Link para o post
Compartilhar em outros sites

então o sql injection neste caso não funciona? oque funciona neste caso???

Compartilhar este post


Link para o post
Compartilhar em outros sites

ainda da para injetar um sql ai nesse caso por exemplo

 

basta passar o sql injection no primeiro campo e fazer ele encerrar o script ignorando o resto com um sinal de comentario

 

exemplo ' or '' = '';#

 

"SELECT * FROM usuarios, revenda WHERE usuario='' or '' = '';#' AND senha=MD5('$senha') AND permissoes='3' AND email=usuario AND status='1'"

 

só to mostrando isso para segurança e nao para usarem indevidamente

 

tem da para fazer outras coisas inclusive fazer ele executar outros selects

Compartilhar este post


Link para o post
Compartilhar em outros sites

então FABYO o problema ai.. é que o cara ta pegando dados de duas tabelas.. para validar este SQL... tentei isso ... não deu certo.. acho que neste caso... não tem solução... até acho que esse sql ta errado.. mas beleza o cara pediu para eu ver se conseguia entrar... não consegui.. agradeço a ajuda de todos....Caso alguem ache uma solução avizem por favor...AbraçosObs: acabei de testar em um sql que acabei de fazer.. so pra testar Não funcionou... talvez seja as versões do php e do mysql.. sei lá...o select que testei agora foi SELECT * FROM usuarios WHERE usuario='$usuario' AND senha=MD5('$senha') and permissoes='1'coloquei assim no campo que pega em $usuario ' or '' = '';# tambem assim ' or '1' = '1';# tambem assim ' or '1' = '1'#

Compartilhar este post


Link para o post
Compartilhar em outros sites

você quer solução ou quer aprender a injetar sql injection?, porque o que foi passado aqui é como evitar e nao como injetar , você precisa entender melhor de sql e assim entendera como evitar esses ataques

 

as ideias que eu te passei funciona normal, mas depende de como você ta fazendo, se testar os comando sql direto no mysql você pode ter uma noção melhor dos resultados

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim eu testei... fazendo assim SELECT * FROM usuarios WHERE usuario=''or 'a'='a'# AND senha=MD5('$senha') and permissoes='1'direto na linha de comando funcionou.. mas quando coloco isso dentro de um input.. nem funciona....' or 'a'='a' #O problema é so esse.. to querendo aprender.. e ver se isso é verdade.. mas até agora ninguem conseguiu me mostrar se isso funciona ou não...Concordo que talvez seja minha incapacidade de fazer as coisas .. mas se alguem realmente conseguir fazer isso.. por favor nos mostre pois estou testando e não to conseguindo...não tenho vergonha em dizer que não consigo... mas pelo menos não posto coisas sem testa e testo oque postam para mim...Abraços....

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo Fabyo assim eu testei e funcionou SELECT *FROM administrador WHERE id = '' OR 'a' = 'a'assim tambem funcionouSELECT * FROM usuarios WHERE usuario=''or 'a'='a'# AND senha=MD5('$senha') and permissoes='1'pois é a mesma coisa... so que quando faço um input para enviar os dados para esse select...$usuario = $_POST['usuario'];SELECT * FROM usuarios WHERE usuario='$usuario' AND senha=MD5('$senha') and permissoes='1'coloco dentro do input assim ' or 'a'='a'#e não funciona... a questão é unicamente essa.. parece que tem um tratamento de string antes de chegar no select mas não tem...você sabe oque pode ta acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, se tiver ligado o magic_quotes você precisa desligar

 

http://br.php.net/manual/pt_BR/function.stripslashes.php

 

if (get_magic_quotes_gpc()) {

$lastname = stripslashes($_POST['lastname']);

} else {

$lastname = $_POST['lastname'];

}

 

mas isso faz parte da segurança por isso que você nao consegue testar o script

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho as versoes novas do php ja escapa esse ' , por isso que não rola....agora faz este teste em um servidor antigo, ai vai funcionar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

rsddaros

 

estou com uma situação igual ao sua..

 

muita gente fala pra tomar cuidado com as injections, mas até agora eu não vi uma que funciona..

 

vamos ver o que dá..

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum.. então ta explicado em servidores novos não rola esse negocio de sql injection...correto afirmar isso???ounão???gostei do topico ... acho que muitos como eu vão aprender... bastante...

Compartilhar este post


Link para o post
Compartilhar em outros sites

FAbyo + uma vez você provou que realmente é o cara...parabens... obrigado por ajudar.. mas pelo que entendi o sql injection so vai funcionar em servidores que estiverem desatualizados e em servidores que tiver com o get_magic_quotes_gpc().... desativado... fora isso ...não tem outra maneira de fazer...E´correto eu afirmar isso?mais uma vez obrigado!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim se tiver tudo colaborando com a segurança pode falar que seu sistema esta seguro contra ataques sql, mas lembre-se segurança nunca é demais, quanto mais você se precaver melhor

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.