Skip to content
Snippets Groups Projects
Commit 7563ef02 authored by Nigel Kukard's avatar Nigel Kukard
Browse files

* Remove debugging info from authentication modules

* Ensure that authentication modules use the attribute details, remove hardcoding
parent 45164d8e
No related branches found
No related tags found
No related merge requests found
...@@ -87,22 +87,44 @@ sub authenticate ...@@ -87,22 +87,44 @@ sub authenticate
# Check if this is a CHAP auth # Check if this is a CHAP auth
return MOD_RES_SKIP if (!defined($challenge) || !defined($password)); return MOD_RES_SKIP if (!defined($challenge) || !defined($password));
$server->log(LOG_DEBUG,"This is a CHAP challenge...."); $server->log(LOG_DEBUG,"[MOD_AUTH_CHAP] This is a CHAP challenge");
# Grab our own version of the password
print(STDERR "RECEIVED\n"); my $ourPassword;
print(STDERR "Challenge: len = ".length($challenge).", hex = ".unpack("H*",$challenge)."\n"); if (defined($user->{'Attributes'}->{'User-Password'})) {
print(STDERR "Password : len = ".length($password).", hex = ".unpack("H*",$password)."\n"); # Operator: ==
print(STDERR "\n\n"); if (defined($user->{'Attributes'}->{'User-Password'}->{'=='})) {
# Set password
$ourPassword = $user->{'Attributes'}->{'User-Password'}->{'=='}->{'Value'};
} else {
$server->log(LOG_NOTICE,"[MOD_AUTH_CHAP] No valid operators for attribute 'User-Password', ".
"supported operators are: ==");
}
} else {
$server->log(LOG_NOTICE,"[MOD_AUTH_CHAP] No 'User-Password' attribute, cannot authenticate");
return MOD_RES_NACK;
}
# print(STDERR "RECEIVED\n");
# print(STDERR "Challenge: len = ".length($challenge).", hex = ".unpack("H*",$challenge)."\n");
# print(STDERR "Password : len = ".length($password).", hex = ".unpack("H*",$password)."\n");
# print(STDERR "\n\n");
# Pull off the ID
my $id = substr($password,0,1); my $id = substr($password,0,1);
print(STDERR "ID: ".length($id).", hex = ".unpack("H*",$id)."\n"); # print(STDERR "ID: ".length($id).", hex = ".unpack("H*",$id)."\n");
my $result = encode_chap($id,$challenge,"mytest"); # Calculate the result
my $result = encode_chap($id,$challenge,$ourPassword);
print(STDERR "CALC\n"); # print(STDERR "CALC\n");
print(STDERR "Result : len = ".length($result).", hex = ".unpack("H*",$result)."\n"); # print(STDERR "Result : len = ".length($result).", hex = ".unpack("H*",$result)."\n");
print(STDERR "\n\n"); # print(STDERR "\n\n");
# Check if the password and the result match
if ($password eq $result) {
return MOD_RES_ACK;
}
return MOD_RES_NACK; return MOD_RES_NACK;
} }
......
...@@ -32,6 +32,7 @@ use warnings; ...@@ -32,6 +32,7 @@ use warnings;
# Modules we need # Modules we need
use smradius::constants; use smradius::constants;
use smradius::logging;
use Crypt::DES; use Crypt::DES;
use Crypt::RC4; use Crypt::RC4;
use Digest::SHA1; use Digest::SHA1;
...@@ -109,64 +110,98 @@ sub authenticate ...@@ -109,64 +110,98 @@ sub authenticate
# Return if not recognized... # Return if not recognized...
return MOD_RES_SKIP if (!defined($rawChallenge) || (!defined($rawResponse) && !defined($rawResponse2))); return MOD_RES_SKIP if (!defined($rawChallenge) || (!defined($rawResponse) && !defined($rawResponse2)));
print(STDERR "This is a MS-CHAP challenge....\n"); $server->log(LOG_DEBUG,"[MOD_AUTH_MSCHAP] This is a MSCHAP challenge");
# Grab our own version of the password
my $unicodePassword;
if (defined($user->{'Attributes'}->{'User-Password'})) {
# Operator: ==
if (defined($user->{'Attributes'}->{'User-Password'}->{'=='})) {
# Set password
$unicodePassword = $user->{'Attributes'}->{'User-Password'}->{'=='}->{'Value'};
$unicodePassword =~ s/(.)/$1\0/g; # convert ASCII to unicaode
} else {
$server->log(LOG_NOTICE,"[MOD_AUTH_CHAP] No valid operators for attribute 'User-Password', ".
"supported operators are: ==");
}
} else {
$server->log(LOG_NOTICE,"[MOD_AUTH_CHAP] No 'User-Password' attribute, cannot authenticate");
return MOD_RES_NACK;
}
# Grab usrename
my $username = $user->{'Username'};
if (!defined($username)) {
$server->log(LOG_NOTICE,"[MOD_AUTH_CHAP] No 'Username' attribute in packet, cannot authenticate");
return MOD_RES_NACK;
}
# MSCHAPv1 # MSCHAPv1
if ($rawResponse) { if ($rawResponse) {
$server->log(LOG_DEBUG,"[MOD_AUTH_MSCHAP] This is a MSCHAPv1 challenge");
# Pull off challenge & response
my $challenge = @{$rawChallenge}[0]; my $challenge = @{$rawChallenge}[0];
my $response = substr(@{$rawResponse}[0],2); my $response = substr(@{$rawResponse}[0],2);
print(STDERR "RECEIVED\n"); # print(STDERR "RECEIVED\n");
print(STDERR "Challenge: len = ".length($challenge).", hex = ".unpack("H*",$challenge)."\n"); # print(STDERR "Challenge: len = ".length($challenge).", hex = ".unpack("H*",$challenge)."\n");
print(STDERR "Reponse : len = ".length($response).", hex = ".unpack("H*",$response)."\n"); # print(STDERR "Reponse : len = ".length($response).", hex = ".unpack("H*",$response)."\n");
print(STDERR "\n\n"); # print(STDERR "\n\n");
print(STDERR "CHOPPED OFFF!!\n"); # print(STDERR "CHOPPED OFFF!!\n");
# Chop off NtResponse
my $NtResponse = substr($response,24,24); my $NtResponse = substr($response,24,24);
print(STDERR "NTRespons: len = ".length($NtResponse).", hex = ".unpack("H*",$NtResponse)."\n"); # print(STDERR "NTRespons: len = ".length($NtResponse).", hex = ".unpack("H*",$NtResponse)."\n");
print(STDERR "\n\n"); # print(STDERR "\n\n");
my $unipass = "mytest"; # print(STDERR "TEST\n");
$unipass =~ s/(.)/$1\0/g; # convert ASCII to unicaode # Generate our response
my $username = "nigel"; my $ourResponse = NtChallengeResponse($challenge,$unicodePassword);
# print(STDERR "Calculate: len = ".length($ourResponse).", hex = ".unpack("H*",$ourResponse)."\n");
# print(STDERR "\n\n");
print(STDERR "TEST\n"); # Check responses match
my $ourResponse = NtChallengeResponse($challenge,$unipass); if ($NtResponse eq $ourResponse) {
print(STDERR "Calculate: len = ".length($ourResponse).", hex = ".unpack("H*",$ourResponse)."\n"); return MOD_RES_ACK;
print(STDERR "\n\n"); }
# MSCHAPv2 # MSCHAPv2
} elsif ($rawResponse2) { } elsif ($rawResponse2) {
$server->log(LOG_DEBUG,"[MOD_AUTH_MSCHAP] This is a MSCHAPv2 challenge");
# Pull off challenge & response
my $challenge = @{$rawChallenge}[0]; my $challenge = @{$rawChallenge}[0];
my $response = substr(@{$rawResponse2}[0],2); my $response = substr(@{$rawResponse2}[0],2);
print(STDERR "RECEIVED\n"); # print(STDERR "RECEIVED\n");
print(STDERR "Challenge: len = ".length($challenge).", hex = ".unpack("H*",$challenge)."\n"); # print(STDERR "Challenge: len = ".length($challenge).", hex = ".unpack("H*",$challenge)."\n");
print(STDERR "Reponse : len = ".length($response).", hex = ".unpack("H*",$response)."\n"); # print(STDERR "Reponse : len = ".length($response).", hex = ".unpack("H*",$response)."\n");
print(STDERR "\n\n"); # print(STDERR "\n\n");
print(STDERR "CHOPPED OFFF!!\n"); # print(STDERR "CHOPPED OFFF!!\n");
# Grab peer challenge and response
my $peerChallenge = substr($response,0,16); my $peerChallenge = substr($response,0,16);
my $NtRespnse = substr($response,24,24); my $NtResponse = substr($response,24,24);
print(STDERR "Challenge: len = ".length($peerChallenge).", hex = ".unpack("H*",$peerChallenge)."\n"); # print(STDERR "Challenge: len = ".length($peerChallenge).", hex = ".unpack("H*",$peerChallenge)."\n");
print(STDERR "NTRespons: len = ".length($NtRespnse).", hex = ".unpack("H*",$NtRespnse)."\n"); # print(STDERR "NTRespons: len = ".length($NtResponse).", hex = ".unpack("H*",$NtResponse)."\n");
print(STDERR "\n\n"); # print(STDERR "\n\n");
my $unipass = "mytest";
$unipass =~ s/(.)/$1\0/g; # convert ASCII to unicaode
my $username = "nigel";
print(STDERR "TEST\n"); # print(STDERR "TEST\n");
# Generate our challenge and our response
my $ourChallenge = ChallengeHash($peerChallenge,$challenge,$username); my $ourChallenge = ChallengeHash($peerChallenge,$challenge,$username);
my $ourResponse = NtChallengeResponse($ourChallenge,$unipass); my $ourResponse = NtChallengeResponse($ourChallenge,$unicodePassword);
print(STDERR "Calculate: len = ".length($ourResponse).", hex = ".unpack("H*",$ourResponse)."\n"); # print(STDERR "Calculate: len = ".length($ourResponse).", hex = ".unpack("H*",$ourResponse)."\n");
print(STDERR "\n\n"); # print(STDERR "\n\n");
# Check response match
if ($NtResponse eq $ourResponse) {
return MOD_RES_ACK;
}
} }
return MOD_RES_SKIP; return MOD_RES_SKIP;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment