mirror of
https://github.com/rapid7/metasploit-framework
synced 2024-10-29 18:07:27 +01:00
83d1f8d499
We use OpenSSL 1.0.0 in installed environments. Previously, John the Ripper was compiled against 0.9.8 which prevented it from running. This recompiles the same version (jtr 1.7.8 jumbo 2) against OpenSSL 1.0.0. [FIXRM #7834]
90 lines
2.7 KiB
Perl
90 lines
2.7 KiB
Perl
#!/usr/bin/perl -w
|
|
# Usage: sap_prepare.pl csv-input sap-codeB-output sap-codevnG-output
|
|
# csv-input: XLS-exported table USH02 or USR02
|
|
# tab-speparted e.g. column 4:username column 17:bcode column 24:codvn G
|
|
# sap-codeB-output: username:username<spaces>$bcode
|
|
# sap-codevnG-output: username:Username<spaces>$codvnG
|
|
#
|
|
# (all other formats with the right column names should work)
|
|
# sap uses the username as salt. those have different length, so we needed to come up w/ our
|
|
# own format. that is: username<space-padding-to-40>$HASHCODE
|
|
#
|
|
# evil spaghetti code, but works. sorry for the eye cancer ;-)
|
|
|
|
$SALT_LENGTH = 40;
|
|
|
|
if ($#ARGV != 2) {
|
|
die ("usage = $0 csv-input sap-codeB-output sap-codevnG-output \n");
|
|
}
|
|
|
|
open INPUT_FILE, "$ARGV[0]" or die ("Can't open input-file ($ARGV[0])\n");
|
|
open CODEB_FILE,">>$ARGV[1]" or die ("Can't open codeb-file ($ARGV[1])\n");
|
|
open CODEG_FILE,">>$ARGV[2]" or die ("Can't open codeg-file ($ARGV[2])\n");
|
|
|
|
print "data from >>$ARGV[0]<<\nto sap-codeB-output: >>$ARGV[1]<<\n";
|
|
print "and sap-codevnG-output: >>$ARGV[2]<<\n\n";
|
|
|
|
$line = "";
|
|
$pos_bname=-1;
|
|
$pos_codeb=-1;
|
|
$pos_codeg=-1;
|
|
$count=0;
|
|
|
|
until ($line =~ /BNAME/) {
|
|
$line=<INPUT_FILE>;
|
|
$count++;
|
|
}
|
|
|
|
chomp($line);
|
|
@tmp = split(/\t/, $line);
|
|
|
|
for ($i=0;$i<=$#tmp;$i++) {
|
|
if ($tmp[$i]=~ /BNAME/) { $pos_bname=$i }
|
|
elsif ($tmp[$i]=~ /BCODE/) { $pos_codeb=$i }
|
|
elsif ($tmp[$i]=~ /PASSCODE/) { $pos_codeg=$i }
|
|
}
|
|
print "Column: $#tmp BNAME: $pos_bname BCODE: $pos_codeb PASSCODE: $pos_codeg\n";
|
|
|
|
if (-1==$pos_bname || (-1==$pos_codeg && -1==$pos_codeb ) ) {
|
|
print "BNAME column not found OR both hash-columns are missing \n";
|
|
exit 0;
|
|
}
|
|
|
|
while ($line=<INPUT_FILE>) {
|
|
$count++;
|
|
chomp($line);
|
|
@tmp = split(/\t/, $line);
|
|
if ($#tmp<$pos_bname || ($#tmp<$pos_codeb && $#tmp<$pos_codeg)) {
|
|
print "******** line $count in csv file has the wrong format ********\n";
|
|
next;
|
|
}
|
|
if ($pos_codeg!=-1 && $tmp[$pos_codeg]=~/[a-zA-Z0-9]/) { # both hashes
|
|
print "username: $tmp[$pos_bname] codeB: $tmp[$pos_codeb] codeG: $tmp[$pos_codeg] \n";
|
|
$strN = $tmp[$pos_bname];
|
|
$strSALT = "$strN"." "x($SALT_LENGTH-length($tmp[$pos_bname]));
|
|
$strB = "$tmp[$pos_codeb]";
|
|
$strG = "$tmp[$pos_codeg]";
|
|
print CODEB_FILE "$strN:$strSALT\$$strB\n";
|
|
print CODEG_FILE "$strN:$strSALT\$$strG\n";
|
|
}
|
|
elsif ($pos_codeb!=-1 && $tmp[$pos_codeb]=~/[a-zA-Z0-9]/ ) { # only bcode
|
|
print "username: $tmp[$pos_bname] codeB: $tmp[$pos_codeb] \n";
|
|
$strN = $tmp[$pos_bname];
|
|
$strSALT = "$strN"." "x($SALT_LENGTH-length($tmp[$pos_bname]));
|
|
$strB = "$tmp[$pos_codeb]";
|
|
print CODEB_FILE "$strN:$strSALT\$$strB\n";
|
|
}
|
|
else {
|
|
print "******** line $count in csv file has the wrong format ********\n";
|
|
}
|
|
}
|
|
|
|
close INPUT_FILE;
|
|
close CODEB_FILE;
|
|
close CODEG_FILE;
|
|
|
|
print "\nDone!\n";
|
|
exit 0;
|
|
|
|
|