SOL

Posted by chavesfop | Microsoft, Programação | Monday 16 November 2009 07:49
Microsoft SOL

Microsoft SOL

O que é ?

Programa global da Microsoft dedicado a acelerar o sucesso das pequenas empresas de software, oferecendo os recursos essenciais para o seu rápido desenvolvimento.

Benefícios ?

Disponibiliza até 25 licenças para:

  • Softwares e Aplicativos
  • Sistemas Operacionais
  • Ferramentas e Recursos
  • Ferramentas para Desenvolvedores
  • Ferramentas para Designers
  • Microsoft Dynamics
  • Servidores

Quem pode participar?

  • Ser empresa privada
  • Atuar no desenvolvimento de produtos ou serviços baseados em software, que seja peça central do negocio atual ou pretendido
  • Ter até 3 anos de atuação no mercado
  • Possuir faturamento anual inferior a 1.2 Milhão
  • Share/Bookmark

SQL Injection, como prevenir falhas de segurança em PHP / MySQL

Posted by chavesfop | Artigo, Hacking, Programação | Tuesday 7 July 2009 11:44

O QUE É SQL INJECTION ?

A técnica de injetar um código malicioso em um trecho de código de tratamento SQL.
A maioria das tentativas de SQL Injection irão ser realizadas em um input form, de seu código html, mas também podem ser manipuladas atraves das urls de seu site.

O comando mais básico de SQL Injection é parecido com este:

	Variável' or 1=1--

Vamos supor agora que temos um form de login, e que ele irá receber esta variável na forma em que foi escrita, sem nenhum tratamento.

Portanto, o código SQL que seria executado ficaria assim:

SELECT * FROM users WHERE username = 'Variável' or 1=1--'

Viu como o código serve como uma luva no nosso SQL Injection :D ? O resultado irá nos dar acesso a um usuário, levando em conta que retornara verdadeiro, porque ? porque 1=1.

E o ‘–’ ? Isto serve para dizer ao SQL que ele irá ignorar qualquer outro comando SQL que foi colocado no final, portanto isso ira garantir que nenhum outro código SQL feito na programação interfira em nosso SQL Injection.

Algumas outras sintaxes comuns de SQL Injection são:

    ') or ('1'='1
    "or "1"="1
    ' or '1'='1
    Or 1=1--
    " or 1=1--
    ' or 1=1--

SQL INJECTION, ATACANDO ATRAVÉS DE URLS:

Você sabia que é possivel fazer um ataque de SQL Injection através de URLs ? E isso com certeza é mais perigoso. Geralmente quando utilizamos PHP + SQL, nossas urls ficam no formato:

http://YourWebsite.com/login.php?id=2

e adicionando o código sql ao final da url poderia ficar assim:

http://YourWebsite.com/login.php?id=2‘; DROP TABLE login; #

o caracter # é que nem o — que utilizamos anteriormente…

TÉCNICAS DE PREVENÇÃO DE SQL INJECTION

Editando o tamanho das nossas forms:
Isto apenas irá dar um trabalho a mais ao atacante, neste caso ele teria que refazer os formulários, removendo o tamanho, levando em consideração que os forms são feitos em html puro, portanto qualquer um pode ver seu código…

Validação do tipo de dado:
Uma outra boa idéia é fazer a verificação de dados, quando são digitados na form, portanto, se houver caracteres estranhos, como ‘, ; ou até mesmo um #, já pode acusar erro e não executar o código SQL :D

Privilégios de usuários:
Uma técnica que deve ser praticada também é de nunca acessar o banco de dados como root, e sim como um usuário que tenha certos privilégios, por exemplo, para pesquisas podemos fazer um usuário que seja apenas leitura, assim quando entramos com dados na form, mesmo que seja executado um comando sql malicioso, o usuário ira apenas poder ler dados, impedindo-o de inserir ou deletar registros.

