Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal.
Eu tenho um script que pega um parâmetro via GET, por exemplo:
No meu script php não estou a tratar esse parâmetro (por distração), faço diretamente uma consulta na base de dados usando o que passei por GET.
Acontece que ao passar por um auditoria, conseguiram utilizar essa brecha para ter acesso a base de dados.
Como conseguiram chegar a base de dados?
Apenas consegui provocar um erro trocando o 1 pelo apóstrofo.
Se tento colocar uma query (para tentar obter o nome da base de dados e utilizador, ou listagem das tabelas) no lugar do 1 retorna um Forbidden.
Como conseguiram extrair dados da base de dados através da única lacuna que encontraram?
Obrigado.
Se você não tiver um filtro é possível inserir comandos sql direto pelo formulário, isso da ao atacante um poder enorme sobre o sistema.
Amigo uma das formas de evitar que o usuário ataque o sistema e tratar todos dados recebidos, pois se ele identificar mais ou menos como funciona seu sistema ele pode fazer uma consulta e listar tudo. eu trato com
strip_tags();
existem outras que eu uso também consulte o manual do php, obterás boas informações sobre o assunto.
A única forma segura de se tratar SQL Injection é através de Prepared Statements. A strip_tags pode tratar XSS, mas não SQL Injection.
Pessoal, eu agradeço muito o vosso tempo mas não respoderam a minha pergunta.
Eu sei como tratar, seja filtrando o tipo de dado, usando prepared statements, limitando o tamanho do parâmetro, usando addslashes, replace, etc... :yes:
A questão era, o pessoal da auditoria conseguiu ter acesso a base de dados através dessa lacuna, eu tentei chegar lá introduzindo SQL no parâmetro, porém dá um forbidden.
Veja o que eu escrevi:
>
Acontece que ao passar por um auditoria, conseguiram utilizar essa brecha para ter acesso a base de dados.
Como conseguiram chegar a base de dados?
Apenas consegui provocar um erro trocando o "1" pelo apóstrofo.
Se tento colocar uma query (para tentar obter o nome da base de dados e utilizador, ou listagem das tabelas) no lugar do "1" retorna um Forbidden.
Agradeço a vossa ajuda.
Como está utilizando o apóstrofo?
Se for assim:
?lg='
Não funcionará mesmo. O correto seria:
?lg=′
Um exemplo de SQL Injection que eles podem ter utilizado em seu site:
http://www.meusite.com.br/?lg=1 order by 1
Usei o apóstrofo normal, sem codificação e funciona, mas apenas retorna um erro.
Troquei o apóstrofo por uma query porém retorna um forbidden.
Para chegar a base de dados teria que conseguir executar a query que passo no lugar do parâmetro.
Se retorna um forbidden, como conseguiram chegar a base de dados?
Te enviei um link por MP
Existe alguma ferramenta online que checa se meu site está seguro conta o sql injection?
Existem várias, como a sqlmap.
SQLmap .....
Maravilhosa essa ferramenta. Havendo vulnerabilidade você consegue fazer até mesmo o dump das tabelas.
Péssimo que tenha que baixar o python
Querendo ou não, Python é requisito hoje em dia e muitos sistemas operacionais vêm com ele embutido.
Basta pesquisar como realizar ataques via SQL Injection.
WikiPédia:
Nada mais é do que colocar instruções SQL na URL mesmo.
Existem diversos tutoriais na internet para fazer isso, não vou postar nenhum link externo porque não sei se esta dentro das regras.