Hacking | Desenvolvimento Código Aberto
Arquivo da categoria 'Hacking'
Como Capturar Senhas de Sites no Firefox – (Firefox Password Recovery) – Linux – Python
Publicado: 20 de agosto de 2014 em Hacking, Python
A Mozilla Foundation é uma fundação sem fins lucrativos que mantém todo o software e projetos Open Source da linha Mozilla, como Firefox, Thunderbird e complementos para os mesmo. Também é responsável por produzir documentação relacionada à internet e promover padrões de produção de conteúdo digital.
O Mozilla Firefox é um navegador livre e multi-plataforma desenvolvido pela Mozilla Foundation com ajuda de centenas de colaboradores. A intenção da fundação é desenvolver um navegador leve, seguro, intuitivo e altamente extensível.
Entre os navegadores mais utilizados da atualidade o Firefox é de longe o mais seguro, a empresa Mozilla desenvolveu um conjunto de bibliotecas de código aberto chamado de Serviços de Segurança de Rede, ou NSS, para fornecer aos desenvolvedores a capacidade de criar aplicativos que atendem a uma ampla variedade de padrões de segurança. O Firefox faz uso de uma API nesta biblioteca chamado "Secret Decoder Ring", ou SDR, para facilitar a criptografia de credenciais da conta.
Estes valores são criptografados, e então, armazenados em um banco de dados SQLite chamado signons.sqlite codificado em base64. Tanto o signons.sqlite e key3.db fazem parte do contexto do usuário local. A chave SDR é guardada em um recipiente chamado de PKCS #11, que é um Token encapsulado dentro de um Slot do mesmo tipo.
Como Descriptografar as senhas do Firefox
A poderosa linguagem de programação Python permite que você faça coisas mirabolantes de um modo simples no qual antes era possível apenas com complexos códigos em C. Utilize os links abaixo para saber como o programa funciona e conceitos sobre o qual utilizamos para capturar e exibir as senhas do Firefox:
DA – Firefox Password Recovery – Linux
Modulos Externos Python: Download WxPython ou use: apt–get install python–wxgtk2.8
Detalhes Sobre a Criptografia: Network Security Services
Tipo de criptografia: PK11SDR_Encrypt
Detalhes Sobre o Armazenamento de credenciais Firefox: SQLLite
Local físico de armazenamento das credenciais: ~/.mozilla/firefox
Nome do banco de dados: key3.db, signongs.sqlite, cert8.db
A linguagem de programação Python é multi-plataforma, então poderíamos supor que este programa funcionaria em Windows ou Mac sem nenhum problema correto?
Errado! Apesar de 99% deste programa ser multi-plataforma, 1% dele não é! Apenas uma linha de código! Justamente por este motivo preferimos criar este programa para uma versão Linux, para ressaltar que um desenvolvedor deve conhecer o sistema operacional no qual esta programando independente da linguagem ser multi-plataforma ou não, isto se deve aos diversos conceitos entre os sistemas operacionais.
Para Linux utilizamos um arquivo .SO (equivalente a um arquivo .dll para Windows ou um arquivo .dylib para Apple) chamado libnss3.so que é uma biblioteca de segurança (Network Security Service 3) já inclusa em muitas distribuições Linux. Para transportar este código para outra plataforma além do Linux, você pode usar o arquivo C disponível pela Mozilla que você encontra nos links acima ou utilizar a função PK11SDR_Decrypt em algum pacote de biblioteca no sistema operacional de sua preferencia.
Apple: Dynamic Library
Linux: Dynamic Library
Windows: Dynamic Library
Você encontra uma versão deste programa atualizada e convertida para um executável do Linux, e também os códigos fontes da ultima versão desta ferramenta no seguinte link:
Projeto hospedado: https://code.google.com/p/da-firefox-password-recovery/
Neste exemplo criamos um simples programa na linguagem de programação Python que captura os sites e exibe as senha armazenadas pelo navegador Mozilla Firefox.
# Versão 1.0 - Betha
# DaFirefoxMain.py
# Classes de estruturas de senha
(PW_NONE, PW_FROMFILE, PW_PLAINTEXT, PW_EXTERNAL) = (0, 1 ,2 ,3)
colLabels = ["Site (Action URL)", "Usuario (User)", "Senha (Password)"]
# Captura arquivos no contexto do usuario
def contexto_usuario():
appdata = os.getenv('HOME')
usersdir = appdata+os.sep+".mozilla"+os.sep+'firefox'
userdir = os.listdir(usersdir)
for u in userdir:
if os.path.isdir(usersdir + os.sep + u):
dirs.append(usersdir + os.sep + u)
# Captura o banco de dados signons.sqlite requer Firefox 3 ou superior
def lesignonDB(userpath,dbname):
chave.NSS_Init(userpath)
# Recupera dados de login
conn = sqlite3.connect(userpath+os.sep+dbname)
c.execute("SELECT * FROM moz_logins;")
# Descriptografa dados usando PK11SDR_Decrypt
# Retorna nome de usuario aplicando base64
unome.data  = cast(c_char_p(base64.b64decode(row[6])), c_void_p)
unome.len   = len(base64.b64decode(row[6]))
# Retorna senha de usuario aplicando base64
passwd.data = cast(c_char_p(base64.b64decode(row[7])), c_void_p)
passwd.len  = len(base64.b64decode(row[7]))
# Descriptografa usuario  aplicando PK11SDR
chave.PK11SDR_Decrypt(byref(unome), byref(dectexto), byref(passdados))
usuario =  string_at(dectexto.data,dectexto.len)
# Descriptografa senha aplicando PK11SDR
chave.PK11SDR_Decrypt(byref(passwd), byref(dectexto), byref(passdados))
senha   = string_at(dectexto.data, dectexto.len)
captura = [row[1], usuario, senha]
# Fecha conexões
chave.NSS_Shutdown()
# Repeura logins no contexto do usuario
abrirPass = contexto_usuario()
# Le SO externa
chave = CDLL("libnss3.so")
passdados = secuPWData()
passdados.source = PW_NONE
passdados.data=0
# Cria instancia da estrutura de criptografia
unome = SECItem()
dectexto = SECItem()
# Retorna arquivos para desencriptar dados
for u in abrirPass:
signonfiles = glob.glob(u + os.sep + "signons*.*")
for s in signonfiles:
(filepath,filename) = os.path.split(s)
filetype = re.findall('\.(.*)',filename)[0]
if filetype.lower() == "sqlite":
lesignonDB(filepath, filename)
wx.Frame.__init__(self, parent, -1, "DA - Firefox Password Recovery - Desenvolvimento Aberto - 2014", size=(860, 350))
# Centraliza tela
menu.Append(5000, "S&alvar", "Exportar para texto")
menu.Append(5001, "Sai&r", "Fechar o programa")
menu1.Append(6001, "&Sobre", "Sobre este programa")
# Preenche barra de status
self.SetStatusText("", 0)
self.SetStatusText(socket.gethostname(), 1)
self.SetStatusText(getpass.getuser(), 2)
self.SetStatusText(dataA, 3)
self.SetStatusText(self.plataforma(), 4)
botao1 =   wx.Button(panel, label="Exportar TXT (Export)", pos=(580,280))
botao1.Bind(wx.EVT_BUTTON, self.OnSalvar)
botao2 =   wx.Button(panel, label="Fechar (Close)", pos=(740,280))
botao2.Bind(wx.EVT_BUTTON, self.OnSair)
botao3 =   wx.Button(panel, label="Sobre (About)", pos=(20,280))
botao3.Bind(wx.EVT_BUTTON, self.OnSobre)
grid.SetColSize(0, 370)
grid.SetColSize(1, 260)
grid.SetColSize(2, 138)
conteudo = "DA -Firefox Password Recovery - Powered by Desenvolvimento Aberto 2014\n\n" + \
"Sistema Operacional: " + self.plataforma() + "\n" + \
"Estação: " + socket.gethostname() + "\n" + \
"Blog: https://desenvolvimentoaberto.wordpress.com"
DA_WifiPerfilEx.dll – 1.0 – Unmanaged Windows Wifi API Functions – C++
Publicado: 18 de março de 2014 em Hacking
É uma dll desenvolvida em C++ escrita em código nativo (unmanaged), gerando uma interface com a API Wifi do Windows onde é possível manipular o perfil de rede sem fio, sem precisar utilizar todos os requisitos necessários para isto, tais como elevação de direitos, contexto de usuário local, cripotografia e etc.
A Dll pode ser usada por outras linguagens de programação para chamar funções diretamente da API Wifi do Windows sem precisar se preocupar todos os complexos detalhes de como manipular código em um nível mais baixo. Na imagem abaixo temos o resultado da compilação em C++, mas você pode usar esta dll de qualquer linguagem que suporte código unmanaged.
Desenvolvimento Aberto Tools : http://desenvolvimentoabertotools.wordpress.com/
Publicado: 23 de fevereiro de 2014 em Hacking
Um Spider simples coleta o conteúdo da Internet
Spider é um programa que visita sites e lê suas páginas e outras informações, a fim de criar entradas para um índice de motor de busca. Os principais motores de busca na Web, todos têm um programa desse tipo, o que também é conhecido como um "crawler" ou um "bot". Os spiders são normalmente programados para visitar sites que tenham sido apresentados por seus proprietários como novos ou atualizados. Sites inteiros ou páginas específicas podem ser visitados e indexados de forma seletiva. Spiders são chamados de aranhas, porque eles costumam visitar muitos locais, em paralelo, ao mesmo tempo, as suas "pernas" que abrangem uma grande área do "web". As aranhas podem rastejar através de páginas de um site de várias maneiras. Uma maneira é seguir todos os links de hipertexto em cada página até que todas as páginas foram lidas.
Pernas do Spider
O Web spider usa principalmente o HTTP para olhar e mover-se pela Internet. HTTP é um protocolo orientado à mensagem no qual um cliente se conecta a um servidor e emite pedidos. O servidor fornece uma resposta. Cada pedido e resposta é composto de cabeçalho e corpo, com o cabeçalho fornecendo informações de status e uma descrição do conteúdo do corpo.
Agora o lado ruim dos crawlers. Infelizmente, pessoas mal intencionadas podem efetuar estragos na Internet. Os crawlers de coleta de e-mail procuram por endereços de e-mail em Web sites que são então utilizados para gerar o spam em massa que vemos diariamente.
A coleta de e-mail pode ser uma das atividades de crawl mais fáceis.
Requisitos: Package Termcolor – https://pypi.python.org/pypi/termcolor
Neste exemplo em Python executamos o script do nosso Spyder via terminal do linux, passando o nome do web site como parametro e logo nosso Spyder analisa todas as paginas do site e captura todos os links do site.
Este exemplo pode ser modificado para capturar varias outras informações do website.
Executar: python spyder.py http://nomedosite.com
# Estes modulos fazem a maioria do trabalho.
def log_stdout(msg):
"""imprime menssagem na tela"""
print colored(msg,"cyan")
def get_page(url, log):
"""Retorna URL e seus conteudos, log erros."""
log("Retornando Erros : " + url)
body = page.read()
def find_links(html):
"""Retorna uma lista de links html."""
# Usa para validar  as urls e retornar as HREFs
writer = formatter.DumbWriter(StringIO())
f = formatter.AbstractFormatter(writer)
parser = htmllib.HTMLParser(f)
O coração do programa, encontra todos os links em web site.
run() contem o loop principal.
process_page() retorna cada pagina e encontra os links.
def __init__(self, startURL, log=None):
# Este metodo seta valores iniciais
self.URLs.add(startURL)
self.include = startURL
self._links_to_process = [startURL]
# Use log_stdout se não providenciar log
self.log = log_stdout
# Processa lista de URLs de uma vez
while self._links_to_process:
url = self._links_to_process.pop()
self.log("Retornando: " + url)
self.process_page(url)
def url_in_site(self, link):
# Checa quando o link começa com uma base URL
return link.startswith(self.include)
def process_page(self, url):
# Retorna a pagina e checa o link nela
html = get_page(url, self.log)
for link in find_links(html):
# Manipula oslinks relativos
self.log("Checking: " + link)
# Obtendo certeza que este é um novo link
if link not in self.URLs and self.url_in_site(link):
self.URLs.add(link)
self._links_to_process.append(link)
# Este codigo roda quando o script é rodado na linha de comando
startURL = sys.argv[1]
spider = Spider(startURL)
for URL in sorted(spider.URLs):
print colored(URL, "blue")
Como Capturar Senhas do Internet Explorer – (Internet Explorer Password)
Publicado: 12 de fevereiro de 2014 em Hacking
Window 8.1 (Modo Fácil)
Com o fracasso obvio do Windows 8 (não de vendas) a Microsoft foi obrigada as pressas a resolver alguns desentendimentos que a versão gerou entre seus usuários e sua nova interface chamada Metro, com um visual minimalista inspirado na comunicação visual de estações de metrô, muito se falou a respeito desta nova interface e muitos também reprovaram suas novas funcionalidades deixando um grande abismo de compatibilidade entre a nova interface Metro e a clássica interface do Windows agora chamada de Desktop.
Então lá vai a Microsoft em sua maior especialidade, resolver bugs que custam o controle total de nossos computadores Windows em todas suas versões, desta vez é obrigada a dar um "tapa" naquilo que sempre fez de melhor, a interface visual.
Nasce o Windows 8.1 renovado já com o famoso e unanime botão iniciar de volta (talvez mais aclamado do que um pop star) e uma união mais harmoniosa entre a interface Metro e a Desktop pode ser a única diferença que a maioria dos usuários puderam notar.
Mas o que pouco se comentou foi outro tipo de harmonia que a Microsoft gerou entre hackers e desenvolvedores mal intencionados, o que antes exigia conhecer profundamente C e C++, APIs, arquivos headers(.h) e dlls do sistema, agora pode ser feito diretamente de linguagens de alto nível como C#, Visual Basic e outras.
O Windows RUNTIME API (Windows API para Windows 8.1 Store Apps) disponibiliza todo o núcleo do Windows, basta usar os namespaces Windows e você acessa uma gama de APIs de um modo simples e fácil.
O que realmente mudou é que agora um grande numero de desenvolvedores podem se aproveitar da fragilidade de como as senhas são guardadas pelo Windows Vault e seu antecessor o Credential Store, deixando assim vulnerável todas as senhas de usuários dentro do contexto do computador local. Pode se agora criar um virus ou um Malware pessoal sem precisar usar receitas de bolo ou hacker tools para descobrir senha de sites como Facebook, Gmail, Hotmail ou qualquer outra senha guardada pelo browser do usuário.
Requisitos (Para utilizar o código disponibilizado Open Source):
Microsoft Visual Studio Professional (versão Express não suportada)
Referencias e Downloads:
Windows STORE API RUNTIME Reference: http://msdn.microsoft.com/en-us/library/windows/apps/br211377.aspx
Exemplos Cross-Plataform: http://msdn.microsoft.com/en-us/library/gg597391(v=vs.110).aspx
No contexto do usuário ou seja na maquina local em que o usuário efetuou o Login é possível recuperar as senhas guardadas pelo Internet Explorer, seja de um programa em um pen drive ou por um aplicativo de console e utilizar as urls e senhas do modo que bem entender, enviar pela internet, exportar para um arquivo texto, html, xml e etc.
Windows RUNTIME API fornece acesso ao namespace Windows.Security.Credentials que fornece todas as funcionalidades que precisamos para enumerar as credenciais do usuário.
Windows.Security.Credentials: http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.credentials.aspx
DA – Windows Vault/Network Password Recovery – V 1.0 – Betha
Modo Nativo (Avançado)
Nós disponibilizamos a ferramenta escrita por nós utilizando o modo tradicional para acessar as APIs por meio da linguagem de programação Visual C++, você pode utilizar a ferramenta gratuitamente e em breve o código será disponibilizado em um projeto OpenSource:
Download: DA – Internet Explorer – Vault/Network Password Recovery
Project (Google Code): http://code.google.com/p/da-ie-vault-credential/source/browse/
Windows Credential Store e Windows Vault
O Windows fornece o Credencial Store que é uma estrutura para armazenar senhas de rede em um formato seguro e criptografado. Isso proporciona mecanismo conveniente e confiável de armazenar as senhas para logins de rede para que o usuário não tenha que digitar a senha toda vez que acessar os recursos da rede.
Não só o Windows usa para armazenar senhas de autenticação de rede, mas também outras aplicações como o Outlook, Windows Live, Remote Destktop, GMail Notifier e etc.
O Windows também permite que os aplicativos gerenciem perfeitamente o Credencial Store usando funções da API de gerenciamento de credenciais, as credenciais são armazenadas localmente no contexto do usuário no seguinte diretório:
O IE10 mudou a maneira de como armazenar senhas. Agora, todas as senhas de preenchimento automático são armazenados no Gerenciador de Credenciais em um local chamado de "Credenciais da Web". Parece algo como o seguinte:
Existem dois tipos de localização Vault:
C:\Users\Usuario01\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28
С:/Windows/System32/config/systemprofile/AppData/Roaming/Microsoft/Vault/…
С:/Windows/System32/config/systemprofile/AppData/Local/Microsoft/Vault/…
C:/ProgramData/Microsoft/Vault/AC658CB4-9126-49BD-B877-31EEDAB3F204
Exemplo Open Source:
Vamos utilizar como base um código aberto liberado pela licença MIT (Instituto de Tecnologia de Massachusetts) que mostra como é simples capturar as senhas do Internet Explorer 10 de uma linguagem como C# o que antes era somente era possível com complexos códigos em C.
Este exemplo é disponibilizado de modo Open Source, é utilizado através do namespace Windows e o programa tem a saída no console:
Obs: O código abaixo funciona apenas para computadores com o sistema operacional Windows 8 e só pode ser compilado do sistema operacional Windows 8.1, caso queira experimentar nossa ferramenta gratuita que pode ser utilizada no Windows Vista ou superior utilize os links para download que podem ser encontrados logo acima.
Obs 2: Apesar do código abaixo utilizar a linguagem de programação C#, internamente não é classificado como uma compilação .Net Framework e sim Windows Core, incompatibilizando assim qualquer tentativa de referenciar assemblers de código gerenciados entre eles.
Exemplos Windows Store: http://code.msdn.microsoft.com/windowsapps/Windows-8-Modern-Style-App-Samples
Publicado: 25 de janeiro de 2014 em Hacking
Linguagem de programação: A API nativa Wifi é projetado para desenvolvedores de C / C + +. Os programadores devem estar familiarizados com os conceitos de rede sem fio e terminologia.
Objetivo: Criar um pequeno executável que lê o arquivo xml do perfil de rede do Windows e descriptografar as chaves encontradas, capturar e salvar as senhas de rede em arquivo externo formato texto,html, ou xml.
Material Extra: Microsoft Native Wifi API http://msdn.microsoft.com/en-us/library/windows/desktop/ms706556(v=vs.85).aspx
Mais informações sobre redes Wi-Fi: https://www.wi-fi.org/
Download : Ferramenta de Captura versão Betha V1.2
Como Capturar a Senha de Rede Sem Fio
Algo que você precisa saber sobre chaves de rede sem fio:
As chaves de rede sem fio ( WEP / WPA ) são armazenadas em seu computador pelo serviço " Configuração Automática de WLAN " do Windows Vista, Windows 7, Windows 8 e Windows Server 2008. Você pode facilmente ler, descriptografar e salvar todas as chaves da rede sem fio para um arquivo de texto / html / xml.
O Windows Vista ou versão superior não converte o WPA- PSK em uma nova chave de valor binário como Windows XP , mas simplesmente mantem a chave original que você digita. Assim, sob o Windows Vista ou superior , a chave WPA- PSK original que você digitou é exibida no formato de chave ASCII.
DA – Wireless Password Recovery – V1.2
Onde encontrar as chaves?
Os Registro e Arquivos são a localização das chaves armazenadas
Windows XP e Windows Vista armazena as chaves sem fio em locais completamente diferentes :
As chaves sem fio são armazenadas no Registro em HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ WZCSVC \ Parameters \ Interfaces \ [Interface Guid ] .
Windows Vista ou versão superior: As chaves sem fio são armazenados no sistema de arquivos, em C: \ ProgramData \ Microsoft \ Wlansvc \ Profiles \ Interfaces \ . As chaves criptografadas são armazenadas em um arquivo xml. A pasta ProgramData é oculta para visualizar é preciso modificar as configurações de pasta no painel de controle, opções de pasta.
Exemplo do diretório:
pasta: {AB4A8A4C-A902-4389-8D03-F2514287C271}
Arquivo: {DB0CB129-465D-410A-8103-EF5E42E63577}.xml
<name>rrsrv1</name>
<hex>727273727631</hex>
<keyMaterial>01000000D08C9DDF0115D1118C7A00C04FC297EB0100000013D7D27AF209BB4F8CDA744D06A1F66900000000020000000000106600000001000020000000E1426D68BC8A7F4575111CA1821597ABC7F96094EC5CAF41A892B27DF17DC4A2000000000E8000000002000020000000A3E06EFFB9A0209351B4A55E09D0AAF34487745A8F3D0324B8403AC4FAEA30A710000000DD2283BD47C08228C62F9774D786044E40000000E9E8929F02886A224D9CBE98D9C14A80BD5BB77D878F51831D6A5694ABF4CB4B44C05197923A36B462A87EC85923F7CD438397E068F78AACF83D3AD0DE60D5BB</keyMaterial>
Onde Está a Senha da Rede Sem fio?
Localizados na tag KeyMaterial
WEP Este elemento contém uma chave de 5 ou 13 caracteres ANSI , ou de 10 ou 26 caracteres hexadecimais.
WPAPSK ,WPA2PSK TKIP ou AES PASSPHRASE este elemento contém uma senha de 8 a 63 caracteres ASCII , ou seja, 8 a 63 caracteres ANSI no intervalo de 32-126 . Valores de chave devem estar de acordo com os requisitos especificados pelo 802.11i.
WPAPSK , WPA2PSK TKIP ou AES Network Key este elemento contém uma chave de 64 caracteres hexadecimais.
Caracteres Unicode podem ser inscritos em ANSI ou ASCII são especificados acima. No entanto, se os caracteres Unicode fornecidos não puderem ser mapeados para caracteres ANSI ou ASCII , então o material de chave fornecida é rejeitada.
KeyMaterial é retornado por WlanGetProfile é sempre criptografado . Além disso, se o material da chave não criptografada é passado para WlanSetProfile , o material de chave é automaticamente criptografada antes de ser guardado no armazenamento de perfil.
Windows XP com SP3 e Wireless LAN API para Windows XP com SP2: O material chave nunca é criptografado .
Com o Retornar o Perfil de Rede Sem Fio?
A função WlanGetProfile recupera todas as informações sobre um perfil da rede sem fio especificada.
Por padrão, o elemento KeyMaterial retornado no perfil apontado pelo pstrProfileXml é criptografada. Se o processo é executado no contexto da conta LocalSystem no mesmo computador, então você pode desencriptar material de chave chamando a função CryptUnprotectData.
Windows XP com SP3 e Wireless LAN API para Windows XP com SP2: O material chave nunca é criptografado.
Como Descriptografar?
A função CryptUnprotectData decifra e faz uma verificação de integridade dos dados em uma estrutura DATA_BLOB. Normalmente, o único usuário que pode descriptografar os dados é um usuário com as mesmas credenciais de logon como o usuário que criptografou os dados. Além disso, a criptografia e descriptografia deve ser feito no mesmo computador
Como usar as Funções
WlanGetProfile: C/C++
CryptUnprotectData:C/C++
Header Dpapi.h; Wincrypt.h no Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, e Windows XP