769 lines
20 KiB
Plaintext
769 lines
20 KiB
Plaintext
|
|
A Beginner's Guide To Unix
|
|
--------------------------
|
|
|
|
The information contained in this file
|
|
is by no means new or original. I was
|
|
simply asked to compile some basic
|
|
commands and concepts for the access
|
|
and use of Unix systems. I would like
|
|
to give credit to the many other files
|
|
which I have gained this information
|
|
from, and to the people who have helped
|
|
me learn what I know today.
|
|
|
|
I will not cover any detailed or
|
|
complicated features of Unix. I am
|
|
merely going to provide the means to
|
|
access low-security systems and
|
|
navigate the shell.
|
|
|
|
Access:
|
|
-------
|
|
|
|
All Unix systems are provided with
|
|
default accounts. They are used for
|
|
system administration and such. Many
|
|
system operators are too lazy or naive
|
|
to remove them. You may find the
|
|
following accounts on a system, with no
|
|
passwords:
|
|
|
|
daemon
|
|
uucp
|
|
bin
|
|
adm
|
|
sysadm
|
|
admin
|
|
sysadmin
|
|
nuucp
|
|
sync
|
|
|
|
Others may have been added, such as:
|
|
|
|
user
|
|
guest
|
|
demo
|
|
test
|
|
public
|
|
help
|
|
field
|
|
system
|
|
operator
|
|
|
|
You can also try common first or last
|
|
names (john,fred,smith,etc...). Be sure
|
|
to use lowercase for the login name. If
|
|
you enter a capital letter as the first character, the system will assume that
|
|
you terminal is incapable of displaying
|
|
lowercase. From then on, in order to
|
|
enter capital letters you must precede
|
|
each by a "\". This can become quite
|
|
annoying, and you will probably never
|
|
see an account with a capital letter as
|
|
the first character.
|
|
|
|
Of the above defaults, the uucp or
|
|
nuucp accounts are often used for Unix
|
|
to Unix communications (uucp stands for
|
|
Unix to Unix CoPy). If this is the
|
|
case, the system will give send the
|
|
uucp identifier, "Shere". In this case,
|
|
the account is basically useless
|
|
unless you can call via another system
|
|
through the uucp command.
|
|
|
|
The sync account is a self-running Unix
|
|
management account. If present, it will
|
|
run a few housekeeping chores and log
|
|
off. The only reason I included this is
|
|
that many systems provide a greeting
|
|
message or something of the sort when
|
|
you log on as sync. Occasionally you
|
|
can obtain information which will help
|
|
you find an account.
|
|
|
|
If you cannot get in via the above
|
|
methods, try using "who". If present,
|
|
it will display a list of all accounts
|
|
currently online. You can try those
|
|
and hope they have no password.
|
|
|
|
If you are desperate, just hack
|
|
blindly. Often the login name and
|
|
password are the same. You can also
|
|
try initials (as in names...rlb,jhs,
|
|
etc...).
|
|
|
|
Once you are in:
|
|
----------------
|
|
|
|
If you make it through the front door,
|
|
you do not necessarily have access to
|
|
the shell. Often accounts have programs
|
|
run automatically for specific users,
|
|
such as system administration programs
|
|
(useful), accounting programs, etc...
|
|
In this case, you can try to break out
|
|
of the program (either through a menu
|
|
option or a loophole). Try various
|
|
escape/break related control characters
|
|
(escape [ascii 27], ctrl-c [ascii 3],
|
|
etc...).
|
|
|
|
When you are in the shell, you will be
|
|
greeted by one of two prompts. Either
|
|
a "$", denoting basic access, or a "#",
|
|
denoting superuser access. If you have
|
|
superuser access, most of your work may
|
|
be done (depending on other security
|
|
measures that have been taken).
|
|
Either way, the following will help
|
|
you get higher access.
|
|
|
|
First, you'll need some basic commands
|
|
for moving around:
|
|
|
|
stty
|
|
This command sets your terminal
|
|
characteristics. Before you attempt
|
|
anything else, you should set some
|
|
important ones. First, your delete
|
|
character. Many systems do not use
|
|
the common ctrl-h [ascii 8]. Also,
|
|
the delete on your computer may not
|
|
be the standard ctrl-h. To set your
|
|
delete character, type:
|
|
|
|
stty erase (character)
|
|
|
|
Do not use the parentheses. Spacing
|
|
is important. You can replace
|
|
(character) by hitting your own
|
|
delete key, or typing a control key
|
|
sequence.
|
|
|
|
If you would like to enter something
|
|
a bit more visual to reassure
|
|
yourself, you can use:
|
|
|
|
stty erase \^(character)
|
|
|
|
To enter a control character without
|
|
actually hitting control. Replace
|
|
character with the desired control
|
|
character. Ex:
|
|
|
|
stty erase \^h
|
|
|
|
Sets the erase character to ctrl-h.
|
|
|
|
If you make a mistake doing this,
|
|
hit return and start over
|
|
(obviously if the system does not
|
|
know your erase character, you
|
|
cannot edit your mistakes).
|
|
|
|
Once your control character is set,
|
|
you will want to set your break
|
|
character. This is vital for file
|
|
editing, which we will cover
|
|
shortly. To set the break character,
|
|
type:
|
|
|
|
stty intr (character)
|
|
|
|
The same options as the delete
|
|
character apply.
|
|
|
|
To view the current setting, simply
|
|
enter stty by itself. Often, the
|
|
system will already be configured to
|
|
your liking. Occasionally, the stty
|
|
command will not display the erase
|
|
or break (intr) characters, in which
|
|
case you should enter them to be
|
|
sure. All control characters will be
|
|
displayed in the ^(character)
|
|
format.
|
|
|
|
ls
|
|
This is the list-files command. It
|
|
will show the names of all non-
|
|
hidden files in the current
|
|
directory. The display will either
|
|
be a single list or multi-column
|
|
display. The command lc toggles
|
|
between the two. In either case, the
|
|
files will be sorted alphabetically
|
|
(numbers first, followed by most
|
|
punctuation symbols, then capital
|
|
letters, and finally lowercase
|
|
letters).
|
|
|
|
ls has many options, which I will
|
|
cover later.
|
|
|
|
pwd
|
|
Displays the current directory path
|
|
from the root directory (/).
|
|
|
|
cd
|
|
Change directory. Those familiar
|
|
with the MS-DOS environment will
|
|
have no trouble with this command.
|
|
To change directories, simply supply
|
|
a path from the root directory.
|
|
To go to the "lib" directory, within
|
|
the "usr" directory, you would
|
|
enter:
|
|
|
|
cd /usr/lib
|
|
|
|
cat
|
|
Displays a file. Often it is
|
|
difficult to differentiate between
|
|
text files and data files. If you
|
|
wish to abort the display, type
|
|
your break character.
|
|
|
|
Cat requires the full pathname to
|
|
access files outside the current
|
|
directory, but for files within
|
|
the current directory, the filename
|
|
will suffice.
|
|
|
|
Ex:
|
|
|
|
cat /etc/passwd
|
|
|
|
Will display the passwd file within
|
|
the etc directory. This file is
|
|
present on all systems. It is
|
|
immensily useful in gaining higher
|
|
access (basically, it is necessary
|
|
to gain any access).
|
|
|
|
These commands will help you for now.
|
|
After setting your terminal options,
|
|
enter:
|
|
|
|
cd /etc
|
|
|
|
We will be doing most of our work in
|
|
there for the time being. You should
|
|
have had your buffer on long before
|
|
this on the system, but turn it before
|
|
executing the following command if you
|
|
haven't:
|
|
|
|
cat /etc/passwd
|
|
|
|
Often these files are quite large, so
|
|
after a while you may want to abort it.
|
|
Often what you are looking for will be
|
|
within the first few lines.
|
|
|
|
Each line of the passwd file represents
|
|
an individual user. There are seven
|
|
fields to each entry. A typical entry
|
|
looks like this:
|
|
|
|
user:x:100:100:Elmo:/usr/user:/bin/sh
|
|
|
|
The first field is the login ID. The
|
|
second is the password field. In newer
|
|
releases, it will contain an "x". Older
|
|
releases may contain the actual
|
|
encrypted password (a string of
|
|
seemingly random characters). On new
|
|
systems the encrypted password are
|
|
found in the /etc/shadow file. The
|
|
third field is the user ID number.
|
|
Fourth is the group ID number (more
|
|
on groups later). Fifth is merely a
|
|
comment about this user (often their
|
|
name, or in an administrative account,
|
|
its duties). Sixth is the home
|
|
directory. The system will place you
|
|
in your home directory when you log on.
|
|
The final field contains the path and
|
|
file names for the default shell or
|
|
program. If this field is empty, the
|
|
system defaults to /bin/sh.
|
|
|
|
You cannot gain a user's password via
|
|
this file. You may be able to obtain
|
|
access through a higher account,
|
|
however. When looking for high-level
|
|
accounts, you will want to examine the
|
|
fourth field. The lower numbers often
|
|
denote administrative accounts. The
|
|
group "root" belongs to is most likely
|
|
what you will want.
|
|
|
|
To discover more about the groups, view
|
|
the /etc/group file. This contains the
|
|
group names, the encrypted password
|
|
required to change into/out of this
|
|
group (almost always "NONE"), the group
|
|
ID number (to compare to the passwd
|
|
file), and a list of the group's
|
|
members.
|
|
|
|
You will want to scan the passwd and
|
|
group files to find any accounts that
|
|
belong to the same group as root, or
|
|
a group which root is in. Often root
|
|
will be the only member of its group,
|
|
so you will have to look for other
|
|
administrative account groups (those
|
|
containing such accounts as adm,admin,
|
|
sysadm,sysadmin and so on).
|
|
|
|
Once you have found these accounts,
|
|
you can attempt to gain their access.
|
|
The command:
|
|
|
|
su (login ID)
|
|
|
|
allows you to essentially "become" that
|
|
user. Replace (login ID), of course,
|
|
with the account you want to assume.
|
|
If the account has no password, the
|
|
process is automatic. Otherwise, you
|
|
will be prompted for a password. You
|
|
can try the login ID as a password, but
|
|
this may not work. If it does, make a
|
|
note of it. Otherwise, you can try
|
|
other methods, or go on to another
|
|
account.
|
|
|
|
Hopefully, you will find an account
|
|
with no password. If you have found
|
|
an older system, without the
|
|
/etc/shadow file, an empty password
|
|
field (::) will tell you immediately
|
|
which accounts do not have passwords.
|
|
If it is a newer system, it will
|
|
contain an "x" regardless of the
|
|
presence of the password status.
|
|
|
|
If you find yourself in this dilemna,
|
|
you may still be able to find an list
|
|
of those accounts without passwords.
|
|
|
|
If you have the superuser ("#") prompt,
|
|
you may be able to read the /etc/shadow
|
|
file. The format for this file is:
|
|
|
|
login ID:(encoded pw):6480:14:28
|
|
|
|
The first field is the same as the
|
|
login ID found in the /etc/passwd file.
|
|
Each entry in /etc/passwd should have
|
|
a corresponding one in /etc/shadow. The
|
|
second field will be blank, denoting
|
|
no password, or contain the
|
|
afformentioned "random" characters.
|
|
Third is a numeric code describing
|
|
when the password was last changed.
|
|
Fourth and fifth are the minimum and
|
|
maximum number of days between
|
|
mandatory password changes. Often the
|
|
last two fields are empty, which means
|
|
users are not required to change thier
|
|
passwords.
|
|
|
|
Here, again, you should look for any
|
|
accounts without passwords, and
|
|
examine the group file as mentioned.
|
|
|
|
Now, hopefully, you will have some
|
|
decent access. Many of the accounts
|
|
with no password are that way for a
|
|
reason - they do not allow shell
|
|
access; but that never stopped anyone.
|
|
|
|
If you discover an account that runs
|
|
a program and then logs off, or runs
|
|
a program which allows you to
|
|
interact in a boring way, you can use
|
|
this to your advantage. Look in the
|
|
seventh field of this account's passwd
|
|
information. It will contain the
|
|
path and filename of the program being
|
|
run.
|
|
|
|
At this point, security on most systems
|
|
is extremely low. Many system operators
|
|
are sure that by stopping you from
|
|
directly getting access, they have
|
|
stopped you totally. By "tricking" the
|
|
system, you can get access indirectly.
|
|
|
|
If you find a program being run, go
|
|
back to the account which gave you
|
|
shell access. Then enter the directory
|
|
where the program was (do not include
|
|
the file "/" and the filename). You
|
|
want to change the filename of the
|
|
program. To do this, type:
|
|
|
|
mv (filename) (backup filename)
|
|
|
|
To change /usr/prog to /usr/prog.b, you
|
|
would enter:
|
|
|
|
mv /usr/prog /usr/prog.b
|
|
|
|
Make sure you remember the filename
|
|
you give it. It is also a good idea
|
|
to keep it in the same directory. Now,
|
|
you have to create a dummy file to
|
|
replace it. We will have to use the
|
|
"ed" file editor to do this. MAKE SURE
|
|
YOU HAVE SET YOU BREAK CHARACTER. You
|
|
cannot use ed without having a break
|
|
character. To make the file, type:
|
|
|
|
ed (filename)
|
|
|
|
Where (filename) is the name of the
|
|
file you just renamed. Use the OLD name
|
|
(the one in the passwd file)! ed will
|
|
respond with:
|
|
|
|
?(filename)
|
|
|
|
meaning the file does not exist yet.
|
|
|
|
Some basic ed commands are:
|
|
|
|
q
|
|
Quit. If you attempt to quit after
|
|
making changes, ed will not quit
|
|
until you hit "q" again (this is to
|
|
remind you to save changes).
|
|
w
|
|
Write file (saves all the changes
|
|
you make).
|
|
,p
|
|
Displays all lines.
|
|
/(string)
|
|
Searches the buffer for (string),
|
|
and displays that line.
|
|
a
|
|
Add lines (starting at the current
|
|
line).
|
|
i
|
|
Insert lines at the current line.
|
|
d
|
|
Delete the current line.
|
|
h
|
|
Turns help on (shows verbose error
|
|
messages).
|
|
|
|
Entering a line number will bring you
|
|
to that line. When editting a file
|
|
which already exists, ed will show you
|
|
the current number of bytes in the file
|
|
rather than "?(filename)". If you
|
|
attempt to write a file, and ed replies
|
|
with "?(filename)", you do not have
|
|
access to write that file.
|
|
|
|
Now, back to the dummy file. Type "a"
|
|
to add lines. Enter:
|
|
|
|
echo "Blah"
|
|
/bin/sh
|
|
|
|
Then, after pressing return on the
|
|
/bin/sh line, type your break
|
|
character. Write the file and quit the
|
|
editor. You now have your dummy program
|
|
set up. The command "echo" is a simple
|
|
print command. You can enter as many
|
|
as you like, or none at all. They are
|
|
merely to reassure you that your
|
|
program is running. The important part
|
|
of this is the "/bin/sh", which runs
|
|
the shell program.
|
|
|
|
You must now give all users access to
|
|
your program, so the account will be
|
|
able to use your newly created
|
|
program. Type:
|
|
|
|
chmod +rwx
|
|
|
|
This will give read, write, and execute
|
|
permissions to all users (more on
|
|
permissions some other day).
|
|
|
|
You should now logon again as the
|
|
account which uses this program.
|
|
If you did everything right, you should
|
|
now have control of the shell,
|
|
hopefully with superuser access ("#"
|
|
prompt). If you still do not have
|
|
superuser access, go back and try
|
|
something else. Be sure to do the next
|
|
few steps whether it works or not, to
|
|
insure your continued use of the
|
|
system. Delete your dummy program by
|
|
typing:
|
|
|
|
rm (filename)
|
|
|
|
Be sure to include the directory path
|
|
in the filename, as before. Now,
|
|
rename the old file back to its
|
|
original name (just reverse the
|
|
filenames in the previous rename
|
|
command).
|
|
|
|
Now everything is back to normal. If
|
|
you did not get access, you will have
|
|
to go back to your old account to set
|
|
the files back to normal. Make sure you
|
|
do this, or you may cause damage to the
|
|
system. This will result in higher
|
|
security. Also, real hackers never
|
|
damage systems for without cause.
|
|
Laziness is not an excuse.
|
|
|
|
If you are still without decent access,
|
|
you will have to consult another file.
|
|
I may write another soon on more ways
|
|
to gain access, but for now, this
|
|
should help enough people. From now on,
|
|
I will assume you have achieved
|
|
superuser access within an
|
|
administrative group. You will most
|
|
likely want an account of your own now.
|
|
Use the ed command to edit the
|
|
/etc/passwd file. Somewhere in the
|
|
mid-beginning section (within the first
|
|
4-12 lines), add an account using one
|
|
of the default account not already
|
|
present (from the first list, if
|
|
possible), or commandeer an unused (be
|
|
sure it is unused) default account
|
|
already there.
|
|
|
|
Set you ID number and group to those
|
|
of the root account (usually 0:3).
|
|
Set your directory wherever you like,
|
|
and set the shell filename to either
|
|
/bin/sh, or leave it blank. In the
|
|
password (second) field, what you
|
|
enter depends on the system. If it is
|
|
an older system where the encrypted
|
|
passwords are stored in the passwd
|
|
file, just enter whatever password you
|
|
like there. The system will encrypt it
|
|
for you when you save it. If it is the
|
|
newer "x" system, put an "x" there, and
|
|
do the following, otherwise skip this.
|
|
|
|
New system users will have to enter
|
|
the command:
|
|
|
|
/etc/pwconv
|
|
|
|
This command will recreate the
|
|
/etc/shadow file based on the
|
|
information in the passwd file. Just
|
|
to be sure, ed the shadow file, and
|
|
leave the password field blank for
|
|
your newly created account (use the
|
|
/(string) command within ed to jump
|
|
directly to your login ID).
|
|
|
|
Now, you can call back as your new
|
|
account. You should enter:
|
|
|
|
passwd
|
|
|
|
to create a password for your account
|
|
if it doesn't already have one.
|
|
|
|
If all has gone well, you now have an
|
|
account of your own. I will now give
|
|
a list of other commands which you can
|
|
play around with.
|
|
|
|
Unix commands:
|
|
--------------
|
|
|
|
banner (string)
|
|
This is a "fun" command, which will
|
|
take (string) and expand it into
|
|
block letters on your display.
|
|
|
|
write (user)
|
|
Will send a message to another user.
|
|
After entering the command, the
|
|
system will wait for you to type a
|
|
message and terminate it with your
|
|
eof character. Change your eof
|
|
character by entering:
|
|
|
|
stty eof (character)
|
|
|
|
wall
|
|
Like write, but sends to all users.
|
|
|
|
who
|
|
Displays a list of everyone online.
|
|
|
|
mail (user)
|
|
Send email to any user in the passwd
|
|
file. To read your mail, just type
|
|
mail.
|
|
|
|
exit
|
|
Logout of the system. I should have
|
|
mentioned this before, but I forgot.
|
|
You can also use your eof
|
|
character at the shell prompt to
|
|
logout.
|
|
|
|
echo
|
|
Prints text or variables, as shown
|
|
before.
|
|
|
|
env
|
|
Display all variables in your
|
|
environment. More on shell
|
|
variables soon.
|
|
|
|
rmdir (directory)
|
|
Delete a directory.
|
|
|
|
mkdir (directory)
|
|
Make a directory.
|
|
|
|
cp (original) (backup)
|
|
Copy a file.
|
|
|
|
grep (string) (filename)
|
|
Searches through (filename) until
|
|
it finds (string), and then
|
|
displays the entire line (string)
|
|
was found on.
|
|
|
|
date (time & date)
|
|
Alone, date displays the time and
|
|
date. It can also be used to set
|
|
it.
|
|
|
|
cal (date)
|
|
Alone, cal displays a calendar of
|
|
the current month. With optional
|
|
month and year, it will display
|
|
any year from 1 to 9999.
|
|
|
|
There are many more commands, but to
|
|
explain them all could take forever.
|
|
Most systems contain online help files
|
|
which you can access by typing either:
|
|
|
|
man (command)
|
|
|
|
or:
|
|
|
|
help (command)
|
|
|
|
For a list of commands, look in the
|
|
various "bin" directories. They
|
|
contain the actual programs.
|
|
|
|
Variables:
|
|
----------
|
|
|
|
The shell allows the use of variables.
|
|
All variables are represented by
|
|
capital letters. You can create your
|
|
own, or view/change standard system
|
|
variables. Some standard variables are:
|
|
|
|
PATH
|
|
This will show the order the shell
|
|
searches in to find commands. You
|
|
will most likely find a number of
|
|
directories ending in "bin". An
|
|
example could be:
|
|
|
|
:/bin:/usr/bin:/usr/lib/bin:/etc
|
|
|
|
This means that when you type a
|
|
command, the system checks to
|
|
directories in that order before
|
|
finally giving up and reporting an
|
|
error if the command is not found
|
|
(All commands are files).
|
|
|
|
PS1
|
|
This is the main shell prompt,
|
|
usually "$" or "#", depending on
|
|
your access. You can change this
|
|
to whatever you like.
|
|
|
|
TERM
|
|
|
|
Some systems keep track of what
|
|
type of terminal you are using, for
|
|
use in formatting output (usually
|
|
through other programs).
|
|
|
|
LOGNAME
|
|
The login ID you are using.
|
|
|
|
HOME
|
|
Your home directory.
|
|
|
|
TZ
|
|
Timezone.
|
|
|
|
MAIL
|
|
The file your mail is sent to.
|
|
|
|
There are others, but they tend to vary
|
|
with the account. Enter the env command
|
|
to display the variables in use.
|
|
|
|
Variables you create within shell
|
|
programs (such as the dummy program
|
|
that was discussed before) retain thier
|
|
values for the life of the program
|
|
only (they do not affect the other
|
|
shell variables).
|
|
|
|
You can change a variable like this:
|
|
|
|
TERM=ansi
|
|
|
|
Whenever you want to view a variable,
|
|
or use it for another purpose, precede
|
|
it with a "$". Ex:
|
|
|
|
echo $LOGNAME
|
|
|
|
will display your login ID.
|
|
|
|
Misc:
|
|
-----
|
|
|
|
I seem to have run out of memory, so
|
|
forget it for now. Hopefully I'll write
|
|
so more soon...
|
|
|
|
- Midnite Raider
|
|
|
|
|
|
|
|
|
|
[4] Tfiles: (1-8,?,Q) : |