aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc-netlogon.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2020-03-13 12:36:17 +0100
committerAnders Broman <a.broman58@gmail.com>2020-03-14 15:50:30 +0000
commit14c71587ef8364cfefcd7afa7c77d5896ce4f051 (patch)
treeedb7fc1c27cde5fa063b6595b2b8aed272fddfe3 /epan/dissectors/packet-dcerpc-netlogon.c
parentfff3776cddab6a743c90e110bfa8bdc113addf6c (diff)
packet-dcerpc-netlogon: make use of get_md4pass_list() from packet-ntmssp
Change-Id: Ide0dd6464a72640c03ad00a9a5a00c5f73d13299 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-on: https://code.wireshark.org/review/36402 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-dcerpc-netlogon.c')
-rw-r--r--epan/dissectors/packet-dcerpc-netlogon.c78
1 files changed, 2 insertions, 76 deletions
diff --git a/epan/dissectors/packet-dcerpc-netlogon.c b/epan/dissectors/packet-dcerpc-netlogon.c
index 715762821c..69defe9d5d 100644
--- a/epan/dissectors/packet-dcerpc-netlogon.c
+++ b/epan/dissectors/packet-dcerpc-netlogon.c
@@ -23,6 +23,7 @@
#include "packet-dcerpc-netlogon.h"
#include "packet-windows-common.h"
#include "packet-dcerpc-lsa.h"
+#include "packet-ntlmssp.h"
/* for keytab format */
#include <epan/asn1.h>
#include "packet-kerberos.h"
@@ -33,8 +34,6 @@
void proto_register_dcerpc_netlogon(void);
void proto_reg_handoff_dcerpc_netlogon(void);
-extern const char *gbl_nt_password;
-
#ifdef DEBUG_NETLOGON
#include <stdio.h>
#define debugprintf(...) fprintf(stderr,__VA_ARGS__)
@@ -450,10 +449,6 @@ typedef struct _netlogon_auth_vars {
struct _netlogon_auth_vars *next;
} netlogon_auth_vars;
-typedef struct _md4_pass {
- guint8 md4[16];
-} md4_pass;
-
typedef struct _seen_packet {
gboolean isseen;
guint32 num;
@@ -6493,75 +6488,6 @@ netlogon_dissect_netrserverauthenticate2_rqst(tvbuff_t *tvb, int offset,
return netlogon_dissect_netrserverauthenticate3_rqst(tvb,offset,pinfo,tree,di,drep);
}
-#ifdef HAVE_KERBEROS
-static void str_to_unicode(const char *nt_password, char *nt_password_unicode)
-{
- size_t password_len = 0;
- size_t i;
-
- password_len = strlen(nt_password);
- if(nt_password_unicode != NULL)
- {
- for(i=0;i<(password_len);i++)
- {
- nt_password_unicode[i*2]=nt_password[i];
- nt_password_unicode[i*2+1]=0;
- }
- nt_password_unicode[2*password_len]='\0';
- }
-}
-
-static guint32 get_keytab_as_list(md4_pass **p_pass_list, const char* ntlm_pass)
-{
- enc_key_t *ek;
- md4_pass* pass_list;
- md4_pass ntlm_pass_hash;
- int i = 0;
- guint32 nb_pass = 0;
- char ntlm_pass_unicode[258];
- int add_ntlm = 0;
- int password_len;
-
- if(!krb_decrypt){
- *p_pass_list=NULL;
- return 0;
- }
- read_keytab_file_from_preferences();
- memset(ntlm_pass_hash.md4,0,sizeof(md4_pass));
-
- for(ek=enc_key_list;ek;ek=ek->next){
- if( ek->keylength == 16 ) {
- nb_pass++;
- }
- }
-
- if (ntlm_pass[0] != '\0' && ( strlen(ntlm_pass) < 129 )) {
- nb_pass++;
- debugprintf("Password: %s\n",ntlm_pass);
- password_len = (int)strlen(ntlm_pass);
- str_to_unicode(ntlm_pass,ntlm_pass_unicode);
- gcry_md_hash_buffer(GCRY_MD_MD4, ntlm_pass_hash.md4, ntlm_pass_unicode, password_len*2);
- printnbyte(ntlm_pass_hash.md4,16,"Hash of the NT pass: ","\n");
- add_ntlm = 1;
- }
-
- *p_pass_list = (md4_pass *)wmem_alloc(wmem_packet_scope(), nb_pass*sizeof(md4_pass));
- pass_list=*p_pass_list;
- if(add_ntlm) {
- memcpy(pass_list[0].md4,&(ntlm_pass_hash.md4),sizeof(md4_pass));
- i++;
- }
-
- for(ek=enc_key_list;ek;ek=ek->next){
- if( ek->keylength == 16 ) {
- memcpy(pass_list[i].md4,ek->keyvalue,16);
- i++;
- }
- }
- return nb_pass;
-}
-#endif
-
static int
netlogon_dissect_netrserverauthenticate23_reply(tvbuff_t *tvb, int offset,
packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep, int version3)
@@ -6611,7 +6537,7 @@ netlogon_dissect_netrserverauthenticate23_reply(tvbuff_t *tvb, int offset,
vars->flags = flags;
vars->can_decrypt = FALSE;
#ifdef HAVE_KERBEROS
- list_size = get_keytab_as_list(&pass_list,gbl_nt_password);
+ list_size = get_md4pass_list(&pass_list);
debugprintf("Found %d passwords \n",list_size);
#endif
if( flags & NETLOGON_FLAG_AES )