575 lines
20 KiB
Plaintext
575 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) :
|