Como configurar uma rede VPN no Android

As redes privadas virtuais podem ser usadas por qualquer pessoas que deseja obter um nível maior de privacidade.
Outra aplicação deste recurso é para pessoas que desejam “enganar” outros softwares de navegação, presentes em seu smartphone, fazendo-os pensar que você está em outro país — e poder filmes que não estão disponíveis na sua localidade atual, baixar apps que não estão disponíveis para o seu país, adquirir álbuns de cantores só estão disponíveis em outras localidades etc.
Em smartphones corporativos as redes privadas virtuais ou VPNs (Virtual Private Networks) são usadas para proporcionar níveis mais altos de privacidade e segurança a seus funcionários.
Se você vai usar algum hotspot ou conexão WiFi pública, pode lançar mão deste recurso para reduzir o risco de ter seus dados lidos por pessoas ou softwares não autorizados.
Neste texto, vou mostrar a configuração de uma rede VPN em um smartphone Android 6.0 Marshmallow — mas os princípios e os menus são quase os mesmos nas outras versões.
A configuração de exemplo, fará uso do protocolo popular PPTP ou Point-to-Point Tunneling Protocol — em português, protocolo de tunelamento ponto a ponto, que é muito fácil de ser aplicado.

O protocolo PPTP é tido como inseguro, porém bastante rápido.

Como configurar a VPN PPTP no smartphone ou tablet Android

Comece por abrir o menu de configurações do seu aparelho e, na sessão Configurações de redes.
Toque na opção … Mais.
Android configurações de rede
No painel Mais, selecione a opção de configuração de VPN.
Android-Mais-opções-de-rede
Em seguida, toque no ícone + para incluir um novo perfil de VPN.
As configurações que seguem são muito simples e rápidas:

  1. Forneça um nome para a sua configuração de rede VPN.
    Note que você poderá ter várias configurações para escolher a mais adequada de acordo com a ocasião.
    Portanto, escolha um nome que te ajude a diferenciar ajustes deste perfil de configurações dos outros.
  2. Escolha o tipo de VPN PPTP.
  3. Forneça o endereço de um servidor VPN — o endereço pode ser dado na forma de um nome DNS ou um endereço IP comum.

Opções de rede VPN no Android
Agora que você já sabe como configurar, só falta procurar, Internet afora, servidores VPN PPTP gratuitos ou pagos para se conectar.
O site http://vpn-server.net/ oferece uma relação de serviços VPNs gratuitos — sugiro cadastrar vários no seu celular.
Divirta-se!

Comandos de terminal para Android

Na maioria dos sistemas operacionais, é comum o uso do terminal (ou console), permitir rodar comandos com mais flexibilidade e opções de execução, além de poder determinar uma sequencia de tarefas a ser executada, mandar a estória toda para os bastidores e ir fazer outra coisa.
O Android não é diferente. Com acesso root (privilégios administrativos) ao seu dispositivo, dá pra “fazer chover” no seu terminal.
Logo Android sobre um terminal
Se você não tiver um dispositivo rooteado, não há problema. A maioria dos procedimentos descritos neste texto irão funcionar — outros são voltados para aparelhos rooteados de desenvolvimento.
O que não funcionar, você pode pular. No caso de aplicar o rooting, futuramente no seu aparelho, você pode voltar aqui e tentar os outros comandos.
Leve em conta que foram testados em aparelhos rodando versões do Android entre a 2.3 e 4.2.
Certifique-se de ter instalado um emulador de terminal para Android, em seu sistema para poder executar todos os comandos.
Outro software que pode ser valioso, se usado junto com o terminal, é o Hacker’s Keyboard. Recomendo a sua instalação.
É preciso ter cuidados ao executar comandos no seu terminal Android, principalmente se seu aparelho for rooteado — ou você pode causar danos aos seus dados.
Os comandos proibidos para Linux, valem aqui também. Além disto, o uso de fork bombs pode ter consequências desastrosas no terminal.
Siga por sua própria conta e risco (como sempre) e se não souber o que está fazendo, não faça.


