Archive for February 2008

 
 

Netcat - O canivete suíço das redes

O netcat é uma ferramenta de rede open source bastante útil. O seu principal propósito é “ler” e “escrever” dados em ligações TCP ou UDP. No entanto com esta simples funcionalidade é possível obter inúmeras utilidades.

Neste post não vou analisar ao pormenor o netcat, mas sim mostrar o que mais relevante se poderá fazer com o mesmo. Para começar, o netcat pode ser um port scanner. Para fazer o scanning de portos abertos basta usar com os seguintes argumentos:

nc -v -w2 -z 127.0.0.1 1-1024

Com este comando podemos fazer um port scan ao localhost (127.0.0.1). O argumento -v indica que o netcat deverá explicitar todas as acções que se encontra a executar (verbose mode). O -w indica o número de segundos que deverá esperar até obter resposta, caso não obtenha irá ser assumido que o porto não tem nenhum serviço à escuta de ligações. O -z indica que o netcat não deverá enviar quaisquer dados para o porto, por motivos óbvios. Segue-se o endereço ip onde é necessário fazer o scan e depois segue-se o intervalo das portas a scanear.

O netcat também pode ser usado como um backdoor. Esta técnica é bastante utilizada por invasores de sistemas baseados em Unix de modo a poderem garantir acesso futuro às máquinas. Para criarem um backdoor basta chamarem o netcat com os seguintes argumentos:

nc -l -p 5000 -e /bin/sh

O -l indica o netcat para ficar à espera de ligações (listen mode). O -p especifica o número da porta, neste caso 5000. E o -e é o argumento mais importante e especifica o programa que deverá ser executado após ligação com sucesso, neste caso uma shell.

Para estabelecer uma ligação a uma máquina que corre o comando em cima mostrado bastaria usar igualmente o netcat do seguinte modo:

nc -v <endereço ip> 5000

Aqui o comando é mais mais simples, apenas se indica o verbose mode, o IP da máquina a ligar e o porto onde é possível estabelecer a ligação.

Como podem ver este simples programa tem inúmeras utilidades, e eu apenas mostrei 3 delas. Para mais informações no uso desta poderosa ferramenta consultem a homepage do netcat.

YouTube banido no Paquistão

Alguém sabe explicar como é que isto é possível acontecer? O Paquistão ordenou a todos os seus ISPs que o YouTube fosse banido. Até aqui tudo bem, who cares. Mas depois disto, utilizadores de todo o mundo ficaram sem conseguir aceder ao site durante cerca de duas horas…

Aqui fica o link para a notícia completa:
http://news.bbc.co.uk/1/hi/technology/7262071.stm

Tempo de execução máximo de um script PHP

Recentemente criei um script PHP que executava um processamento de dados intensivo. Ao correr esse script o processamento parava incompleto e obtia um erro do PHP:

“Fatal error: Maximum execution time of 30 seconds exceeded in /localhost/script.php”

Isto é um mecanismo de segurança do PHP. Por omissão limita a 30 segundos o tempo de execução de um script. Isto pode ser útil na maioria dos casos, mas neste específico não interessa pois fico com o processamento incompleto, tornando o inútil o script.

Para resolver este problema, o PHP tem uma função que se coloca no script desejado e permite definir o tempo limite para este executar:

<?php set_time_limit(0) ?>

Esta função recebe o parâmetro do tempo limite em segundos. Se for 0 é considerado sem limite. E deste modo resolve-se facilmente o problema que encontrei. Convém colocar essa função logo antes do pedaço de código que efectua o processamento intenso e depois desse código voltar a chamar a função com o valor 30 para ficar o restante código do script protegido contra longas execuções imprevistas.

Usar VNC de modo mais seguro

VNC (Virtual Network Computing) é um protocolo criado para se poder aceder remotamente a um computador e utilizar a sua interface gráfica como se estivéssemos a utilizar esse mesmo computador.

Existem inúmeras razões para não usarem VNC principalmente se for extendido a acesso exterior. Mas se mesmo assim os motivos pelo qual precisam são mais fortes aqui fica a dica.

