
Identifique servidores Microsoft Exchange expostos publicamente e determine suas versões de software

Esta ferramenta verifica vários serviços comuns expostos publicamente num host alvo, a fim de detetar o Microsoft Exchange Server e, se possível, identificar a versão do seu software através de impressão digital.
Para tal, utiliza as seguintes técnicas:
Os números de compilação identificados são comparados com uma tabela de versões extraída da Microsoft que abrange todas as versões desde o Exchange Server 5.5 até ao Exchange Server Subscription Edition (SE), incluindo os níveis Service Pack (SP), Cumulative Update (CU), Security Update (SU), Hotfix Update (HU) e Update Rollup (RU). As correspondências são apresentadas com um nome de produto, data de lançamento e strings CPE no formato do dicionário NVD.
A forma recomendada de executar o scanner é com o Docker, que não requer dependências locais para além do próprio Docker. Para executar o script diretamente em alternativa, este foi concebido para utilização em Debian Linux de 64 bits, mas deve funcionar com qualquer variante Linux suportada pelo Python 3, dnsx e fingerprintx (com pequenas modificações no script de instalação).
Construa a imagem. Esta inclui o Python, os pacotes Python fixados e os binários de dnsx e fingerprintx com versões fixadas, e extrai a tabela de versões do Exchange Server da Microsoft no momento da construção:
docker build -t exchange-scanner .
Depois, execute o scanner, passando os mesmos argumentos que passaria ao script (descritos abaixo em Utilização):
# Scan a single target
docker run --rm exchange-scanner -q -t 192.168.5.3
# Scan a list of targets (mount the file into the container)
docker run --rm -v "$PWD/targets.txt:/app/targets.txt" exchange-scanner -l targets.txt
Reconstrua a imagem para atualizar a tabela de versões.
Execute scripts/install-requirements.sh para instalar as ferramentas, pacotes e outras dependências necessárias. Os pacotes Python estão fixados em versões específicas em scripts/requirements.txt.
Pode voltar a executar scripts/get-exchange-versions.py separadamente em qualquer altura para atualizar a tabela de versões de software encontrada em exchange-versions.json.
Execute o script exchange-scanner.py com -h para ver os detalhes de utilização:
❯ ./exchange-scanner.py -h
usage: exchange-scanner.py [-h] [-q] [-d] [-x TIMEOUT] [-o OUTFILE] (-t TARGET | -l LIST)
optional arguments:
-h, --help show this help message and exit
-q, --quiet Suppress log output (except errors)
-d, --debug Print debugging messages
-x TIMEOUT, --timeout TIMEOUT
Set timeout for HTTP requests (defaults to 3 seconds)
-o OUTFILE, --outfile OUTFILE
Save output to a file instead of writing to stdout
-t TARGET, --target TARGET
A single hostname or IP address to scan
-l LIST, --list LIST File containing a list of hostnames and/or IP addresses to scan (one per line)
Obrigatório: -t ou -l
-t com um único hostname ou endereço IP. Se o hostname resolver para vários IPs, o script verificará cada um deles separadamente.-l com o nome do ficheiro.Registo: Para suprimir a maior parte da saída do registo, use -q. Para ver mais detalhes no registo, use -d.
Timeout: Para alterar o tempo máximo de resposta por pedido HTTP, especifique um valor de timeout em segundos (o predefinido é 3). Tenha em atenção que um único endereço IP pode gerar mais de 200 pedidos em determinadas circunstâncias (embora a maioria das verificações não atinja este volume), pelo que um timeout mais curto é geralmente preferível.
Saída: Os resultados da verificação são apresentados em formato JSON por predefinição. Para guardar a saída num ficheiro em vez de a escrever no stdout, use -o com um nome de ficheiro.
$ ./exchange-scanner.py -q -t 192.168.5.3
[
{
"hostname": "192.168.5.3",
"ip_address": "192.168.5.3",
"build_number": "15.2.1118",
"exchange_services": [
"https://192.168.5.3:443",
"imaps://192.168.5.3:993"
],
"product_name": "Exchange Server 2019 CU12 (2022H1)",
"major_version": "2019",
"update": "Cumulative Update 12",
"security_update": null,
"release_date": "2022-04-20",
"recalled": false,
"cpes": [
"cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_12:*:*:*:*:*:*",
"cpe:2.3:a:microsoft:outlook_web_access:2019:cumulative_update_12:*:*:*:*:*:*"
]
}
]
A utilização desta ferramenta para atacar alvos sem consentimento mútuo prévio é ilegal. É da responsabilidade do utilizador final cumprir todas as leis locais, estaduais e federais aplicáveis. Os programadores não assumem qualquer responsabilidade e não são responsáveis por qualquer utilização indevida ou danos causados por este programa.
Este projeto está licenciado sob a GNU General Public License.
recalled na sua saída.