Use nossa página de busca para encontrar mais artigos sobre o Android

O comando ls no terminal do Android

Este é provavelmente o comando mais usado para quem deseja navegar pelo sistema de arquivos e explorar os vários diretórios (pastas) do dispositivo.
Ao tentar executar o comando ls no diretório /sbin (e em outros, que sejam protegidos) de um telefone não rooteado, você vai obter uma mensagem de erro, informando que você não tem permissão para ler o conteúdo daquele diretório:

ls /sbin
opendir failed. Permission denied

O comando ls sozinho, irá revelar o conteúdo do diretório atual. Experimente.
O comando pwd (print working directory), mostra o caminho completo do diretório em que você se encontra.
É um comando útil para evitar fazer o que não deve no lugar errado: 😉

cd
pwd
/data/data/jackpal.androidterm/app_HOME
...

Para ver conteúdo de diretórios protegidos, como o /sbin, você precisa “invocar os poderes do root”, ou seja, adquirir privilégios administrativos em relação ao seu sistema.
Para se tornar superusuário, use o comando su.
Só para lembrar, o comando su só pode ser invocado em aparelhos rooteados.
Note que, ao se tornar superusuário, o shell prompt muda de ‘$’ para ‘#’, para indicar que você está acessando o aparelho como root (e pode causar danos ao sistema, se não for cuidadoso).
Para sair do modo de superusuário ou do terminal, use o comando exit:

exit

Você tem um aparelho Samsung? Leia outros textos que abordam smartphones e tablets desta marca.

O Android Activity Manager

No terminal, este aplicativo responde pelo comando am (Android Activity Manager) — Gestor de Atividades do Android.
Se ele for dado, sem opção alguma, irá mostrar o texto de ajuda do programa.
Você pode usar aplicativo para terminar os programas que estão rodando em background:

am kill-all
java.lang.SecurityException: Permission Denial: killAllBackgroundProcesses() from pid=13511, uid=10152 requires android.permission.KILL_BACKGROUND_PROCESSES
        at android.os.Parcel.readException(Parcel.java:1425)
        at android.os.Parcel.readException(Parcel.java:1379)
        at android.app.ActivityManagerProxy.killAllBackgroundProcesses(ActivityManagerNative.java:3280)
        at com.android.commands.am.Am.runKillAll(Am.java:556)
        at com.android.commands.am.Am.run(Am.java:116)
        at com.android.commands.am.Am.main(Am.java:81)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at u0_a152@android:/data/data/jackpal.androidterm/app_HOME $com.android.internal.os.RuntimeInit.main(RuntimeInit.java:237)
        at dalvik.system.NativeStart.main(Native Method)

Obviamente, o comando só terá efeito naqueles processos sobre os quais você tiver privilégios de execução.

Os comandos Linux e UNIX no Android

Em princípio, os comandos UNIX e GNU/Linux básicos vão todos funcionar aqui (dentro daquelas limitações de que já falamos):

  • chmod
  • chown
  • date
  • rm, mv etc.

Há novos comandos, com funções específicas pro Android.
O comando dalvikvm é a máquina virtual dalvik, usada para rodar aplicações Android.
O comando df (disk free) pode ser usado para ver o espaço disponível dentro de um dispositivo de armazenamento.
Se for executado sozinho, vai mostrar todos:

df

Veja o meu resultado:

Filesystem             Size   Used   Free   Blksize
/dev                   402M   112K   401M   4096
/mnt/asec              402M  0.00K   402M   4096
/mnt/obb               402M  0.00K   402M   4096
/dev/shm               402M  0.00K   402M   4096
/system               1.15G  1011M   169M   4096
/modemfs              15.7M  4.34M  11.4M   4096
/cache                 826M  14.0M   812M   4096
/efs                  15.7M  4.53M  11.2M   4096
/preload               314M   106M   208M   4096
/data                 4.65G  2.44G  2.21G   4096
/mnt/.lfs: Function not implemented
/storage/sdcard0      4.55G  2.44G  2.11G   4096
/storage/extSdCard    14.8G   115M  14.7G   32768