A Verdadeira solução:
Utiliza-se a função ‘mysql_real_scape_string();’, veja como ele funciona:

 $name = "John";
    $name = mysql_real_escape_string($name);
    $SQL = "SELECT * FROM users WHERE username = '$name'";

portanto, quando um alguém mal intencionado tenta executar o SQL Injection, com esta função ele ficaria da seguinte forma:

    $malcious_input = "' OR 1'";
    // Não se assuste!!
    // Com o uso de mysql_real_escape_string()
    // o seguinte é retornado:
	\' OR 1\'

    // Veja como os contra barras escapam as aspas!
    // Agora usuários não podem colocar dados maliciosos...

CONCLUSÃO:
a função mysql_real_escape_string() – não tem um nome tão incrivelmente mágico, mas estes 24 caracteres são a bondade do SQL Injection, o que salva os programadores descuidados… agora, é só aplicar a teoria em seus projetos ;D

  • Share/Bookmark

Ferramenta do Alien(desenvolvedor do slackware)

Posted by demoncyber | Anuncio, Dicas, Linux, Programação, slackware | Tuesday 21 October 2008 22:45

Eis que estava navegando no blog do Alien Bob, quando me deparo com um post sobre uma ferramenta chamada AST para a criação de slackbuilds :) , bom achei muito louca além dela possuir todo os campos para gerar o slackbuild ela funciona na web, coloca flag para baixar o fonte caso não exista no seu slackbuild, basicamente faz tudo :D olhem testem e tirem suas conclusões

site do AST

Referências
Post no blog do Alien sobre AST

  • Share/Bookmark

Como instalar o zenmap de várias maneiras

Posted by demoncyber | Dicas, Linux, Programação, slackware | Wednesday 17 September 2008 23:49
Zen... Map...

Zen... Map...

Como instalar o zenmap de várias maneiras

Bom me empolguei em auxiliar um cara no fórum do slackware :) e fiz muitas formas de instalar o znmap no slackware :) . O mais interessante é o script que fiz que sincroniza com a ultima versão do znmap lançada, baixa compila e instala (la moda do gentoo)

Code: 
wget http://repository.slacky.eu/slackware-12.1/libraries/pysqlite/2.4.1/pysqlite-2.4.1-i486-1sl.tgz
wget http://repository.slacky.eu/slackware-12.1/database/sqlite/2.8.17/sqlite-2.8.17-i486-2sl.tgz
installpkg pysqlite-2.4.1-i486-1sl.tgz
installpkg sqlite-2.8.17-i486-2sl.tgz

ou

Code:
slapt-get install pysqlite

Pegando o pacote oficial da versão estável do slackware:

Code: 
wget http://packages.slackware.it/package.php?q=12.1/nmap-4.60-i486-3
installpkg nmap-4.60-i486-3

Utilizando gerenciador de pacote

Code:
slapt-get install nmap

Compilando o pacote

Code:
mkdir /tmp/nmap
cd /tmp/nmap
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/nmap.SlackBuild
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/nmap.png
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/nmap-4.60.tar.bz2
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/slack-desc
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/zenmap.desktop.gz
bash nmap.SlackBuild

Pegando o rpm da ultima versão e convertendo e instalando

Code:
wget http://nmap.org/dist/zenmap-4.76-1.noarch.rpm
rpm2tgz zenmap-4.76-1.noarch.rpm
instalplkng zenmap-4.76-1.noarch.tgz

Compilando o nmap com a ultima versão (4.76)

Para compilar e criar o pacote você deve alterar o nmap.Slackbuild em uma linha com a versão que você quer. A obviamente também baixando o arquivo com a versão que você quer do site

Altere o arquivo nmap.Slackbuild a linha que tem

Code:
VERSION=${PKGVERSION:-4.60}

para

Code:
VERSION=${PKGVERSION:-4.76}
Code: 
mkdir /tmp/nmap
cd /tmp/nmap
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/nmap.SlackBuild
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/nmap.png
wget http://nmap.org/dist/nmap-4.76.tar.bz2
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/slack-desc
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/zenmap.desktop.gz
bash nmap.SlackBuild

