
Greetings!  This has been written as informative document which will likely
be used by two groups of people:  new crackers, and new administrators who
would like to know about likely points of attack.  This is written entirely
from the cracker's perspective and tells _how_ to gain access, there are
however Administrator's notes that give ideas on what an Admin can do to
make it harder on the new cracker.  The author of this document is _not_ a
master cracker, and has very little knowledge at the system level of cracking.

Here we go:

So you want to crack a Unix system?  Well the big assumption that you already
have access to _some_ Unix system will be made.  Here are the following items
that you can achieve in order of greatness:

1.  Root password.  Kind of the Holy Grail, with this you can do just about
anything.  The only difference that will exist between you and the _real_
admin is tha he will have physical access to the machine.

2.  Root access.  As above except you don't know the password.

3.  User X's password.  A particular target user's password, item 1 is the
same thing with the target user being root.

4.  User X's account access.  Same as above but you don't know their password.

5.  Some user's password.  Just some random user, you don't pick them, you
got them because they were easy.

6.  Some user's account access.  Same as above but you don't know their
password.

7.  Wreaking havoc with tools already available to you, such as deleting
other's files, crashing the system, etc.


Here are some basic tools you should have:

1.  Dan Farmer's COPS scripts, and/or TAMU's Tiger Scripts.

2.  Crack (Unix password cracker than run on several machines at once)

3.  CrackerJack (A DOS or OS/2 program that cracks Unix passwords)

4.  A fair knowledge of Unix.  If you don't know the basic commands,
learn them.  If you don't know how to write shell scripts or C code,
learn the basics of that, those topics are not covered here.

Others:  Depending on the level of complexity you wish to delve into,
getting access to past CERT advisories and anything put out by 8lgm
could also be useful.  Also subscribe to comp.security.unix newsgroup.


We'll start by cracking your local system.  Getting a specific user
is very difficult to do.  We will start with getting access to _some_
user.  That way you can perform all future hacking from that user's
account, reducing the likelyhood of things being traced back to you.

Get the passwd file.  There is typically two ways to do this.  It is
either stored in /etc/passwd, and you simply cat the file.  Or, you
type "ypcat passwd" and it will pull it off a ypserver.  You will
want to redirect the output to a file so you can crack it.  Some
systems are starting to move toward "shadowed" password files, I've
never seen one of these, but apparently only root can read the passwd
file on such a system, if that is the case, the following won't help
you.

Now that you have the passwd file, it's time to start cracking.  In
most cases it is not wise to run Crack on system because it runs for
long periods and is likely to be seen.  However, if this option is
available to you, it can be very effective since it can crack many
passwords much quicker than the alternative since it has the ability
to run on multiple systems.  One thing to do is to use the next method
to get _a_ account's password, then use that account to run Crack.
The alternative I have been referring to is CrackerJack, this is a
solid program that runs on DOS and OS/2 machines.  You simply have
to copy your passwd file to the PC with CrackerJack and give it a
dictionary file.  If you are in an educational environment, their
are often PC labs that are accessible at late hours.  You can use
several small dictionaries and run CrackerJack on several PC's, using
each PC for several hours.  This is a very effective way to crack.
The documentation with both of these is fairly complete, so no detail
will be given on how to do the above.

**Administrator's note:  Ways to prevent the above include:
* Using a shadowed passwd file, so Joe User can't get a look at it
(I think, never seen one, as mentioned earlier).
* There are several programs available that will do a quickcheck
when a user tries to change their password to make sure they don't
have it as something stupid.
* Run Crack.  If you are the administrator, you can easily run it
across all machines on your lan during low-use hours (1am - 5am)
This being done on a regular basis (I'd recommend monthly if not
weekly, it can be automated with a cron job) can keep weak passwords
off your system.  If you are in an educational setting, new users
tend to come in large groups (semester starts), this is the ideal
time for the cracker to attack, since their are lots of new, usually
clueless users with weak passwords.  You should up _your_ checking
during these times.
**

Okay!  That's one way to gain access to someone else's account, let's
move on to another.  The key here is:  If you can get user X to run
program Y, you can gain access to their account, this includes root.
First we'll go into what program Y would need to do:

1. Create a SUID shell script.  This attack is my least favorite
since many systems are set up so that SUID scripts don't work from
most filesystems.  However, /tmp seems to be an oversite in most
cases.  Generally SUID programs can exist and be run from /tmp.
The idea behind SUID is that when the program is run, it runs under
the owner's account.  So if the program executes a shell, that shell
is owned by the owner of the file, making the runner of the file
that person (for all practical purposes).  You can make a program
SUID by doing a "chmod 6xxx filename", the xxx would be the normal
chmod settings, "man chmod" for more info.

2. Add you to their .rhosts file.  Reasoning:  Whenever your try
to rlogin to someone else's account, the rlogin program will look
in that users home directory for a .rhosts file.  If the party
trying to rlogin in listed in that file, from a particular machine,
also listed in that file, rlogin will not ask for a password.
.rhosts is set up like the following:
<machinename> <username>

3. The above two will get you access to their account, the following
will give you a way to do the above two.  You can add a line to their
.login, .cshrc, or .logout file so that will execute a program everytime
they login.  One idea is illustrated in the following pseudocode:

if /tmp/backdoor exists run /tmp/backdoor

That way you only create /tmp/backdoor as needed and they don't get
an error when it is not there.


To be continued.....