Para obter informações específicas sobre o cartão de memória externo, basta citá-lo na linha de comando:

df /storage/extSdCard

segue o meu resultado…

Filesystem             Size   Used   Free   Blksize
/storage/extSdCard    14.8G   115M  14.7G   32768

O comando bootanimation pode trazer um resultado interessante (mas você possivelmente irá ter que dar um reset no aparelho, para sair deste aplicativo).
Para obter informações sobre processos em execução, use o comando ps.
Se achar que a lista é muito grande (provavelmente é), pode restringir a exibição aos processos em execução (running processes):

ps r

Este foi o meu resultado:

USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
radio     1670  1     12132  1964  ffffffff 00000000 S /system/bin/rild
system    2277  1678  474788 23892 ffffffff 00000000 S com.sec.android.app.twdvfs
u0_a139   3730  1678  503912 42364 ffffffff 00000000 S com.fitnesskeeper.runkeeper.pro
u0_a3     4225  1678  474564 27300 ffffffff 00000000 S com.sec.android.nearby.mediaserver

O vmstat exibe estatísticas da memória virtual do sistema. A linha, a seguir, exibe as estatísticas 5 vezes, num intervalo de um 1 segundo:

vmstat -n 5 -d 1

Se você não especificar qualquer parâmetro, o vmstat irá exibir (por padrão) as estatísticas da memória virtual a cada 1 segundo — até ser interrompido.
Se você estiver usando o Hacker’s Keyboard, será fácil parar o vmstat com o Ctrl+C.

Happy hacking! 😉

Altere o endereço de hardware com o MAC Changer

O macchanger é um programa utilitário próprio para exibir e manipular endereços físicos MAC das interfaces de rede presentes no seu sistema Linux.
Se você costuma realizar operações no endereço de hardware MAC de seu sistema usando o ifconfig ou editando o arquivo de configuração /etc/network/interfaces, precisa conhecer este pequeno programa — que é livre e licenciado sob a GPL 3.0v.
Com este aplicativo é mais fácil fazer alterações consistentes nas interfaces de rede no Linux.
Network lights

Como instalar e usar o MACChanger

Este post está sendo escrito e testado em uma máquina com o Trisquel GNU/Linux 7.0 instalado — uma distro baseada no Debian, tal como o Ubuntu, o Linux Mint etc.
Aqui, vou usar o apt-get para baixar e instalar o aplicativo:


sudo apt-get install macchanger

Para verificar o endereço físico da máquina, use a opção --show acompanhada da interface de rede que você deseja verificar:


macchanger --show eth0

Como você pode ver (abaixo) o valor atual (current) é o mesmo do permanente, gravado no firmware ou na ROM do dispositivo de acesso à rede:

Current MAC:   6c:ae:8b:04:da:48 (IBM Corporation)
Permanent MAC: 6c:ae:8b:04:da:48 (IBM Corporation)

Não será possível alterar o valor permanente, mas apenas o valor “atual” ou current.
Como as outras máquinas da rede só vão enxergar este valor, alterá-lo será o suficiente para nós.

Como alterar o endereço físico da interface de rede como MACChanger

Os primeiros bits do endereço MAC da sua interface de rede, são os que correspondem ao fabricante. No caso do meu exemplo, IBM Corporation.
Ao usar a opção --list, é possível ver a lista de bytes relacionados a fabricantes. Use o comando grep para filtrar apenas os que dizem respeito ao da sua placa:

macchanger --list | grep 6c:ae:8b

15416 - 6c:ae:8b - IBM Corporation

Uma outra forma de listar fabricantes é indicar parte de seu nome, assim:


macchanger --list=Lenovo

Este comando é sensível à caixa das letras.

Misc MACs:
Num    MAC        Vendor
---    ---        ------
1564 - 00:06:1b - Notebook Development Lab.  Lenovo Japan Ltd.
4835 - 00:12:fe - Lenovo Mobile Communication Technology Ltd.
10763 - 00:59:07 - LenovoEMC Products USA, LLC
13320 - 14:9f:e8 - Lenovo Mobile Communication Technology Ltd.
14691 - 50:3c:c4 - Lenovo Mobile Communication Technology Ltd.
15382 - 6c:5f:1c - Lenovo Mobile Communication Technology Ltd.
15965 - 80:cf:41 - Lenovo Mobile Communication Technology Ltd.
16548 - 98:ff:d0 - Lenovo Mobile Communication Technology Ltd.
17722 - c8:dd:c9 - Lenovo Mobile Communication Technology Ltd.
17747 - cc:07:e4 - Lenovo Mobile Communication Technology Ltd.
17965 - d4:22:3f - Lenovo Mobile Communication Technology Ltd.
18103 - d8:71:57 - Lenovo Mobile Communication Technology Ltd.
18569 - ec:89:f5 - Lenovo Mobile Communication Technology Ltd.

Wireless MACs:
Num    MAC        Vendor
---    ---        ------

Ou seja, quando os primeiros bytes de um endereço MAC forem “6c:ae:8b”, sabemos que o fabricante da interface de rede é “IBM Corporation”.
Isto significa que é possível a um administrador de redes ter políticas específicas para barrar, filtrar, monitorar, permitir acessos de determinados fabricantes de hardware?
Com certeza, sim.
Relação de fabricantes e vendedores de interfaces de rede
Para alterar aleatoriamente a identificação do fabricante e manter o restante do endereço inalterado, use a opção --another:


sudo macchanger --another eth0

Note que apenas os primeiros bytes do endereço (referentes ao fabricante) são alterados:

Current MAC:   6c:ae:8b:04:da:48 (IBM Corporation)
Permanent MAC: 6c:ae:8b:04:da:48 (IBM Corporation)
New MAC:       00:02:64:04:da:48 (AudioRamp.com)

A escolha do fabricante é aleatória. Mas a opção --another faz uma escolha fiel ao “tipo” do fabricante.
Se quiser alterar apenas a última parte do endereço, mantendo a identificação do fabricante, use --ending:


sudo macchanger --ending eth0


Current MAC:   00:02:64:04:da:48 (AudioRamp.com)
Permanent MAC: 6c:ae:8b:04:da:48 (IBM Corporation)
New MAC:       00:02:64:c1:06:6f (AudioRamp.com)

Para escolher aleatoriamente outra identificação de fabricante, de outro “tipo”, use a opção -A — o “A” maiúsculo indica uma escolha aleatória “mais forte”, se isto ajuda a memorizar.


sudo macchanger -A eth0

Current MAC:   00:02:64:c1:06:6f (AudioRamp.com)
Permanent MAC: 6c:ae:8b:04:da:48 (IBM Corporation)
New MAC:       00:0a:1d:c1:06:6f (Optical Communications Products Inc.)

Se quiser mudar completamente o endereço, use a opção --random.
Você pode combinar esta opção com --bia (burned-in address) para fazê-lo parecer com um endereço físico gravado no hardware.
Quando esta opção não é usada, o novo MAC mantém o bit local-administered intacto.
Para voltar atrás nas alterações e restaurar o endereço padrão, use --permanent.


sudo macchanger --permanent eth0


Current MAC:   00:0e:63:c1:06:6f (Lemke Diagnostics GmbH)
Permanent MAC: 6c:ae:8b:04:da:48 (IBM Corporation)
New MAC:       6c:ae:8b:04:da:48 (IBM Corporation)

Como fornecer seus próprios valores para compor o novo endereço MAC