Criando script para sincronizar com a ultima versão do znmap direto no servidor
vamos lá fazer um script para ficar sincronizando com o servidor baixar e compilar a ultima versão. Fim não tem mais o que fazer eu acho hauuha )

Code:
wget http://nmap.org/dist/
NAME_VERSION_UPDATE=`grep "nmap.*\.tar\.bz" index.html | cut -f 6 -d '"' | tail -n 1 | sed "s/\.tar\.bz2//g"`
VERSION_UPDATE=`echo $NAME_VERSION_UPDATE | cut -f 2 -d -`
NAME_VERSION=`ls -w 1 /var/log/packages | grep nmap | sed "s/-i.*$//g"`
VERSION=`echo $NAME_VERSION | cut -f 2 -d -`

for i in `seq 2`
do
cmp1=`echo $VERSION_UPDATE | cut -f $i -d . `
cmp2=`echo $VERSION | cut -f $i -d . `

echo $VERSION_UPDATE
echo $VERSION

if(( $cmp1 > $cmp2 ));then
mkdir /tmp/nmap
cd /tmp/nmap
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/nmap.SlackBuild
sed "s/4.60/$VERSION_UPDATE/g" nmap.SlackBuild > nmap.SlackBuild2 && mv nmap.SlackBuild2 nmap.SlackBuild
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/nmap.png
wget http://nmap.org/dist/nmap-$VERSION_UPDATE.tar.bz2
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/slack-desc
wget ftp://ftp.slackware-brasil.com.br/slackware-12.1/source/n/nmap/zenmap.desktop.gz
bash nmap.SlackBuild
upgradepkg /tmp/nmap-$VERSION_UPDATE-i486-3.tgz
fi
done

Obs: achei a página do nmap muito bagunçada muito colorida )
Obs2: seria legal mudar o slackdesc )

Marco Carvalho de Oliveira

Colméia Grupo de Pesquisa em Software Livre

  • Share/Bookmark

Pesquisa em arquivos pdf de forma recursiva no Linux com Slackware

Posted by demoncyber | Dicas, Linux, Programação, slackware | Monday 15 September 2008 06:21
GREP-ME ? o0

GREP-ME ? o0

Certo dia um professor me procurou perguntando como ele poderia fazer uma busca recursiva em vários arquivos de pdf em várias pastas para saber se existia uma determinada expressão neles, utilizando shellscript e aí está a resposta.

Processo adotado:
- Converter arquivos pdf em texto
- Fazer a busca por expressão regular no arquivo com a expressão requisitada
- Escrever em um outro arquivo os documentos que contém a expressão procurada

Para converter um arquivo de pdf para texto devemos utilizar uma biblioteca de conversão e um programa chamado pdftotext tome cuidado para não trocar pdftext por pdftxt -.- sim eu vivo escrevendo trocado . Desde a versão 12 o slackware adotou como padrão a biblioteca Poppler desenvolvida por Derek Noonburg então para tanto é necessário checar se a você possui esta biblioteca instalada caso não você pode instalar baixando do link abaixo.

http://packages.slackware.it/package.php?q=12.0/poppler-0.6.2-i486-1_slack12.0

Lembrando que nas versões anteriores ao slackware 12 como a 11 o pacote que continham o programa xpdftotext era o xpdf-utils

Nota: caso você não utilize o slackware você pode procurar em sua ambiente pela mesma biblioteca

Estrutura do comando do xpdf

pdftotext [opções] <PDF-arquivo> [<texto-arquivo>]

Exemplo:

pdftotext teste.pdf /tmp/teste.txt

Pesquisa no texto

Para fazer a pesquisa em texto podemos utilizar o programa grep ( convenhamos qualquer distribuição linux possui D ), ele usa como base expressões regulares para busca como referência para aprendizado sobre expressões regulaes recomendo o livro do Aurélio Marinho Jargas segue o link:

http://guia-er.sourceforge.net/

Estrutura do comando do grep

grep [OPÇÃO]… PADRÃO [ARQUIVO]…

grep marco /tmp/teste.txt

Por fim segue o script que chamei de procura-recursiva:

——–

#!bin/bash

IFS=$’\n’

#seta o separador de comandos para quebra de linha isto é para resolver caso tenhamos a indesejável utilização de espaços nos nomes dos arquivos

MYTMP=/tmp/procura-recursiva/

# pasta utilizada pelo programa

rm -rf $MYTMP

mkdir $MYTMP

for files_pdf in `find -type f | grep “\.pdf$” | sed “s/\.//”`

do

LOC_FILE=`pwd`$files_pdf

# diretorio onde se encontra o arquivo seguido do seu nome

NAME_FILE=`basename $files_pdf`

# nome dp arquivo pdf analizado

FIND_FILE=$MYTMP$NAME_FILE.txt

# Arquivo temporário de pdf em forma de texto para ser utilizado na busca rescursiva

pdftotext $LOC_FILE $FIND_FILE

# Converte o arquivo pdf para um arquivo de texto para executar a busca

grep $1 $FIND_FILE >> /dev/null

# Procura no arquivo de texto e joga o resultado para o buraco negro

if [ $? = 0 ]

then

#verifica se a busca foi bem sucedida caso sim imprime que foi econtrada a palavra chave no arquivo

echo “Expressao encontrada no arquivo $NAME_FILE”;

fi

done

Para executar o script basta executar o comando:

bash procura-recursiva expressao

———

Lembrando que apesar deste artigo ser baseado para o Slackware e explicado como executar em outras distros, caso use este documento como referência colocar os créditos. Se perguntarem porque shell? resposta é por que não shell?

D espero que tenham gostado sugestões e críticas:

e-mail: demoncyber@gmail.com
marco@colmeia.udesc.br

Referência

http://www.dicas-l.com.br/dicas-l/20050226.php
http://thobias.org/doc/sosed.html
man find
http://packages.slackware.it/package.php?q=12.0/poppler-0.6.2-i486-1_slack12.0
http://guia-er.sourceforge.net/


Marco Carvalho de Oliveira
Certificate Linux Professional I – LPI
Colméia – Grupo de Pesquisa em Software Livre
Joinville – UDESC – Ciencia Da Computação

  • Share/Bookmark

Como verificar as conexões abertas no seu Linux de várias maneiras

Posted by demoncyber | Artigo, Dicas, Hacking, Linux, Programação | Monday 15 September 2008 05:56
CLICK-ME

NO CLICK-ME THIS TIME :/

Este artigo foi publicado no blog do Colméia , no fórum do slackbr e no vivaolinux :) e por fim público aqui

Como verificar as conexões abertas no seu Linux de várias maneiras

Estivemos com um problema em um projeto que precisava verificar se o serviço xdmcp estava aberto, porém ele não é um processo independente, ele fica interligado ao X, kdm, gdm, xdm, para tanto a solução mais cabível era procurar saber se a porta estava aberta na máquina.

Sim, talvez pudesse existir outras maneiras de resolver isso, mas esta se fez mais interessante. A clássica solução que me veio a cabeça foi usar o netstat, mas pensei em porque não ir mais a fundo e como resultado venho por este artigo mostrar algumas coisas que aprendi.

As formas que executei este processo foram:

  • Geek hacker ninja style form – procura no proc pelas conexões abertas (mais interessante e a que mais aprendi);
  • Status network – usa o comando de status de rede para listar;
  • Open Files – Procura baseado nos arquivos abertos o que está ligado a porta.

Geek hacker ninja style form

A forma mais baixo nível e estilosa =], vamos aos arquivos de kernel analisar suas saídas, está é a base utilizada por programas como o netstat, o qual converte os dados deste e mostra com uma saída personalizada. Foi publicado um artigo antes explicando sobre a conversão de bases, então não vou abordar este assunto aqui.

