Initial commit

This commit is contained in:
Fist0urs
2016-02-16 16:34:46 +01:00
parent 7645a6f00f
commit c3dabdd69e
13 changed files with 2759 additions and 8 deletions
+21 -2
View File
@@ -136,7 +136,7 @@ double TARGET_MS_PROFILE[3] = { 8, 16, 96 };
#define MAX_DICTSTAT 10000
#define NUM_DEFAULT_BENCHMARK_ALGORITHMS 130
#define NUM_DEFAULT_BENCHMARK_ALGORITHMS 131
#define global_free(attr) \
{ \
@@ -182,6 +182,7 @@ static uint default_benchmark_algorithms[NUM_DEFAULT_BENCHMARK_ALGORITHMS] =
5600,
7300,
7500,
13100,
8300,
11100,
11200,
@@ -577,6 +578,7 @@ const char *USAGE_BIG[] =
" 11100 = PostgreSQL Challenge-Response Authentication (MD5)",
" 11200 = MySQL Challenge-Response Authentication (SHA1)",
" 11400 = SIP digest authentication (MD5)",
" 13100 = Kerberos 5 TGS-REP etype 23",
"",
"[[ Forums, CMS, E-Commerce, Frameworks, Middleware, Wiki, Management ]]",
"",
@@ -6109,7 +6111,7 @@ int main (int argc, char **argv)
return (-1);
}
if (hash_mode_chgd && hash_mode > 13000) // just added to remove compiler warnings for hash_mode_chgd
if (hash_mode_chgd && hash_mode > 13100) // just added to remove compiler warnings for hash_mode_chgd
{
log_error ("ERROR: Invalid hash-type specified");
@@ -10357,6 +10359,22 @@ int main (int argc, char **argv)
dgst_pos3 = 3;
break;
case 13100: hash_type = HASH_TYPE_KRB5TGS;
salt_type = SALT_TYPE_EMBEDDED;
attack_exec = ATTACK_EXEC_INSIDE_KERNEL;
opts_type = OPTS_TYPE_PT_GENERATE_LE;
kern_type = KERN_TYPE_KRB5TGS;
dgst_size = DGST_SIZE_4_4;
parse_func = krb5tgs_parse_hash;
sort_by_digest = sort_by_digest_4_4;
opti_type = OPTI_TYPE_ZERO_BYTE
| OPTI_TYPE_NOT_ITERATED;
dgst_pos0 = 0;
dgst_pos1 = 1;
dgst_pos2 = 2;
dgst_pos3 = 3;
break;
default: usage_mini_print (PROGNAME); return (-1);
}
@@ -10460,6 +10478,7 @@ int main (int argc, char **argv)
case 12000: esalt_size = sizeof (pbkdf2_sha1_t); break;
case 12100: esalt_size = sizeof (pbkdf2_sha512_t); break;
case 13000: esalt_size = sizeof (rar5_t); break;
case 13100: esalt_size = sizeof (krb5tgs_t); break;
}
data.esalt_size = esalt_size;
+127
View File
@@ -5834,6 +5834,7 @@ char *strhashtype (const uint hash_mode)
case 12800: return ((char *) HT_12800); break;
case 12900: return ((char *) HT_12900); break;
case 13000: return ((char *) HT_13000); break;
case 13100: return ((char *) HT_13100); break;
}
return ((char *) "Unknown");
@@ -8278,6 +8279,36 @@ void ascii_digest (char out_buf[4096], uint salt_pos, uint digest_pos)
byte_swap_32 (digest_buf[1])
);
}
else if (hash_mode == 13100)
{
krb5tgs_t *krb5tgss = (krb5tgs_t *) data.esalts_buf;
krb5tgs_t *krb5tgs = &krb5tgss[salt_pos];
u8 *ptr_checksum = (u8 *) krb5tgs->checksum;
u8 *ptr_edata2 = (u8 *) krb5tgs->edata2;
char data[256] = { 0 };
char *ptr_data = data;
for (uint i = 0; i < 16; i++, ptr_data += 2)
sprintf (ptr_data, "%02x", ptr_checksum[i]);
/* skip '$' */
ptr_data++;
for (uint i = 0; i < 32; i++, ptr_data += 2)
sprintf (ptr_data, "%02x", ptr_edata2[i]);
*ptr_data = 0;
snprintf (out_buf, len-1, "%s$%s$%s$%s",
SIGNATURE_KRB5TGS,
(char *) krb5tgs->account_info,
data,
data + 33);
}
else
{
if (hash_type == HASH_TYPE_MD4)
@@ -18671,6 +18702,102 @@ int rar5_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf)
return (PARSER_OK);
}
int krb5tgs_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf)
{
if ((input_len < DISPLAY_LEN_MIN_13100) || (input_len > DISPLAY_LEN_MAX_13100)) return (PARSER_GLOBAL_LENGTH);
if (memcmp (SIGNATURE_KRB5TGS, input_buf, 11)) return (PARSER_SIGNATURE_UNMATCHED);
u32 *digest = (u32 *) hash_buf->digest;
salt_t *salt = hash_buf->salt;
krb5tgs_t *krb5tgs = (krb5tgs_t *) hash_buf->esalt;
/**
* parse line
*/
/* Skip '$' */
char *account_pos = input_buf + 11 + 1;
char *data_pos;
uint data_len;
if (account_pos[0] == '*')
{
account_pos++;
data_pos = strchr (account_pos, '*');
/* Skip '*' */
data_pos++;
if (data_pos == NULL) return (PARSER_SEPARATOR_UNMATCHED);
uint account_len = data_pos - account_pos + 1;
if (account_len >= 512) return (PARSER_SALT_LENGTH);
/* Skip '$' */
data_pos++;
data_len = input_len - 11 - 1 - account_len - 2;
memcpy (krb5tgs->account_info, account_pos - 1, account_len);
}
else
{
/* assume $krb5tgs$23$checksum$edata2 */
data_pos = account_pos;
memcpy (krb5tgs->account_info, "**", 3);
data_len = input_len - 11 - 1 - 1;
}
if (data_len < ((16 + 32) * 2)) return (PARSER_SALT_LENGTH);
char *checksum_ptr = (char *) krb5tgs->checksum;
for (uint i = 0; i < 16 * 2; i += 2)
{
const char p0 = data_pos[i + 0];
const char p1 = data_pos[i + 1];
*checksum_ptr++ = hex_convert (p1) << 0
| hex_convert (p0) << 4;
}
char *edata_ptr = (char *) krb5tgs->edata2;
/* skip '$' */
for (uint i = 16 * 2 + 1; i < input_len; i += 2)
{
const char p0 = data_pos[i + 0];
const char p1 = data_pos[i + 1];
*edata_ptr++ = hex_convert (p1) << 0
| hex_convert (p0) << 4;
}
krb5tgs->edata2_len = strlen(edata_ptr - input_len)/(2 * 4);
salt->salt_buf[0] = krb5tgs->checksum[0];
salt->salt_buf[1] = krb5tgs->checksum[1];
salt->salt_buf[2] = krb5tgs->checksum[2];
salt->salt_buf[3] = krb5tgs->checksum[3];
salt->salt_len = 32;
digest[0] = krb5tgs->checksum[0];
digest[1] = krb5tgs->checksum[1];
digest[2] = krb5tgs->checksum[2];
digest[3] = krb5tgs->checksum[3];
return (PARSER_OK);
}
int cf10_parse_hash (char *input_buf, uint input_len, hash_t *hash_buf)
{
if ((input_len < DISPLAY_LEN_MIN_12600) || (input_len > DISPLAY_LEN_MAX_12600)) return (PARSER_GLOBAL_LENGTH);