O VNC não utiliza comunicações cifradas pelo que todas as teclas premidas e outras informações são enviadas pela rede em texto legível. Algo que não é de todo do nosso interesse se estivermos numa rede onde não haja confiança. O truque para colmatar esta falha do protocolo é criar um túnel SSH desde o porto do VNC no computador remoto até um porto no computador local, indicando depois ao cliente VNC para se ligar ao localhost nesse porto e não ao host remoto.

Para criar esse túnel apenas precisamos de estabelecer uma ligação SSH no terminal do seguinte modo:

ssh -L 5901:localhost:5900 username@x.x.x.x -N

O parâmetro -L faz o túnel, no primeiro extremo coloca-se a porta computador local onde a ligação começa, pode ser qualquer uma porta acima de 1024, a seguir leva o endereço local (localhost) e depois o segundo extremo será o porto do serviço VNC na máquina remota. Os parâmetros seguintes são os normais para ligação SSH, o username e endereço ou nome do servidor. O último parâmetro -N serve para o SSH não abrir nenhum porto no computador remoto (dado que não vamos usar nenhuma shell). Se quiserem também que o SSH execute em background para não ocupar o terminal podem acrescentar o parâmetro -f. Se utilizam um porto diferente para o serviço SSH na máquina remota (o que eu acho obrigatório, como já falei num post anterior) terão de indicar isso com o parâmetro -p.

Agora basta usarem o vosso cliente VNC favorito e ligarem-se não à máquina remota, mas sim ao localhost no porto que definiram, em linux seria:

vncviewer localhost::5901

Num outro cliente gráfico teriam de colocar o endereço localhost ou 127.0.0.1 e no display: 1. Não é zero porque o nosso túnel agora mapeia o display 0 da máquina remota para o display 1 na nossa máquina local.

1º Encontro PTJUG

 

ptjug logo

No dia 6 de Março às 18:30 vai haver o 1º Encontro PTJUG (Grupo Português de Utilizadores Java), o evento vai ocorrer no Hotel Principe Lisboa e está aberto a quem quiser participar. Para saberem mais detalhes vejam o post que publiquei no Dev-PT sobre o evento.

Implicâncias

Sou só eu a achar tremendamente irritante aquele assobio de uma das músicas do David Fonseca? Está a tornar-se uma praga, ouve-se em todo o lado…

Nada como purificar os ouvidos com este som que descobri recentemente! E eu que até nem fui muito de cenas power metal…

Solaris has landed!

Solaris Developer Edition DVD

Direitinho de San Francisco até aqui, chegou o DVD do Solaris Developer Edition, sem quaisquer custos. Agora resta arranjar um tempinho para o testar numa virtual machine ou até mesmo no velhinho Pentium 3. É bastante provável que por VM não consiga pois já testei com uma versão mais antiga do Solaris e não passava do primeiro boot menu.

Eu sei que a qualidade da foto não é das melhores, mas o telémovel e fraca iluminação ambiente não ajudam muito :P

Dev-PT - Desenvolvimento de Software em Português

Hoje foi o início oficial do blog Dev-PT, um projecto onde eu estou envolvido juntamente com uns colegas. Este é um blog de programadores para programadores e tem como objectivo dar a conhecer e também nós aprendermos um pouco mais sobre os temas relacionados com a Engenharia de Software, destacando programação em variadas linguagens, técnicas, padrões, boas práticas, etc.

Para já só se encontra disponível o blog que podem encontrar em blog.dev-pt.net, mas futuramente irá ser criado um site principal e caso se venha a justificar, um fórum.

Se o tema for do vosso interesse, passem por lá, o vosso feedback é bem-vindo.

Webkit

Webkit Logo

Gostavam de experimentar um browser ultra rápido para Windows ou Mac OS que por momentos pusesse em causa toda a vossa utilização diária do Firefox?

Experimentem o Webkit e vão gostar. Quanto a provas da velocidade, caso não notem, podem sempre comprovar fazendo o teste de Javascript. Aproveitem e façam-no também com os outros browsers que costumam usar, para fazerem a comparação dos tempos :)

Nota: O Webkit é o motor open source utilizado pelo browser Safari da Apple, logo em Windows para testarem o Webkit necessitam do Safari instalado.

Problemas de servidor

Durante o dia de ontem e hoje o blog esteve com algumas dificuldades no acesso, tendo mesmo chegado a estar indisponível durantes algumas alturas devido a problemas no servidor de alojamento. Aparentemente já está tudo resolvido :)