O arquivo em questão utilizado é o /proc/net/tcp.

Exemplo de /proc/net/tcp:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode

0: 9E00A8C0:D3FD E1D7BCCD:1F4A 01 00000000:0003163C 00:00000000 00000000  1000        0 383991 1 cb042500 102 12 4 2 100

1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 626508 1 c299db80 750 0 0 2 -1

Onde:

  • sl: O número de identificador da linha.
  • local_address: O endereço local e o número da porta do socket. O endereço local está codificado em little-endian em quatro seqüências de números em hexadecimal, isso significa que o byte mais importante é listado primeiro e você necessita fazer a inversão da ordem dos bytes para converter para o endereço de IP. O número da porta é um hexadecimal simples utilizado pelo programa.
  • rem_address – O endereço remoto e o número da porta do socket. O endereço local está codificado em little-endian em quatro seqüências de números em hexadecimal, isso significa que o byte mais importante é listado primeiro e você necessita fazer a inversão da ordem dos bytes para converter para o endereço de IP. O número da porta é um hexadecimal simples.
  • st: Status do socket (depois de muita busca encontrei onde estava o padrão de código daqui e o porque do valor ficar com 0A – segue tabela de referência no final).
  • tx_queue rx_queue: O tamanho de transmissão e recebimento das filas de pacotes.
  • tr tm->when: tr é o campo que indica se o medidor de tempo está ativo para este socket. Um valor zero indica que o medidor de tempo não está ativo. O tm->when indica tempo que o sock está sendo utilizado em jiffies (usado basicamente para debug).
  • retrnsmt: Campo de informação interna do socket do kernel (usado basicamente para debug).
  • uid: O uid do usuário dono da conexão.
  • time-out: Campo de informação interna do socket do kernel (usado basicamente para debug).
  • inode: Um número encriptado de identificação do socket para o sistema de arquivos do Linux (não encontrei qual é a criptografia utilizada aqui).

Achei a representação padrão do cat do arquivo /proc/net/tcp muito extensa, então refiz ela na horizontal para melhor explicar o exemplo acima e traduzi alguns dados:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode

0: 9E00A8C0:D3FD E1D7BCCD:1F4A 01 00000000:0003163C 00:00000000 00000000  1000        0 383991 1 cb042500 102 12 4 2 100

1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 626508 1 c299db80 750 0 0 2 -1

sl : 0 – linha indicadora da primeira conexão

local_address: 9E00A8C0:D3FD – convertendo fica 192.168.0.158:151775

rem_address: E1D7BCCD:1F4A – convertendo fica 205.188.215.225:8010

st: 01 – TCP ESTABELISHED – conexão estabelecida

tx_queue rx_queue: 00000000:0003163C – fila de dados transmitidos

tm->when retrnsmt: 00:00000000 00000000 – dados utilizados para debug

uid: 1000 – id do usuário dono da conexão

timeout: 0 – dado utilizado para debug

inode: 383991 1 cb042500 102 12 4 2 100 – identificador criptografado

sl : 1 – linha indicadora da primeira conexão

local_address: 00000000:0016 – convertendo fica localhost:22

rem_address: 00000000:0000 – não tem ninguém conectado

st: 0A – TCP_LISTEN – escutando conexão

tx_queue rx_queue: 00000000:0003163C – fila de dados transmitida

tm->when retrnsmt: 00:00000000 00000000 – dados utilizados para debug

uid: 1000 – id do usuário dono da conexão

timeout: 0 – dado utilizado para debug

inode: 383991 1 cb042500 102 12 4 2 100 – identificador criptografado

Status network

Podemos ver as conexões abertas através do comando netstat. O mesmo é um programa de estatísticas de rede utilizado amplamente para este fim. Não tem muitos segredos e as informações que ele mostra são muito legíveis. Alguém percebeu a similaridade com um outro arquivo no modo que as informações aparecem? :)