Com a opção --mac, é possível fornecer livremente os novos valores para a sua interface de rede.
A sintaxe é essa: --mac=XX:XX:XX:XX:XX:XX.
Veja um exemplo:


sudo macchanger --mac=ec:3f:05:04:da:48 eth0


Current MAC:   ec:3f:05:04:da:48 (Institute 706, The Second Academy China Aerospace Science & Industry Corp)
Permanent MAC: 6c:ae:8b:04:da:48 (IBM Corporation)
New MAC:       00:00:0c:04:da:48 (CISCO SYSTEMS, INC.)

Se você obtiver alguma mensagem de erro, leia o post Como alterar permanentemente o endereço de hardware MAC.
Use o conhecimento com responsabilidade! 🙂

10 dicas para criar senhas à prova de hackers.

Vou enumerar as dicas que hackers e especialistas em segurança digital seguem para lidar com as próprias senhas. Você pode usar algumas delas e adaptar outras à sua realidade.

LEIA MAIS:

Conheça a regra “8 por 4” para criar senhas seguras e fáceis de memorizar.

Crie uma senha nova e única a cada cadastro novo

Site novo, cadastro novo… senha nova! E não vale criar sequencias do tipo minhasenha1, minhasenha2 etc. A senha tem que ser inteiramente diferente das anteriores.
vpn-secure-network1-150x150

Mude todas as suas senhas, em todas as suas contas, a cada 6 meses

É semelhante à regra para substituir sua escova de dentes.
Marque em um calendário as datas para trocar suas senhas. Ataques de força bruta podem levar algum tempo para se concretizar e permitir a invasão. Se no meio disto, o cracker se deparar com uma troca de senha programada por você, seu ataque será frustrado, ainda em andamento — o “coitado” vai ter que começar tudo zero.

Não anote suas senhas

De que adianta evitar uma senha fraca e cometer o erro de deixá-la anotada em uma folha de papel?
Há estudos mostrando o quanto é comum as pessoas deixarem suas senhas anotadas em algum lugar perto de seus computadores. Saiba que os invasores já leram todos estes estudos.
Gerenciadores de senhas são a solução ideal para quem precisa lembrar suas senhas.

Não compartilhe

Senhas não são compartilháveis — Lembra da escova de dentes? Pois é.
Há outras formas de se compartilhar conteúdos que sejam do interesse de outras pessoas, sem a necessidade de entregar-lhes as suas senhas.
O problema aqui, geralmente, não é confiar ou não na sua esposa ou no seu marido. O problema está no fato de que você vai ter que dizer a senha em voz alta ou escrevê-la em um papelzinho para passar pra outra pessoa. Acredite nos especialistas: isto não dá certo.

Sites diferentes, senhas diferentes

As pessoas me odeiam quando eu digo isto…
Recentemente, um importante fórum na Internet teve sua segurança quebrada. Os invasores tiveram acesso a todas as senhas de seus usuários. Este incidente deixou vulneráveis todos os que utilizavam aquela mesma senha em outros sites, webmail, redes sociais, blogs etc.
Evite também usar a mesma senha para as contas de webmail, outra senha única para todas as redes sociais etc.

Alguém por perto? Cuidado ao digitar a sua senha

Tenha o cuidado de não digitar a sua senha quando alguém está olhando por cima do seu ombro. Se você usa apenas um dedo para digitar ou é lento, é muito fácil descobrir sua senha desta forma.

Não envie senhas por email

Sites de bancos ou que forneçam serviços online nunca vão te pedir seu nome de usuário ou senha. Um invasor pode se fazer passar por suporte técnico e te pedir informações deste tipo. Não caia nessa.

Troque senhas comprometidas

Se a segurança de algum site, no qual você tinha cadastro, foi comprometida, troque sua senha imediatamente. Se desconfiou que alguém pode ter descoberto sua senha, troque-a.

A opção de lembrar senha no navegador

