
script simples para extrair todos os recursos web por meio de pasta .SVN exposta na rede.
Muitas vezes, testadores de penetração de aplicações web se deparam com a presença de pastas .svn. Para aqueles que não sabem, a pasta .svn é usada pelo sistema de controle de versão SVN para realizar suas operações. Para um pentest de caixa-preta, essa pasta contém uma enorme quantidade de informações. Algumas das principais áreas onde isso pode ajudar incluem.
Descobrir arquivos e nomes de pastas ocultos
Acessar o código-fonte dos arquivos.
Baixar arquivos mesmo que as restrições estejam em vigor no htaccess.
Como isso pode ser alcançado.
Existem duas maneiras pelas quais isso pode ser alcançado, dependendo da versão do SVN em uso.
para <1.6 tínhamos arquivos .svn/entries que continham uma lista de arquivos/pastas, bem como nomes de usuário usados para commitar esses arquivos.
para >1.6 temos .svn/wc.db que contém dados semelhantes, mas em formato sqlite3.
Esses arquivos podem ser diretamente acessíveis através da URL.
O SVN mantém uma cópia de backup de todos os arquivos em dois locais separados.
onde
filename é o nome real do arquivo.
CHECKSUM é o hash Sha1 do arquivo.
XX são os dois primeiros caracteres do CHECKSUM.
O primeiro tipo de entrada tem uma limitação: suponha que o nome do arquivo seja testme.php, então o caminho se torna.
.svn/text-base/testme.php.svn-base
um grande número de servidores executará o arquivo e servirá a saída.
É aí que a opção 2 se destaca; no entanto, essa informação está disponível apenas no caso do wc.db (versão SVN >1.6) e isso requer que o diretório .sv/pristine seja acessível pela web.
No entanto, após pesquisar muito, não consegui encontrar um único código que pudesse fazer ambas as coisas de uma só vez.
então aqui está uma ferramenta que pode realizar ambas as operações em um único script.
minimal
svn-extractor.py --url "url with .svn available"
alloptions
$ python svnextractor.py --help
usage: svn_extractor.py [-h] --url TARGET [--debug] [--noextract] [--userlist]
[--wcdb] [--entries] [--proxy PROXY] [--match MATCH]
This program is used to extract the hidden SVN files from a webhost
considering either .svn entries file (<1.6) or wc.db (> 1.7) are available
online. This program actually automates the directory navigation and text
extraction process
optional arguments:
-h, --help show this help message and exit
--url TARGET Provide URL
--debug Provide debug information
--noextract Don't extract files just show content
--userlist show the usernames used for commit
--wcdb check only wcdb
--entries check only .svn/entries file
--proxy PROXY Provide HTTP Proxy in http(s)://host:port format
--match MATCH only download files that match regex
Créditos (C) Anant Shrivastava http://anantshri.info Saudações a Amol Naik, Akash Mahajan, Prasanna K, Lava Kumar pelas valiosas contribuições
Seria injusto dizer que fiz toda a pesquisa sozinho, então aqui estão os links para vários recursos que usei para obter as informações.
http://pen-testing.sans.org/blog/pen-testing/2012/12/06/all-your-svn-are-belong-to-us (técnica manual para wc.db)
http://www.adamgotterer.com/post/28125474053/hacking-the-svn-directory-archive (técnica manual para .svn/entries)
http://www.cirt.net/svnpristine (única ferramenta automatizada que encontrei online fazendo a mágica do wc.db)