home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 1 / HACKER1.ISO / miscpub1 / pwhkr.tj2 < prev    next >
Text File  |  1992-09-26  |  9KB  |  244 lines

  1. The LOD/H Technical Journal: File #6 of 10
  2.  
  3.  
  4. A Discreet Unix Password Hacker
  5. -------------------------------
  6.  
  7. By Shooting Shark / Tiburon Systems  4 Mar 87
  8.  
  9.      Imagine this familiar situation:  you have an account on a Unix system.
  10. Perhaps it's your account on your school's VAX, or an account you've hacked
  11. yourself.  You'd like to collect more passwords to this system - perhaps
  12. to the 'root' or 'bin' accounts so you can take control of the system, or the
  13. password of the class hotshot who's going to get an 'A' on his compiler
  14. project and upset the curve unless you go in and erase all of his files.
  15. The problem is getting these passwords.  The most obvious method would be to
  16. manually enter login/password combinations until you found one.  This is
  17. slow (>10 seconds per try), will give you sore fingers, and multiple
  18. invocations of the 'login' program may be noticed.  You could write a program
  19. on your micro to dial up the site (*if* it has a dialup) and try passwords
  20. from a login/password pool, but this is just as slow, ties up your computer
  21. and your phone line, and again is subject to easy detection.  The solution
  22. to this problem is to have the system itself hack passwords for you.
  23. It can do this unattended and at a considerable speed while you go about
  24. your life, and will be difficult to detect by system demigods.
  25.  
  26. Here is the C source for my program.  Upload it to your Unix site and
  27. compile it.
  28.  
  29. --- cut here ---
  30. /*
  31.  * hpw.c v1.4: 8 October '86
  32.  * Written by Shooting Shark / Tiburon Systems
  33.  *
  34.  */
  35.  
  36. #include <sys/file.h>
  37. #include <stdio.h>
  38. #include <pwd.h>
  39. #include <signal.h>
  40.  
  41. struct     passwd *pwd, *getpwname(name);
  42.  
  43. int   len, abort(), endpwent();
  44.  
  45. char  crbuf[30], *strcpy(), *crypt(), *getpass(), *getlogin(), *pw, 
  46. pwbuf[10];
  47.  
  48. main(argc, argv)
  49. int argc;
  50. char *argv[];
  51. {
  52.  
  53. FILE *fopen(), *fp;
  54.  
  55. char *uname;
  56. signal(SIGINT,abort);
  57.  
  58.  
  59. if (argc !=3) {
  60.      printf("usage : %s username pwfile\n",argv[0]);
  61.      exit(-1);
  62.      }
  63.  
  64.  
  65.  
  66.  
  67.  
  68. if (!(pwd =getpwnam(argv[1]))) {
  69.      printf("unknown user : %s\n",argv[1]);
  70.      exit(-1);
  71.      }
  72.  
  73. if ((fp = fopen(argv[2], "r")) == NULL) {
  74.      perror(argv[2]);
  75.      exit(-1);
  76.      }
  77.  
  78.  
  79.  
  80. sprintf(crbuf,"%s",pwd->pw_passwd);
  81.  
  82. printf("hacking %s\n",argv[1]);
  83. printf("encrypted password : %s\n",crbuf);
  84.  
  85. while (fgets(pwbuf, 20, fp) != NULL) {
  86.      pwbuf[strlen(pwbuf)-1] = '\0';
  87.      pw = crypt(pwbuf,crbuf);
  88.      if (!strcmp(pw,crbuf)) {
  89.      printf("%s ==> %s\n",argv[1],pwbuf);
  90.      exit(0);
  91.      }
  92.      }
  93. printf("done -- password not found.\n");
  94.  
  95.  
  96.      endpwent();
  97.  
  98.  
  99. }
  100.  
  101. abort()
  102. {
  103. printf("aborted while trying '%s'\n",pwbuf);
  104.  
  105. exit(-1);
  106. }
  107.  
  108. --- cut here ---
  109.  
  110. (Note - written on a Pyramid 90x running Berzerkeley Unix 4.2.  If you're
  111. running SysV or something else you may have problems.  You probably
  112. won't, but you might.)
  113.  
  114. Now that you have the above compiled into a file called 'hpw,' invoke
  115. it with
  116.  
  117. % hpw username pwfile
  118. ( % is the shell prompt; don't type it...)
  119.  
  120. where username is the login name of the user who's password you'd like
  121. to hack, and pwfile is the path of a text file that contains the pool of
  122. likely passwords.  Most sites will have a file of words for the 'spell'
  123. spelling checker - it will probably be /usr/dict/words and contain at least
  124. 15,000 potential passwords.
  125.  
  126. Hpw starts by loading the user's encrypted password from /etc/password and
  127. stores it in crbuf.  It then starts reading words from the file you've
  128. specified, encrypts them using the crypt() routine, and compares them to
  129. the encrypted password.  If they match, the program outputs a line like:
  130. 'shark ==> hispassword' and quits.  If they don't match, it goes on to the
  131. next potential password.  If the program goes through the entire list and
  132. doesn't find the correct password, it prints 'done -- password not found'
  133. and quits.  If you hit ^C (or BREAK, or whatever your interrupt character
  134. is) the program tells you which word in the file it had gotten to when
  135. it was interrupted and quits.  Then, the next time you attempt to hack that
  136. login name, you can start where you left off during the previous session.
  137.  
  138. The beauty of this program is that you can run it in background with the
  139. output sent to a file and then log off, or play rogue, or whatever.  To
  140. hack melody's password using /usr/dict/words as your pool file, and to
  141. have all messages generated by the program sent to a file called 'out.file'
  142. and run the program in background, you'd enter from csh:
  143.  
  144. % hpw melody /usr/dict/words > out.file &
  145.  
  146. the & signifies a background process.  The system will print something like:
  147. [1] 90125
  148. this means it's job number 1 for you, and has process id 90125.  To bring
  149. the program back into the foreground, enter:
  150.  
  151. % %1
  152.  
  153. and to kill the process, type
  154.  
  155. % kill 90125
  156.  
  157. if you have hpw running in background and you're in csh, you can just log off
  158. and the program will continue to silently gather passwords.  If you're under
  159. the sh shell, you'll need to run the program with 'nohup' (read the man
  160. entry for more info) or sh will kill the process when you log out.
  161.  
  162. Anyway, after you've given the program sufficient time to go through the
  163. list (more on this in a second), log in again.  If the output file exists,
  164. the program has completed its job.  Otherwise use 'ps' to see if the program
  165. is still running.  cat the file and you'll see something like this:
  166.  
  167. hacking melody
  168. encrypted password : K4h7iidD1vX0a
  169. melody ==> joshua (or 'done -- password not found')
  170.  
  171. make a note of melody's password, rm the incriminating output file, and
  172. move on to the next login name.  Easy, huh?
  173.  
  174. Now for the bad news:  The designers of Unix weren't stupid.  They
  175. deliberately designed the crypt() routine so that it's unique (it's a minor
  176. deviation of the DES, so you can't use a fast DES-busting program to attack
  177. the /etc/passwd file).  This program uses the fastest possible method of
  178. brute-force hacking Unix passwords, but it isn't too speedy itself.  I wrote
  179. the program on a Pyramid 90x, which is a 32-bit multi-processor
  180. RISC-architecture machine.  When running this program in foreground while I 
  181. was
  182. the only user on the system, it averaged 2 seconds per try.  You can expect
  183. this performance on one of the better VAXen.  If you're on a Cray (sure...) 
  184. it
  185. might take the program 1/8 second per hack.  If you're on an AT running XENIX
  186. or a PDP-11/44, expect 5 seconds per try.  (I really don't know how long it
  187. would take, why don't some people time it and give me feedback...I'd 
  188. appreciate
  189. it.)
  190.  
  191. Realistically, if you're using the system's spelling-checker word list that
  192. contains 20,000 words and you're running the program in background, give
  193. it at least 12 hours.  If you have a system operator who likes to keep
  194. track of people's long-running jobs, tell them via mail that you'll be
  195. computing the limit of 1/x to infinity or something like that and they'll
  196. leave the process alone. If you have your own file of 100 probable passwords
  197. (such as 'joshua,' 'secret' or the person's name) it will take 10 minutes
  198. or so to complete.  Sensible selection of potential passwords (most UNIX
  199. systems don't allow passwords of less than 5 characters; attempt to change
  200. your password to progressively shorter and shorter words until you find out
  201. what your system's minimum length is) and running the program at strategic
  202. times (like after midnight) will cut the time down.
  203.  
  204. Hackers who know 'C' (and everybody should know C by now; it's the best
  205. language ever designed) will want to modify the program I've presented.
  206. You may want to 'hard code' the username to be hacked and the pwfile path;
  207. 'progname root word.file' on a process table might look a LITTLE suspicious
  208. to snoopy system operators (and it goes without saying that you shouldn't
  209. call the program 'hack' or 'hpw', nor leave the source unencrypted in your
  210. directory).  Also, since the crypt() routine is universal, you can hard-code
  211. the 'crbuf' variable with the encrypted password (from /etc/passwords)
  212. of a user on another system!  When hardcoding a password, make sure you spell
  213. it correctly, and that it contains exactly 13 characters of upper & lower 
  214. case,
  215. and/or numbers. I once successfully hacked the root account of an AT&T Micro 
  216. in
  217. Michigan on my local Pyramid 90x.  Thus I didn't need to take up space on the
  218. guy's file system with the source and didn't have to run the program on his
  219. slow system - once I obtained the 6300's /etc/passwd file from the person who
  220. hacked into the system, I attacked it at my local site.  If you happen to 
  221. have
  222. a system of your own that runs Unix, you can hack any system's root account 
  223. at
  224. home, completely risk-free.
  225.  
  226. Unix is the best operating system I've ever used.  It's immensely powerful;
  227. as demonstrated by the program above, it's easy to make the system work for
  228. you.  If you have any questions, comments, criticisms, threats, etc, get in
  229. touch with me - my primary goal is not to prove that I'm more of a Unix 
  230. Wizard
  231. than the other guy, but rather to do my part in the ongoing crusade to make
  232. forbidden information available to the people who can use it.
  233. 'Knowledge is Power,' as the saying goes.
  234.  
  235. -- Shark.
  236. 
  237.  
  238.  
  239.  
  240. DOWNLOADED FROM P-80 SYSTEMS.....
  241.  
  242.  
  243. Downloaded From P-80 International Information Systems 304-744-2253 12yrs+
  244.