Embora seja uma grande comodidade, esta solução apresenta graves riscos.
Estes riscos podem ser minimizados com algumas atitudes:

  • Se o seu navegador tiver a opção de perfil, use-a
  • Se o seu sistema operacional tiver a opção de perfil, use-a. Mesmo em computadores compartilhados por vários membros da família, o ideal é que cada um faça seus acessos dentro de seu próprio perfil
  • Se o computador usado não te pertence, lembrar a senha no navegador é uma péssima ideia

Evite digitar senhas em computadores que não te pertencem

Invasores podem instalar key loggers para capturar as senhas digitadas na máquina. Portanto, evite este tipo de situação.
Algumas pessoas instalam seu próprio sistema em um pendrive para fazer uso dele em cyber cafes e outros computadores públicos.

Saiba mais…

Previna-se de ataques SQL Injection

Este artigo explica o básico do SQL Injection (Injeção de SQL), com um exemplo que mostra como ele se dá e provê métodos de prevenção a estes ataques.
Tal como o nome sugere, este ataque pode ser feito através de queries SQL. Muitos programadores não têm idéia de como um agressor pode usar uma query. Basicamente, um SQL Injection pode ser feito em uma aplicação web que não efetue a filtragem apropriada dos dados fornecidos pelos usuários, confiando em tudo que ele digita – o que pode ser uma requisição SQL não prevista pelo idealizador do software.
Os exemplos mencionados aqui foram testados com os seguintes softwares:

  • PHP 5.3.3-7
  • Apache/2.2.16
  • Postgresql 8.4

Ainda que você não esteja fazendo uso de qualquer um deles (claro que MySQL está incluído), os conceitos se aplicam a qualquer situação que envolva um website com formulários a ser preenchidos pelos visitantes e que dão acesso ao banco de dados.

Um exemplo de SQL Injection

Vamos começar pelo fato de que muitas aplicações web têm uma página de autenticação. Vamos usar o código seguinte, como um exemplo:

index.html

<html>
<head><title>SQL Injection Demo</title></head>
<body onload="document.getElementById('user_name').focus();" >
<form name="login_form" id="login_form" method="post" action="login.php">
<table border=0 align="center" >
<tr>
<td colspan=5 align="center" ><font face="Century Schoolbook L" > Login Page </font></td>
</tr>
<tr>
<td> User Name:</td><td> <input type="text" size="13" id="user_name" name="user_name" value=""></td>
</tr>
<tr>
<td> Password: </td><td> <input type="password" size="13" id="pass_word" name="pass_word" value=""></td>
</tr>
<tr>
<td colspan=2 align="center"><input type="submit" value="Login"> </div></td>
</tr>
</table>
</form>
</body>
</html>

Ao fornecer o nome de usuário (user_name) e senha (pass_word), seus valores são postados em login.php via HTTP_POST.

login.php

<?php
$Host= '192.168.1.8';
$Dbname= 'john';
$User= 'john';
$Password= 'xxx';
$Schema = 'test';

$Conection_string="host=$Host dbname=$Dbname user=$User password=$Password";

/* Conecta ao banco de dados e pede uma nova conexão*/
$Connect=pg_connect($Conection_string,$PGSQL_CONNECT_FORCE_NEW);

/* Erro ao verificar a string de conexao */
if (!$Connect) {
echo "Falha ao conectar ao banco de dados";
exit;
}

$query="SELECT * from $Schema.users where user_name='".$_POST['user_name']."' and password='".$_POST['pass_word']."';";

$result=pg_query($Connect,$query);
$rows = pg_num_rows($result);
if ($rows) {
echo "Sucesso ao logar!";
}
else {
echo "Não foi possivel logar.";
}
?>