# netstat -tl – lista as conexões abertas de tcp em modo de escuta

# netstat -t – lista as conexões tcp estabelecidas

# netstat -p – lista os programas que estão usando a conexão

# netstat –numeric-ports – não converte o número da porta para ser listado

# netstat –numeric-hosts – não converte o número de ip para nome do host

Comando que resolveu meu problema:

# netstat -t -l -p –numeric-ports

Open Files

Vendo as conexões abertas através do comando lsof. O comando lsof lista os arquivos abertos, através disto vamos procurar o arquivo aberto relacionado às portas tcp.

Obs.: Ele pode pegar muitas informações interessantes sobre os arquivos abertos, mas não é escopo deste artigo. :)

Sintaxe: lsof -i protocolo

Exemplo:

# lsof -i tcp

Tabela de dados para o status do socket – versão do kernel 2.6.21.5 Slackware Linux 12

st status socket values
significado valor
TCP_ESTABLISHED 01
TCP_SYN_SENT 02
TCP_SYN_RECV 03
TCP_FIN_WAIT1 04
TCP_FIN_WAIT2 05
TCP_TIME_WAIT 06
TCP_CLOSE 07
TCP_CLOSE_WAIT 08
TCP_LAST_ACK 09
TCP_LISTEN 0A
TCP_CLOSING 0B
TCP_MAX_STATES 0C

Ambiente de teste

  • Slackware 12.0
  • kernel 2.6.21.5

Conclusão

Estas foram apenas algumas maneiras, devem ter mais. Espero que tenham gostado e que algum dia isto seja útil a alguém =], bom para mim foi um grande aprendizado.

(Desculpe qualquer erro de português :X)

Definições

jiffy – medida utilizada para representar o uso de uma tarefa em chamadas de interrupção no processador (medida em um Linux com kernel 2.6.13 em um Intel 386 é de 4 ms ou 1/250 avos de um segundo)

Referências

  • Share/Bookmark

Melhor artigo de 2007

Posted by demoncyber | Anuncio, Dicas, Programação | Monday 15 September 2008 05:26
CLICK-ME

CLICK-ME

Estou começando a aprender Ruby, e estou me aventurando no grupo brasileiro dele e cada vez mais estou encontrando artigos de ótima qualidade no site. Segue este que posso dizer muito feliz que é um dos melhores que já vi, e acho que ganhou o prêmio meu de melhor artigo lido no ano 2007

http://www.rubyonbr.org/articles/2007/04/14/acampamento-de-curiosos/

  • Share/Bookmark

Script para pegar os links de uma página

Posted by demoncyber | Programação, slackware | Monday 15 September 2008 04:49

Click-me

Script de quando ajudei um português de Portugal o Telmo a fazer um script depois inclusive trocamos umas idéias pelo msn :)

Script

#!bin/bash
###### Get links in one site
###### Produce by Demoncyber to Slackbr forum and telmo_lopes
###### GUS-SC - Grupo de Usuário de Slackware de Santa Catarina
###### Autor: Marco Carvalho de Oliveira
###### Data:11/11/07
###### Copyright GPL

# Para usar o script coloque como primeiro parametro a página que você quer retirar os links, lembrando que algumas páginas barram o cabeçalho do wget entao em ultimas instancias baixe manualmente e use como parametro.
# Exemplo: get_links teste.html

PAGE=”/tmp/page.html”
NEWPAGE=”/tmp/page_links.html”

wget $1 -O $PAGE
#baixa a página da internet

IFS=$’ \t\n’
LINKS=`grep “href” $PAGE | sed ’s/^.*href=”//’ | sed ’s/”.*$//’ | grep -v ^#`
# retira os links

for links in $LINKS
do
echo “<a href=\”$links\”>$links</a><p>” >> $NEWPAGE ;
done
# monta a pagina

  • Share/Bookmark
Get Adobe Flash playerPlugin by wpburn.com wordpress themes