Pois bem. A linha 19, no código acima, é vulnerável a uma ataque (me refiro à linha que começa com $query="SELECT *). Trata-se de uma requisição cujo objetivo é encontrar no banco de dados o nome e a senha fornecidos pelo usuário. Tudo vai funcionar bem se forem fornecidos dados corretos e válidos. Contudo, um usuário malicioso pode fornecer outro tipo de informação ao sistema.
No campo nome do usuário, em vez de digitar o que se espera, ele pode digitar o seguinte:

' or 1=1;--

e deixar o campo senha em branco.
Ao clicar em submit, as informações serão postadas em login.php, onde a requisição será vista como:

SELECT * from test.members where user_name='' or '=';--' and password='';

O que se vê acima é uma requisição SQL plenamente válida. No postgresql o -- é um indicador de início de um comentário, ou seja, tudo o que vier depois deste caractere será ignorado. O que será executado é o seguinte:

select * from test.members where user_name='' or '=';

o que será verdadeiro (true) e retornará a mensagem “Login Success”.
Caso o agressor conheça os nomes das tabelas contidas no banco de dados, ele poderá apagar as tabelas com a seguinte entrada, no campo nome do usuário:

';drop table test.lop;--

Alguns scripts de autenticação tendem a agir da seguinte forma:

  • Guardar as senhas no formato md5.
  • Selecionar primeiro o nome,senha no banco de dados, com base no que foi fornecido pelo digitador.
  • Formatar em md5 a senha fornecida e compará-la com a senha no banco.
  • caso sejam iguais, a autenticação segue adiante.

Vejamos como contornar isto, no caso de a query ser vulnerável a um SQL-Injection.

login.php

<?php
$Host= '192.168.1.8';
$Dbname= 'john';
$User= 'john';
$Password= 'xxx';
$Schema = 'test';

$Conection_string="host=$Host dbname=$Dbname user=$User password=$Password";

/* Conecta ao banco de dados e pede nova conexão */
$Connect=pg_connect($Conection_string,$PGSQL_CONNECT_FORCE_NEW);

/* Erro ao verificar a string de conexao */
if (!$Connect) {
echo "Falha ao conectar ao banco de dados";
exit;
}

$query="SELECT * from $Schema.users where user_name='".$_POST['user_name']."' and password='".$_POST['pass_word']."';";

$result=pg_query($Connect,$query);
$rows = pg_num_rows($result);
if ($rows) {
echo "Sucesso ao logar!";
}
else {
echo "Erro ao logar.";
}
?>

Agora digite o seguinte no campo nome de usuário:

' UNION ALL SELECT 'laksh','202cb962ac59075b964b07152d234b70

em seguida, entre “123” no campo senha e clique em submit, sabendo que md5(123) é igual a 202cb962ac59075b964b07152d234b70.
Agora, a query vai se expandir para

SELECT user_name,password from test.members where user_name='' UNION ALL SELECT 'laksh','202cb962ac59075b964b07152d234b70';

e quando for executada, o banco de dados vai retornar ‘laksh‘ como nome de usuário e ‘202cb962ac59075b964b07152d234b70‘ como senha. E, uma vez que postamos “123”, no campo pass_word, o strcmp vai retornar 0 e a autenticação ocorrerá com sucesso.
O que se vê, acima, são algumas das inúmeras possibilidades de ataques SQL Injection. Seguem, abaixo, algumas coisas que podem ser feitas para reduzir as possibilidades de ataques:

  • Sempre verificar o que é digitado (nunca confie no que o usuário vai digitar);
  • Se você espera que se digite um nome de usuário em um determinado campo, certifique-se de que ele contenha apenas caracteres alfanuméricos;
  • Elimine ou filtre caracteres especiais e entradas possivelmente maliciosas dos usuários;
  • Use expressões preparadas para executar as requisições;
  • Não permita que várias requisições sejam feitas em uma única expressão;
  • Não deixe vazar informações sobre o banco de dados através das mensagens de erro, etc…

Esta é uma tradução livre do artigo original, de Lakshmanah Ganapathy, que pode ser encontrado http://miud.in/1aYd