home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume39 / iss / part01 next >
Text File  |  1993-09-28  |  54KB  |  1,752 lines

  1. Newsgroups: comp.sources.misc
  2. From: gt6468c@prism.gatech.edu (Christopher Klaus)
  3. Subject: v39i109:  iss - Internet Security Scanner, v1.00, Part01/01
  4. Message-ID: <1993Sep29.023213.1676@sparky.sterling.com>
  5. X-Md4-Signature: 026e489d836611409a0ad84a0371fc2e
  6. Sender: kent@sparky.sterling.com (Kent Landfield)
  7. Organization: Sterling Software
  8. Date: Wed, 29 Sep 1993 02:32:13 GMT
  9. Approved: kent@sparky.sterling.com
  10.  
  11. Submitted-by: gt6468c@prism.gatech.edu (Christopher Klaus)
  12. Posting-number: Volume 39, Issue 109
  13. Archive-name: iss/part01
  14. Environment: INET, UNIX
  15.  
  16. Internet Security Scanner (ISS) is one of the first multi-level security
  17. scanners available to the public.  It was designed to be flexible and easily
  18. portable to many unix platforms and do its job in a reasonable amount of
  19. time.  It provides information to the administrator that will fix obvious
  20. security misconfigurations. 
  21.  
  22. ISS does a multi-level scan of security, not just searching for one
  23. weakness in the system.  To provide this to the public or at least to the
  24. security conscious crowd may cause people to think that it is too dangerous
  25. for the public, but many of the (cr/h)ackers are already aware of these
  26. security holes and know how to exploit them. 
  27.  
  28. These security holes are not deep in some OS routines, but standard
  29. misconfigurations that many domains on Internet tend to show.  Many of these
  30. holes are warned about in CERT and CIAC advisories.  This is the first
  31. release of ISS and there is still much room for improvement. 
  32.  
  33. ISS will quickly scan the domain. It does not try to connect to every
  34. address, but rather scans through doing a name lookup for each address.  And
  35. if that address has a name, it will then do a more thorough lookup of
  36. information on that host. With the -q option, it will try to connect to hosts
  37. even without names.  
  38.  
  39. To sum it up, ISS will scan a domain grabbing essential information for
  40. administrators to easily sort through and give them a chance to secure the
  41. open machines on their network.
  42.  
  43. ---
  44. #! /bin/sh
  45. # This is a shell archive.  Remove anything before this line, then feed it
  46. # into a shell via "sh file" or similar.  To overwrite existing files,
  47. # type "sh file -c".
  48. # Contents:  iss iss/Bugs iss/Makefile iss/iss.1 iss/iss.c
  49. #   iss/readme.iss iss/telnet.h iss/todo
  50. # Wrapped by kent@sparky on Tue Sep 28 21:20:25 1993
  51. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  52. echo If this archive is complete, you will see the following message:
  53. echo '          "shar: End of archive 1 (of 1)."'
  54. if test ! -d 'iss' ; then
  55.     echo shar: Creating directory \"'iss'\"
  56.     mkdir 'iss'
  57. fi
  58. if test -f 'iss/Bugs' -a "${1}" != "-c" ; then 
  59.   echo shar: Will not clobber existing file \"'iss/Bugs'\"
  60. else
  61.   echo shar: Extracting \"'iss/Bugs'\" \(114 characters\)
  62.   sed "s/^X//" >'iss/Bugs' <<'END_OF_FILE'
  63. XCant open a port socket sometimes.
  64. XThe src code hasnt been tested on many other unixes other than SunOs4.1.1-3.
  65. X
  66. X
  67. END_OF_FILE
  68.   if test 114 -ne `wc -c <'iss/Bugs'`; then
  69.     echo shar: \"'iss/Bugs'\" unpacked with wrong size!
  70.   fi
  71.   # end of 'iss/Bugs'
  72. fi
  73. if test -f 'iss/Makefile' -a "${1}" != "-c" ; then 
  74.   echo shar: Will not clobber existing file \"'iss/Makefile'\"
  75. else
  76.   echo shar: Extracting \"'iss/Makefile'\" \(64 characters\)
  77.   sed "s/^X//" >'iss/Makefile' <<'END_OF_FILE'
  78. Xiss:    iss.o telnet.h
  79. X    $(CC) -o $@ iss.o
  80. X
  81. Xclean:
  82. X    rm -f iss iss.o
  83. END_OF_FILE
  84.   if test 64 -ne `wc -c <'iss/Makefile'`; then
  85.     echo shar: \"'iss/Makefile'\" unpacked with wrong size!
  86.   fi
  87.   # end of 'iss/Makefile'
  88. fi
  89. if test -f 'iss/iss.1' -a "${1}" != "-c" ; then 
  90.   echo shar: Will not clobber existing file \"'iss/iss.1'\"
  91. else
  92.   echo shar: Extracting \"'iss/iss.1'\" \(9633 characters\)
  93.   sed "s/^X//" >'iss/iss.1' <<'END_OF_FILE'
  94. X.\" "%W% %G%"
  95. X.TH ISS 1
  96. X.SH NAME
  97. Xiss \- Internet Security Scanner
  98. X.SH SYNOPSIS
  99. X.B iss
  100. X[ -msrdyvpqef ] #1 #2 #3 #4
  101. X.SH DESCRIPTION
  102. X.I ISS
  103. XInternet Security Scanner (
  104. X.I ISS
  105. X) is one of the first multi-level security
  106. Xscanners available to the public.  It was designed to be flexible and easily
  107. Xportable to many unix platforms and do its job in a reasonable amount of
  108. Xtime.  It provides information to the administrator that will fix obvious
  109. Xsecurity misconfigurations. 
  110. X.PP
  111. X.I ISS
  112. Xdoes a multi-level scan of security, not just searching for one
  113. Xweakness in the system.  To provide this to the public or at least to the
  114. Xsecurity conscious crowd may cause people to think that it is too dangerous
  115. Xfor the public, but many of the (cr/h)ackers are already aware of these
  116. Xsecurity holes and know how to exploit them. 
  117. X.PP
  118. XThese security holes are not deep in some OS routines, but standard
  119. Xmisconfigurations that many domains on Internet tend to show.  Many of these
  120. Xholes are warned about in CERT and CIAC advisories.  This is the first
  121. Xrelease of 
  122. X.I ISS 
  123. Xand there is still much room for improvement. 
  124. X.PP
  125. X.I ISS
  126. Xis a project that I started as I became interested in security.  As I
  127. Xheard about (cr/h)ackers breaking into NASA and universities around the
  128. Xworld, I wanted to find out the deep secrets of security and how these people
  129. Xwere able to gain access to expensive machines that I would think were
  130. Xsecure.  I searched Internet for relative information, such as Phrack and
  131. XCERT advisories. 
  132. X.PP
  133. XMost information was vague and did not explain how intruders were able to
  134. Xgain access to most systems.  At most the information told administrators to
  135. Xmake password security tighter and to apply the vendor's security patches. 
  136. XThey lacked real information on how an intruder would look at a site to try
  137. Xto gain access.  Having talked with security experts and reading CERT
  138. Xadvisories, I started trying to look for various security holes within my
  139. Xdomain.
  140. X.PP
  141. XTo my surprise, I noticed that many of machines were adequately secured,
  142. Xbut within a domain there remained enough machines with obvious holes that
  143. Xanyone wanted into any machine could attack the weak 'trusted' machine and
  144. Xfrom there could gain access to the rest of the domain. From this project, I
  145. Xhave not learned any new deep secret to cracking systems, but with the right
  146. Xtools that most domains on Internet are insecure.  These holes will not be a
  147. Xsurprise to any advanced intruder, but with this tool administrators will be
  148. Xable to quickly search for obvious holes and prepare to fix them.
  149. X.PP
  150. X
  151. X.SH OPTIONS
  152. X.TP
  153. X.B \-d
  154. XIgnores Checking Default Logins such as sync.
  155. X.TP
  156. X.B \-m
  157. XIgnores checking for mail port.
  158. X.TP
  159. X.B \-s
  160. Xxx number of seconds max to wait.
  161. X.TP
  162. X.B \-r
  163. XIgnores Checking for RPC calls.
  164. X.TP
  165. X.B \-y
  166. XTry to get pw via Ypx.
  167. X.TP
  168. X.B \-v
  169. XIgnores finding Mail Aliases for decode, guest, bbs, lp.
  170. X.TP
  171. X.B \-p
  172. XScans one Host for all open TCP ports (disables all other options).
  173. X.TP
  174. X.B \-q
  175. XTurns off Quick Scan so it finds hosts even with no name.
  176. X.TP
  177. X.B \-e
  178. XOnly logs directories that can be mounted by everyone.
  179. X.TP
  180. X.B \-f
  181. XIgnores Checking FTP port for logging in as anonymous.
  182. X.PP
  183. X#1 and #2 are the 1st and 2nd octect of the domain address.
  184. X#3 and #4 are the low and high range of the 3rd octet of the addresses to
  185. Xof machines to scan. (ie. 128 128 1 255 will scan all hosts
  186. Xfrom 128.128.1.0 to 128.128.255.255) The fourth octet automatically
  187. Xscans from 1 to 255.
  188. X.PP
  189. X.I ISS
  190. Xwill scan a domain sequentially looking for connections.  When it finds
  191. Xa host it will try to connect to various ports.  For starters, it tries the
  192. Xtelnet port. When it connects to the telnet port, it logs any information
  193. Xthat the host displays.  
  194. X.PP
  195. XWith the -d option, 
  196. X.I ISS
  197. Xignores trying default accounts.  By default,
  198. X.I ISS
  199. Xwill then try to log in as 'sync' which is a common account name for
  200. XSunOS and other Unixes.  It in itself is not a big hole other than giving
  201. Xmore information about type of OS, version number of OS, and  displaying the
  202. XMOTD.   But 'sync' with no password can become a security hole as someone
  203. Xwith a regular account on that host can divert the 'sync' privileges and
  204. Xultimately become root.  The 'sync' account should be passworded or disabled.
  205. X.PP
  206. XWith the -m option, 
  207. X.I ISS
  208. Xignores the mail port. By default, 
  209. X.I ISS
  210. Xtries the
  211. Xmail port. Connecting to this provides information regarding the hostname,
  212. Xtype of OS it is, and even the version number of sendmail. 
  213. X.PP
  214. XWith the -v option, 
  215. X.I ISS
  216. Xwont check for mail aliases. By default, it will
  217. Xcheck for various users and aliases.  The obvious aliases to search for is
  218. Xdecode and uudecode.  With these aliases, you are able to send mail to
  219. Xdecode@hostname with a file that has been uuencoded to overwrite a systems
  220. Xfile, such as .rhosts.  Some of the users it looks for is 'bbs','guest','lp',
  221. Xand the well known debug and wiz backdoors within sendmail.  'bbs','guest',
  222. Xand 'lp' are known to have weak passwords or no passwords at all.
  223. X.PP
  224. XWith the -f option, 
  225. X.I ISS
  226. Xwont check the FTP port. By default, it will
  227. Xconnect to the ftp port and check to see if a person can log into anonymous. 
  228. XMany systems such as Macs let anyone log in and look around other users'
  229. Xprivate information.  If it succeeds logging in as anonymous, it will then
  230. Xattempt to create a directory.  If it does that successfully, the main
  231. Xdirectory of the FTP site is writeable and open to attack.  Many anonymous
  232. Xftp sites have security holes.  Such weaknesses is being able to write to the
  233. Xmain directory of the ftp directory, thus an intruder could write a .rhost
  234. Xfile and log in as ftp.  Plus, the anonymous ftp site may contain the actual
  235. Xhost's password file and not just a dummy password file. 
  236. X.PP
  237. XWith the -r option, 
  238. X.I ISS
  239. Xignores checking for rpc. By default, 
  240. X.I ISS
  241. Xwill look
  242. Xfor holes that most systems are more prone to have open.  It uses rpc
  243. Xinformation to find security weaknesses.  It will do a 'rpcinfo -p hostname'.
  244. XWith this information gained, it finds which hosts are running NIS, rexd,
  245. Xbootparam, whose on the host, selection_svc, and NFS. 
  246. X.PP
  247. XIf a system shows YPServ, it is likely that it has not been patched yet and
  248. Xwith the proper domainname, ypserv will provide the password file to any
  249. Xremote host asking for it.  To fix this, apply the proper ypserv patch from
  250. Xyour vendor.  
  251. X.I ISS
  252. Xwill attempt to guess the domainname and that will provide
  253. Xinformation as to which machine is the NIS server is.   The domainname should
  254. Xbe changed if it can easily be guessed so that it will slow people from
  255. Xgrabbing the password file.  Another attempt to fix this problem is
  256. Xto make sure that if the password file does get out, none of the
  257. Xpasswords can easily be cracked.  Crack (by Alec Muffett alecm@sun.com) does
  258. Xa fine job of finding weak passwords. Also shadowing the password file will
  259. Xhelp correct this weakness.
  260. X.PP
  261. XWith the -y option and a program called Ypx (by Rob Nautu
  262. Xrob@wzv.win.tue.nl), 
  263. X.I ISS
  264. Xwill try to grab the password file from ypserv.
  265. X.PP
  266. XIf a system shows Select_svr, selection_svr is running on the machine and
  267. Xthere are known holes that let anyone remotely grab the password file.
  268. XSelection_svr should be disabled.
  269. X.PP
  270. XWhen Rexd is running on a remote system, anyone with a small C program can
  271. Xemulate the 'on' command spoofing any user on the remote machine, thus
  272. Xgaining access to the password file and adding .rhosts files. Rexd should be
  273. Xdisabled.
  274. X.PP
  275. XIf a machine is running Bootparam, it is likely a server to diskless
  276. Xclients.  One problem with bootparam is that if it is running and someone
  277. Xcan guess which machines the client and servers are, they are able to get
  278. Xthe domainname from bootparam, which goes back to the YPServ problem.   
  279. X.PP
  280. XThe -e option will only log exports that everyone can mount.  To
  281. Xusually find out which machines are its clients, by default, log all the
  282. Xexportable directories.  'showmount -e hostname' shows the exports on a
  283. Xremote host.  If the exported directories look like:
  284. X.RS
  285. X.nf
  286. X
  287. X    /usr            (everyone)
  288. X    /export/placebo    placebo
  289. X    /export/spiff      spiff
  290. X.fi
  291. X.RE
  292. X.PP
  293. XAnyone can mount /usr and possible replace files and do other damage.
  294. XPlacebo and spiff appear to be clients to this server.
  295. X.PP
  296. X.I ISS
  297. Xalso does a 'rusers -l hostname' searching for users on the system.
  298. XThat provides how busy is the machine and possible login entries to try.
  299. X.PP
  300. X.I ISS
  301. Xwith option -p will support scanning all the ports on a certain host,
  302. Xthus looking for possible access entries, such as gophers, muds, and other
  303. Xapplications ran by local users.  This has not been implemented yet.
  304. X.PP
  305. X.I ISS
  306. Xwill quickly scan the domain. It does not try to connect to every
  307. Xaddress, but rather scans through doing a name lookup for each address.  And
  308. Xif that address has a name, it will then do a more thorough lookup of
  309. Xinformation on that host. With the -q option, it will try to connect to hosts
  310. Xeven without names.  
  311. X.PP
  312. XTo sum it up, 
  313. X.I ISS
  314. Xwill scan a domain grabbing essential information for
  315. Xadministrators to easily sort through and give him a chance to secure the
  316. Xopen machines on his network.
  317. X
  318. X.SH ACKNOWLEDGEMENTS
  319. X
  320. XI would like to thank the following people for ideas, suggestions, and help:
  321. XScott Miles, Dan Farmer, Wietse Venema, Alec Muffett, Scott Yelich, Darren
  322. XReed, and Tim Newsham.
  323. X
  324. X.SH ENHANCEMENTS
  325. X.PP
  326. XPlease send suggestions to
  327. X.RS
  328. X.nf
  329. X                cklaus@hotsun.nersc.gov
  330. X                         or
  331. X                coup@gnu.ai.mit.edu.
  332. X.fi
  333. X.RE
  334. X.SH COPYRIGHT
  335. X.PP
  336. XCopyright (c) Christopher Klaus, 1992, 1993.
  337. X(cklaus@hotsun.nersc.gov or coup@gnu.ai.mit.edu)
  338. X
  339. X.SH BUGS
  340. X.PP
  341. X-p options has not been implemented yet. But many other options will be added.
  342. END_OF_FILE
  343.   if test 9633 -ne `wc -c <'iss/iss.1'`; then
  344.     echo shar: \"'iss/iss.1'\" unpacked with wrong size!
  345.   fi
  346.   # end of 'iss/iss.1'
  347. fi
  348. if test -f 'iss/iss.c' -a "${1}" != "-c" ; then 
  349.   echo shar: Will not clobber existing file \"'iss/iss.c'\"
  350. else
  351.   echo shar: Extracting \"'iss/iss.c'\" \(17651 characters\)
  352.   sed "s/^X//" >'iss/iss.c' <<'END_OF_FILE'
  353. X/*
  354. X * Internet Security Scannner v1.00
  355. X *
  356. X * Purpose: Check the Security of your Domain
  357. X *
  358. X *
  359. X * program_name -options #1 #2 #3 #4
  360. X * #1 and #2 are the 1st and 2nd octect of the domain address.
  361. X * #3 and #4 are the low and high range of the 3rd octet of the addresses to
  362. X * of machines to scan. (ie. 128 128 1 255 will scan all hosts
  363. X * from 128.128.1.0 to 128.128.255.255)
  364. X *
  365. X *
  366. X * This software is Copyright (c) 1992, 1993 by Christopher Klaus
  367. X *
  368. X * Permission is hereby granted to copy, distribute or otherwise
  369. X * use any part of this package as long as you do not try to make
  370. X * money from it or pretend that you wrote it.  This copyright
  371. X * notice must be maintained in any copy made.
  372. X *
  373. X * Use of this software constitutes acceptance for use in an AS IS
  374. X * condition. There are NO warranties with regard to this software.
  375. X * In no event shall the author be liable for any damages whatsoever
  376. X * arising out of or in connection with the use or performance of this
  377. X * software.  Any use of this software is at the user's own risk.
  378. X *
  379. X *  If you make modifications to this software that you feel
  380. X *  increases it usefulness for the rest of the community, please
  381. X *  email the changes, enhancements, bug fixes as well as any and
  382. X *  all ideas to me. This software is going to be maintained and
  383. X *  enhanced as deemed necessary by the community.
  384. X *
  385. X *              Christopher Klaus
  386. X *  (cklaus@hotsun.nersc.gov or coup@gnu.ai.mit.edu)
  387. X */
  388. X
  389. X#include <fcntl.h>
  390. X#include <sys/types.h>
  391. X#include <sys/socket.h>
  392. X#include <netinet/in.h>
  393. X#include <signal.h>
  394. X#include <stdio.h>
  395. X#include <netdb.h>
  396. X#include <ctype.h>
  397. X#include <arpa/nameser.h>
  398. X#include "telnet.h"
  399. X
  400. X#define TELOPTS
  401. X#define TELCMDS
  402. X#define BUFSIZE 16
  403. X#include <resolv.h>
  404. X
  405. X/* Set to Appropriate Paths For Various Unixes */
  406. X#define SHOWMOUNT "/usr/etc/showmount"
  407. X#define RUSERS "/usr/ucb/rusers"
  408. X#define RPCINFO "/usr/etc/rpcinfo"
  409. X#define YPWHICH "/usr/bin/ypwhich"
  410. X
  411. Xstruct sockaddr_in a;
  412. X/* struct of socket */
  413. Xint s, x, y, i, len, hi, low, thirty = 30, sd;
  414. Xint r;
  415. X/*  range values to scan */
  416. Xint first = 0, second = 0, low1 = 0, low2 = 0, high1 = 0, high2 = 0;
  417. X
  418. Xint sec = 0, log = 0, port = 0;
  419. X/* Check to see when function is done */
  420. Xint done;
  421. X/* Conditions to check scan for in each host */
  422. Xint mail = 0, acctcheck = 0, ypx = 0, rpcinfo = 0, scanports = 0;
  423. Xint quick = 0, export = 0, ftp = 0, login = 0;
  424. X
  425. Xint mnt = 0, width = 0;
  426. Xchar hname[32], testname[32], smtpname[32], *addr[100], *progname, c, buf[200];
  427. Xchar tryname[32], res[10][32], temp1[200], temp2[200];
  428. X
  429. XFILE *fp;
  430. Xdonothing()            /* Signal sets done variable to tell program
  431. X                 * to quit */
  432. X{
  433. X    done = 1;
  434. X    signal(SIGALRM, donothing);
  435. X}
  436. Xgetname(addr)
  437. X    struct sockaddr_in *addr;
  438. X{
  439. X    struct hostent *hoste;
  440. X    hoste = gethostbyaddr((char *) &addr->sin_addr, sizeof(struct in_addr),
  441. X              addr->sin_family);
  442. X    if (hoste)
  443. X    {
  444. X    sprintf(hname, "%s", hoste->h_name);
  445. X    return (1);
  446. X    } else
  447. X    {
  448. X    sprintf(hname, "NoName");    /* May be interesting */
  449. X    return (0);
  450. X    }
  451. X}
  452. Xctos()                /* Connect to Socket */
  453. X{
  454. X    s = socket(AF_INET, SOCK_STREAM, 0);
  455. X    if (s < 0)
  456. X    {
  457. X    sleep(5);
  458. X    setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &thirty, sizeof(thirty));
  459. X    s = socket(AF_INET, SOCK_STREAM, 0);
  460. X    printf("Retrying Socket.\n");
  461. X    if (s < 0)
  462. X    {
  463. X        printf("Socket is locked\n");
  464. X    }
  465. X    }
  466. X    a.sin_port = (port == 0) ? 23 : port;
  467. X    a.sin_family = AF_INET;
  468. X    a.sin_addr.S_un.S_addr = (first << 24) | (second << 16) | (x << 8) | (y);
  469. X    r = connect(s, &a, sizeof(a));
  470. X    return (s);
  471. X}
  472. X/* Give usage message */
  473. Xvoid
  474. Xusage()
  475. X{
  476. X    printf("\n\nISS v1.0  (Internet Security Scanner)\n");
  477. X    printf("Usage: %s -msrdyvpqef #1 #2 #3 #4\n", progname);
  478. X    printf(" -m Ignores checking for mail port.\n");
  479. X    printf(" -s xx number of seconds max to wait\n");
  480. X    printf(" -r Ignores Checking for RPC calls\n");
  481. X    printf(" -d Ignores Checking Default Logins such as sync\n");
  482. X    printf(" -y Try to get pw via Ypx\n");
  483. X    printf(" -v Ignores finding Mail Aliases for decode, guest, bbs, lp\n");
  484. X    printf(" -p Scans one Host for all open TCP ports (disables all");
  485. X    printf(" other options)\n");
  486. X    printf(" -q Turns off Quick Scan so it finds hosts even with no name.\n");
  487. X    printf(" -e Only logs directories that can be mounted by everyone\n");
  488. X    printf(" -f Ignores Checking FTP port for logging in as anonymous\n");
  489. X    printf("#1 and #2 are the 1st and 2nd octect of the domain address.\n");
  490. X    printf("#3 and #4 are the low and high range of the 3rd octet of the");
  491. X    printf(" addresses to\n");
  492. X    printf("of machines to scan. (ie. 128 128 1 255 will scan all hosts\n");
  493. X    printf("from 128.128.1.0 to 128.128.255.255) The fourth octet automatically\n");
  494. X    printf("scans from 1 to 255.\n");
  495. X    printf("\nWritten By Christopher Klaus (coup@gnu.ai.mit.edu)\n");
  496. X    printf(" Send me suggestions, bugs, fixes, and ideas.    Send flames > /dev/null\n");
  497. X    printf(" -p options has not been implemented yet. But many other options will ");
  498. X    printf("be added.\n\n");
  499. X    exit(1);
  500. X}
  501. Xclrlog()            /* clear log buffer */
  502. X{
  503. X    for (i = 0; i < 190; i++)
  504. X    {
  505. X    temp1[i] = ' ';
  506. X    temp2[i] = ' ';
  507. X    }
  508. X    temp1[0] = '\0';
  509. X}
  510. Xfmt(buff1, buff2)        /* Format string for log */
  511. X    char buff1[200], buff2[200];
  512. X{
  513. X
  514. X    int y, r;
  515. X    y = 0;
  516. X
  517. X    r = 0;
  518. X    while ((buff1[y] != NULL) && (r < width))
  519. X    {
  520. X    if (iscntrl(buff1[y]))
  521. X        buff1[y] = ' ';
  522. X
  523. X    if (y != 0)
  524. X        if ((buff1[y] == buff2[r - 1]) && (ispunct(buff1[y]) || isspace(buff1[y])))
  525. X        y++;
  526. X        else
  527. X        {
  528. X        buff2[r] = buff1[y];
  529. X        y++;
  530. X        r++;
  531. X        }
  532. X    else
  533. X    {
  534. X        buff2[r] = buff1[y];
  535. X        y++;
  536. X        r++;
  537. X    }
  538. X    }
  539. X    buff2[r] = NULL;
  540. X
  541. X}
  542. X
  543. X
  544. Xdo_log(s)            /* Records the telnet session and tries
  545. X                 * defaults */
  546. X    int s;
  547. X{
  548. X    unsigned char c, buf[5];
  549. X    int a, count, cnt;
  550. X    width = 78;
  551. X    clrlog();
  552. X    cnt = 0;
  553. X    write(s, '\n', 1);
  554. X    while (!done)
  555. X    {
  556. X    a = read(s, &c, 1);
  557. X    if (a < 0)
  558. X        return;
  559. X    if (a == 0)
  560. X        continue;
  561. X    if (c == IAC)
  562. X    {
  563. X        read(s, buf, 2);
  564. X        respond(s, buf[0], buf[1]);
  565. X    } else
  566. X    {
  567. X        if (c == 0)
  568. X        continue;
  569. X        if (c == '\n')
  570. X        {
  571. X        temp1[cnt] = c;
  572. X        cnt++;
  573. X        continue;
  574. X        }
  575. X        if (isprint(c) || isspace(c))
  576. X        {
  577. X        temp1[cnt] = c;
  578. X        cnt++;
  579. X        }
  580. X    }
  581. X    }
  582. X    fmt(temp1, temp2);
  583. X    fflush(fp);
  584. X    if (login != 1)
  585. X    {
  586. X    writeln("sync");
  587. X    alarm(0);
  588. X    alarm(3);
  589. X    for (count = 0; count < 2; count++)
  590. X    {
  591. X        c = 0;
  592. X        while ((c != '\n') && !done)
  593. X        {
  594. X        read(s, &c, 1);
  595. X        if (c != 0)
  596. X        {
  597. X            fprintf(fp, "%c", c);
  598. X        }
  599. X        }
  600. X    }
  601. X
  602. X    fflush(fp);
  603. X    }
  604. X}
  605. X
  606. X
  607. X
  608. X
  609. X/* Our Policy is always say *NO* to telnet negotations */
  610. Xrespond(s, com, opt)
  611. X    int s;
  612. X    unsigned int com, opt;
  613. X{
  614. X    unsigned char buf[10];
  615. X    buf[0] = IAC;
  616. X    buf[2] = opt;
  617. X    switch (com)
  618. X    {
  619. X    /* will and wont get do and dont as reply */
  620. X    case WILL:
  621. X    case WONT:
  622. X    buf[1] = DONT;
  623. X    write(s, buf, 3);
  624. X    break;
  625. X    /* do and dont get will and wont as reply  */
  626. X    case DO:
  627. X    case DONT:
  628. X    buf[1] = WONT;
  629. X    write(s, buf, 3);
  630. X    break;
  631. X    default:
  632. X    fprintf(stderr, "(%d)(%d)", com, opt);
  633. X    }
  634. X}
  635. X /* Takes a Name and uses parts of it to guess domainname */
  636. Xdomainguess()
  637. X{
  638. X    int l, l1, i;
  639. X    l = 0;
  640. X    l1 = 0;
  641. X    for (i = 0; i <= (strlen(hname)); i++)
  642. X    {
  643. X
  644. X    res[l][l1] = hname[i];
  645. X    l1++;
  646. X    if (hname[i] == '.')
  647. X    {
  648. X        res[l][l1 - 1] = NULL;
  649. X        l1 = 0;
  650. X        l++;
  651. X    }
  652. X    }
  653. X    for (i = 0; i <= l; i++)
  654. X    {
  655. X    sprintf(tryname, "%s", res[i]);
  656. X    testdomain();
  657. X    }
  658. X    for (i = 0; i < l; i++)
  659. X    {
  660. X    sprintf(tryname, "%s.%s", res[i], res[i + 1]);
  661. X    testdomain();
  662. X    }
  663. X    if (l >= 2)
  664. X    {
  665. X    sprintf(tryname, "%s.%s.%s", res[l - 2], res[l - 1], res[l]);
  666. X    testdomain();
  667. X    }
  668. X    if (l >= 3)
  669. X    {
  670. X    sprintf(tryname, "%s.%s.%s.%s", res[l - 3], res[l - 2], res[l - 1], res[l]);
  671. X    testdomain();
  672. X    }
  673. X    if (l >= 4)
  674. X    {
  675. X    sprintf(tryname, "%s.%s.%s.%s.%s", res[l - 4], res[l - 3], res[l - 2], res[l - 1], res[l]);
  676. X    testdomain();
  677. X    }
  678. X}
  679. Xtestdomain()            /* Check each guess to see if it matched
  680. X                 * domainname */
  681. X{
  682. X    FILE *nis;            /* pointer to nis domainname log file */
  683. X
  684. X
  685. X    sprintf(buf, "%s -d %s %s > %s.dom 2>/dev/null", YPWHICH, tryname, hname, addr);
  686. X    system(buf);
  687. X    sprintf(buf, "%s.dom", addr);
  688. X    if ((nis = fopen(buf, "r")) == NULL)
  689. X    {
  690. X    printf("\nError Opening File\n");
  691. X    return (1);
  692. X    }
  693. X    while (!feof(nis))
  694. X    {
  695. X    buf[0] = NULL;
  696. X    fgets(buf, sizeof(buf), nis);
  697. X    if ((strstr(buf, "Domain") == NULL) && (buf[0] != NULL))
  698. X    {
  699. X        fprintf(fp, "\nDomainname: %s NIS Server: %s", tryname, buf);
  700. X    }
  701. X    }
  702. X    close(nis);
  703. X    sprintf(buf, "rm %s.dom", addr);
  704. X    system(buf);
  705. X
  706. X}
  707. Xgetsmtpname()
  708. X{
  709. X    int l, lp1, i;
  710. X    l = 0;
  711. X    lp1 = 0;
  712. X    for (i = 0; i <= (strlen(temp1)); i++)
  713. X    {
  714. X    if ((temp1[i] == ' '))
  715. X        l++;
  716. X
  717. X    if (l == 1)
  718. X    {
  719. X        if (lp1 != 0)
  720. X        {
  721. X        smtpname[lp1 - 1] = temp1[i];
  722. X        }
  723. X        lp1++;
  724. X    }
  725. X    }
  726. X}
  727. X
  728. X
  729. X
  730. Xchecksmtp()            /* Check Sendmail Port */
  731. X{
  732. X    int count = 0;
  733. X    int t = 0;
  734. X    alarm((sec == 0) ? 8 : sec);
  735. X    port = 25;
  736. X    done = 0;
  737. X    c = 0;
  738. X    sd = ctos();
  739. X    if (r != -1)
  740. X    {
  741. X    /* Read & Write Here */
  742. X    setsockopt(sd, SOL_SOCKET, SO_LINGER, &thirty, sizeof(thirty));
  743. X    fcntl(s, F_SETFL, O_NDELAY);
  744. X    while ((c != '\n') && !done)
  745. X    {
  746. X        read(sd, &c, 1);
  747. X        if ((c != 0) && (t < 200))
  748. X        {
  749. X        temp1[t] = c;
  750. X        t++;
  751. X        }
  752. X    }
  753. X    width = 75;
  754. X    fmt(temp1, temp2);
  755. X    fprintf(fp, "\nSMTP:%s\n", temp2);
  756. X    getsmtpname();
  757. X    clrlog();
  758. X    if (!acctcheck)
  759. X    {
  760. X        writeln(sd, "VRFY guest");
  761. X        writeln(sd, "VRFY decode");
  762. X        writeln(sd, "VRFY bbs");
  763. X        writeln(sd, "VRFY lp");
  764. X        writeln(sd, "VRFY uudecode");
  765. X        writeln(sd, "wiz");
  766. X        writeln(sd, "debug");
  767. X        alarm(0);
  768. X        alarm(5);
  769. X        for (count = 0; count < 8; count++)
  770. X        {
  771. X        c = 0;
  772. X        while ((c != '\n') && !done)
  773. X        {
  774. X            read(sd, &c, 1);
  775. X            if (c != 0)
  776. X            {
  777. X            fprintf(fp, "%c", c);
  778. X            }
  779. X        }
  780. X        }
  781. X    }
  782. X    } else
  783. X    {
  784. X    fprintf(fp, "\n NoSMTP");
  785. X    }
  786. X
  787. X    alarm(0);
  788. X    close(s);
  789. X    done = 0;
  790. X}
  791. Xcheckftp()            /* Check FTP Port for anonymous */
  792. X{
  793. X    int count = 0;
  794. X    int t = 0;
  795. X    alarm((sec == 0) ? 5 : sec);
  796. X    port = 21;
  797. X    sd = ctos();
  798. X    if (r != -1)
  799. X    {
  800. X    setsockopt(sd, SOL_SOCKET, SO_LINGER, &thirty, sizeof(thirty));
  801. X    done = 0;
  802. X    c = 0;
  803. X    fcntl(s, F_SETFL, O_NDELAY);
  804. X    while ((c != '\n') && !done)
  805. X    {
  806. X        read(sd, &c, 1);
  807. X        if ((c != 0) && (t < 200))
  808. X        {
  809. X        temp1[t] = c;
  810. X        t++;
  811. X        }
  812. X    }
  813. X    width = 75;
  814. X    fmt(temp1, temp2);
  815. X    fprintf(fp, "\nFTP:%s\n", temp2);
  816. X    clrlog();
  817. X    writeln(sd, "user anonymous");
  818. X    writeln(sd, "pass -iss@iss.iss.iss");    /* turns off messages with
  819. X                         * dash */
  820. X    writeln(sd, "pwd");    /* PWD shows current directory */
  821. X    writeln(sd, "mkd test");/* Tries to make a directory */
  822. X    writeln(sd, "rmd test");/* Tries to remove the directory */
  823. X    alarm(0);
  824. X    alarm(3);
  825. X    for (count = 0; count < 5; count++)
  826. X    {
  827. X        c = 0;
  828. X        while ((c != '\n') && !done)
  829. X        {
  830. X        read(sd, &c, 1);
  831. X        if (c != 0)
  832. X        {
  833. X            fprintf(fp, "%c", c);
  834. X        }
  835. X        }
  836. X    }
  837. X    } else
  838. X    {
  839. X    fprintf(fp, "\n NoFTP");
  840. X    }
  841. X
  842. X    alarm(0);
  843. X    close(s);
  844. X}
  845. Xcheckrpc()
  846. X{
  847. X    FILE *rpc;            /* pointer to rpcinfo log file */
  848. X
  849. X    int rusr, yp, rex, name, boot, x25, sels;
  850. X    /* Flags for rusers,ypserv,rexd,x25,select_svr,bootparam and named server */
  851. X
  852. X    yp = 0;
  853. X    mnt = 0;
  854. X    rex = 0;
  855. X    boot = 0;
  856. X    sels = 0;
  857. X    x25 = 0;
  858. X    rusr = 0;
  859. X    name = 0;
  860. X
  861. X    sprintf(buf, "%s.log", addr);
  862. X    if ((rpc = fopen(buf, "r")) == NULL)
  863. X    {
  864. X    printf("\nError Opening File\n");
  865. X    return (1);
  866. X    }
  867. X    while (!feof(rpc))
  868. X    {
  869. X    fgets(buf, sizeof(buf), rpc);
  870. X    if (strstr(buf, "ypserv") != NULL)
  871. X    {
  872. X        if (!yp)
  873. X        fprintf(fp, " YPSERV");
  874. X        yp = 1;
  875. X    }
  876. X    if (strstr(buf, "mount") != NULL)
  877. X    {
  878. X        if (!mnt)
  879. X        fprintf(fp, " MOUNT");
  880. X        mnt = 1;
  881. X    }
  882. X    if (strstr(buf, "name") != NULL)
  883. X    {
  884. X        if (!name)
  885. X        fprintf(fp, " NAME");
  886. X        name = 1;
  887. X    }
  888. X    if (strstr(buf, "x25") != NULL)
  889. X    {
  890. X        if (!x25)
  891. X        fprintf(fp, " X25");
  892. X        x25 = 1;
  893. X    }
  894. X    if (strstr(buf, "boot") != NULL)
  895. X    {
  896. X        if (!boot)
  897. X        fprintf(fp, " BOOT");
  898. X        boot = 1;
  899. X    }
  900. X    if (strstr(buf, "selec") != NULL)
  901. X    {
  902. X        if (!sels)
  903. X        fprintf(fp, " SELECT");
  904. X        sels = 1;
  905. X    }
  906. X    if (strstr(buf, "rexd") != NULL)
  907. X    {
  908. X        if (!rex)
  909. X        fprintf(fp, " REXD");
  910. X        rex = 1;
  911. X    }
  912. X    if (strstr(buf, "rusers") != NULL)
  913. X    {
  914. X        if (!rusr)
  915. X        fprintf(fp, " RUSERS");
  916. X        rusr = 1;
  917. X    }
  918. X    }
  919. X    close(rpc);
  920. X/* Try to guess domain name if ypserv was found */
  921. X    if (yp)
  922. X    {
  923. X    strcpy(testname, hname);
  924. X    domainguess();
  925. X    if (smtpname[0] != NULL)
  926. X    {
  927. X        strcpy(testname, smtpname);
  928. X        domainguess();
  929. X        smtpname[0] = NULL;
  930. X    }
  931. X    }
  932. X/*  Check Mount List for directories */
  933. X    if (mnt == 1)
  934. X    {
  935. X    sprintf(buf, "%s -e %s > %s.log 2>/dev/null", SHOWMOUNT, addr, addr);
  936. X    system(buf);
  937. X    sprintf(buf, "%s.log", addr);
  938. X    if ((rpc = fopen(buf, "r")) == NULL)
  939. X    {
  940. X        printf("\nError Opening File\n");
  941. X        return (1);
  942. X    }
  943. X    fprintf(fp, "\n");
  944. X    while (!feof(rpc))
  945. X    {
  946. X        fgets(buf, sizeof(buf), rpc);
  947. X        if (!export == 1)
  948. X        {
  949. X        fprintf(fp, "%s", buf);
  950. X        sprintf(buf, " ");
  951. X        } else
  952. X        {
  953. X        if (strstr(buf, "every") != NULL)
  954. X        {
  955. X            fprintf(fp, "ALL:%s", buf);
  956. X            sprintf(buf, " ");
  957. X        }
  958. X        }
  959. X    }
  960. X    close(rpc);
  961. X    }
  962. X/* Tries to get password file via ypserv, need ypx in local directory */
  963. X/* Plan to add my own code that grabs the password file */
  964. X    if ((yp == 1) && (ypx == 1))
  965. X    {
  966. X    sprintf(buf, "./ypx -dgs -o %s.yp %s", addr, hname);
  967. X    system(buf);
  968. X    }
  969. X    if (rusr == 1)
  970. X    {
  971. X    sprintf(buf, "%s -l %s > %s.log 2> /dev/null", RUSERS, hname, addr);
  972. X    system(buf);
  973. X    sprintf(buf, "%s.log", addr);
  974. X    if ((rpc = fopen(buf, "r")) == NULL)
  975. X    {
  976. X        printf("\nError Opening File\n");
  977. X        return (1);
  978. X    }
  979. X    fprintf(fp, "\n");
  980. X    sprintf(buf, "NoOne Online");
  981. X    while (!feof(rpc))
  982. X    {
  983. X        fgets(buf, sizeof(buf), rpc);
  984. X        {
  985. X        fprintf(fp, "%s", buf);
  986. X        }
  987. X        close(rpc);
  988. X    }
  989. X
  990. X    }
  991. X    sprintf(buf, "rm %s.log", addr);
  992. X    system(buf);
  993. X}
  994. Xcheckall()
  995. X{
  996. X    alarm((sec == 0) ? 6 : sec);
  997. X    /* Set Alarm to def 6 seconds */
  998. X    port = 23;
  999. X    sd = ctos();
  1000. X    if (r != -1)
  1001. X    {
  1002. X    do_log(sd);
  1003. X    }
  1004. X    /* Try to Connect */
  1005. X    alarm(0);
  1006. X    close(s);
  1007. X    if (r != -1)
  1008. X    {
  1009. X    if (!rpcinfo)
  1010. X    {
  1011. X        sprintf(buf, "%s -p %s > %s.log 2> /dev/null", RPCINFO, addr, addr);
  1012. X        system(buf);
  1013. X    }
  1014. X    getname(a);
  1015. X    fprintf(fp, "%s %s", addr, hname);
  1016. X    fprintf(fp, "\n>%s", temp2);
  1017. X    clrlog();
  1018. X    if (!mail)
  1019. X    {
  1020. X        checksmtp();    /* Try to Read The SendMail Port */
  1021. X    }
  1022. X    if (ftp != 1)
  1023. X    {
  1024. X        checkftp();
  1025. X    }
  1026. X    if (!rpcinfo)
  1027. X    {
  1028. X        checkrpc();
  1029. X    }
  1030. X    fprintf(fp, "\n\n");
  1031. X    fflush(fp);
  1032. X    }
  1033. X#ifdef notdef
  1034. X    else
  1035. X    {
  1036. X    if (quick == 1)
  1037. X    {
  1038. X        fprintf(fp, "Host %s would not connect.\n", hname);
  1039. X    }
  1040. X    }
  1041. X#endif
  1042. X}
  1043. Xopen_logfile()
  1044. X{
  1045. X    if (fp = fopen("ISS.log", "r"))
  1046. X    {
  1047. X    fclose(fp);
  1048. X    fp = fopen("ISS.log", "a");
  1049. X    } else
  1050. X    {
  1051. X    fclose(fp);
  1052. X    fp = fopen("ISS.log", "a");
  1053. X    fprintf(fp, "       -->    Inet Sec Scanner Log By Christopher Klaus (C) 1993    <--\n");
  1054. X    fprintf(fp, "              Email: cklaus@hotsun.nersc.gov coup@gnu.ai.mit.edu\n");
  1055. X    fprintf(fp, "       ================================================================\n");
  1056. X    }
  1057. X}
  1058. Xwriteln(pd, string)
  1059. X    int pd;
  1060. X    char *string;
  1061. X{
  1062. X    write(pd, string, strlen(string));
  1063. X    write(pd, "\n", 1);
  1064. X}
  1065. Xmain(argc, argv)
  1066. X    int argc;
  1067. X    char **argv;
  1068. X{
  1069. X#define BUFSIZE 16
  1070. X
  1071. X    char buf[BUFSIZE];
  1072. X    char scratch[1024];
  1073. X    sethostent(1);
  1074. X    progname = argv[0];
  1075. X
  1076. X    if (argc == 1)
  1077. X    {
  1078. X    usage();
  1079. X    }
  1080. X    while (*++argv)
  1081. X    {
  1082. X    if (**argv == '-')
  1083. X    {
  1084. X        for (i = 1; argv[0][i] != '\0'; i++)
  1085. X        {
  1086. X        switch (argv[0][i])
  1087. X        {
  1088. X        case 'h':
  1089. X            usage();
  1090. X            exit(0);
  1091. X            break;
  1092. X        case 'l':
  1093. X            log++;
  1094. X            break;
  1095. X        case 'd':
  1096. X            login++;
  1097. X            break;
  1098. X        case 'v':
  1099. X            acctcheck++;
  1100. X            mail = 1;
  1101. X            break;
  1102. X        case 'y':
  1103. X            ypx++;
  1104. X            rpcinfo = 1;
  1105. X            break;
  1106. X        case 'f':
  1107. X            ftp++;
  1108. X            break;
  1109. X        case 'm':
  1110. X            mail++;
  1111. X            break;
  1112. X        case 'r':
  1113. X            rpcinfo++;
  1114. X            break;
  1115. X        case 'q':
  1116. X            quick++;
  1117. X            break;
  1118. X        case 'e':
  1119. X            export++;
  1120. X            rpcinfo = 1;;
  1121. X            break;
  1122. X        case 'p':
  1123. X            scanports++;
  1124. X            break;
  1125. X        case 's':
  1126. X            sec = atoi(argv[0] + i + 1);
  1127. X            if (sec == 0)
  1128. X            {
  1129. X            if (!*++argv)
  1130. X            {
  1131. X                printf("Parse error! missing parameter\n");
  1132. X                exit(1);
  1133. X            }
  1134. X            sec = atoi(*argv);
  1135. X            i = strlen(*argv) + 1;
  1136. X            }
  1137. X            break;
  1138. X        }
  1139. X        }
  1140. X    } else
  1141. X    {
  1142. X        if (!first)
  1143. X        {
  1144. X        first = atoi(*argv);
  1145. X        } else
  1146. X        {
  1147. X        if (!second)
  1148. X        {
  1149. X            second = atoi(*argv);
  1150. X        } else
  1151. X        {
  1152. X            if (!low1)
  1153. X            {
  1154. X            low1 = atoi(*argv);
  1155. X            } else
  1156. X            {
  1157. X            if (!high1)
  1158. X            {
  1159. X                high1 = atoi(*argv);
  1160. X            }
  1161. X            }
  1162. X        }
  1163. X        }
  1164. X    }
  1165. X    }
  1166. X    if (first == 0 || second == 0 || low1 == 0 || high1 == 0)
  1167. X    {
  1168. X    printf("Enter first part of address : ");
  1169. X    scanf("%d", &first);
  1170. X    printf("Enter second part of address : ");
  1171. X    scanf("%d", &second);
  1172. X    printf("Enter low part of 3rd octet : ");
  1173. X    scanf("%d", &low1);
  1174. X    printf("Enter high part of 3rd octet : ");
  1175. X    scanf("%d", &high1);
  1176. X    }
  1177. X    if ((first < 0 || first > 255) || (second < 0 || second > 255) ||
  1178. X    (low1 < 0 || low1 > 255) || (high1 < 0 || high1 > 255))
  1179. X    {
  1180. X    printf("Out of range.\n");
  1181. X    exit(1);
  1182. X    }
  1183. X    open_logfile();
  1184. X
  1185. X    signal(SIGALRM, donothing);
  1186. X    fprintf(fp, "\nScanning from %d.%d.%d.1", first, second, low1);
  1187. X    fprintf(fp, " to %d.%d.%d.255.\n", first, second, high1);
  1188. X    fflush(fp);
  1189. X    high1++;
  1190. X    for (x = low1; x < high1; x++)    /* 3rd Octet of Address */
  1191. X    {
  1192. X    for (y = 1; y < 256; y++)    /* 4th Octet of Address */
  1193. X    {
  1194. X        sprintf(addr, "%d.%d.%d.%d", first, second, x, y);
  1195. X        if (quick == 1)
  1196. X        {
  1197. X        a.sin_port = (port == 0) ? 23 : port;
  1198. X        a.sin_family = AF_INET;
  1199. X
  1200. X        a.sin_addr.S_un.S_addr = (first << 24) | (second << 16) | (x << 8) | (y);
  1201. X        if (getname(a) == 1)    /* Look For Names */
  1202. X        {
  1203. X            checkall();    /* Try for addresses with names */
  1204. X        }
  1205. X        } else
  1206. X        {
  1207. X        checkall();    /* Try for each address */
  1208. X        }
  1209. X    }
  1210. X    }
  1211. X    endhostent();
  1212. X    close(fp);
  1213. X}
  1214. END_OF_FILE
  1215.   if test 17651 -ne `wc -c <'iss/iss.c'`; then
  1216.     echo shar: \"'iss/iss.c'\" unpacked with wrong size!
  1217.   fi
  1218.   # end of 'iss/iss.c'
  1219. fi
  1220. if test -f 'iss/readme.iss' -a "${1}" != "-c" ; then 
  1221.   echo shar: Will not clobber existing file \"'iss/readme.iss'\"
  1222. else
  1223.   echo shar: Extracting \"'iss/readme.iss'\" \(8386 characters\)
  1224.   sed "s/^X//" >'iss/readme.iss' <<'END_OF_FILE'
  1225. X       Internet Security Scanner, v1.00
  1226. X
  1227. X    Copyright (c) Christopher Klaus, 1992, 1993.
  1228. X      (cklaus@hotsun.nersc.gov or coup@gnu.ai.mit.edu)
  1229. X
  1230. X
  1231. X  Internet Security Scanner (ISS) is one of the first multi-level security
  1232. Xscanners available to the public.  It was designed to be flexible and easily
  1233. Xportable to many unix platforms and do its job in a reasonable amount of
  1234. Xtime.  It provides information to the administrator that will fix obvious
  1235. Xsecurity misconfigurations. 
  1236. X
  1237. X  ISS does a multi-level scan of security, not just searching for one
  1238. Xweakness in the system.  To provide this to the public or at least to the
  1239. Xsecurity conscious crowd may cause people to think that it is too dangerous
  1240. Xfor the public, but many of the (cr/h)ackers are already aware of these
  1241. Xsecurity holes and know how to exploit them. 
  1242. X
  1243. X  These security holes are not deep in some OS routines, but standard
  1244. Xmisconfigurations that many domains on Internet tend to show.  Many of these
  1245. Xholes are warned about in CERT and CIAC advisories.  This is the first
  1246. Xrelease of ISS and there is still much room for improvement. 
  1247. X
  1248. X  ISS is a project that I started as I became interested in security.  As I
  1249. Xheard about (cr/h)ackers breaking into NASA and universities around the
  1250. Xworld, I wanted to find out the deep secrets of security and how these people
  1251. Xwere able to gain access to expensive machines that I would think were
  1252. Xsecure.  I searched Internet for relative information, such as Phrack and
  1253. XCERT advisories. 
  1254. X
  1255. X  Most information was vague and did not explain how intruders were able to
  1256. Xgain access to most systems.  At most the information told administrators to
  1257. Xmake password security tighter and to apply the vendor's security patches. 
  1258. XThey lacked real information on how an intruder would look at a site to try
  1259. Xto gain access.  Having talked with security experts and reading CERT
  1260. Xadvisories, I started trying to look for various security holes within my
  1261. Xdomain.
  1262. X
  1263. X  To my surprise, I noticed that many of machines were adequately secured,
  1264. Xbut within a domain there remained enough machines with obvious holes that
  1265. Xanyone wanted into any machine could attack the weak 'trusted' machine and
  1266. Xfrom there could gain access to the rest of the domain. From this project, I
  1267. Xhave not learned any new deep secret to cracking systems, but with the right
  1268. Xtools that most domains on Internet are insecure.  These holes will not be a
  1269. Xsurprise to any advanced intruder, but with this tool administrators will be
  1270. Xable to quickly search for obvious holes and prepare to fix them.
  1271. X
  1272. X  ISS will scan a domain sequentially looking for connections.  When it finds
  1273. Xa host it will try to connect to various ports.  For starters, it tries the
  1274. Xtelnet port. When it connects to the telnet port, it logs any information
  1275. Xthat the host displays.  
  1276. X
  1277. X    With the -d option, ISS ignores trying default accounts.  By default,
  1278. XISS will then try to log in as 'sync' which is a common account name for
  1279. XSunOS and other Unixes.  It in itself is not a big hole other than giving
  1280. Xmore information about type of OS, version number of OS, and  displaying the
  1281. XMOTD.   But 'sync' with no password can become a security hole as someone
  1282. Xwith a regular account on that host can divert the 'sync' privileges and
  1283. Xultimately become root.  The 'sync' account should be passworded or disabled.
  1284. X
  1285. X  With the -m option, ISS ignores the mail port. By default, ISS tries the
  1286. Xmail port. Connecting to this provides information regarding the hostname,
  1287. Xtype of OS it is, and even the version number of sendmail. 
  1288. X
  1289. X  With the -v option, ISS wont check for mail aliases. By default, it will
  1290. Xcheck for various users and aliases.  The obvious aliases to search for is
  1291. Xdecode and uudecode.  With these aliases, you are able to send mail to
  1292. Xdecode@hostname with a file that has been uuencoded to overwrite a systems
  1293. Xfile, such as .rhosts.  Some of the users it looks for is 'bbs','guest','lp',
  1294. Xand the well known debug and wiz backdoors within sendmail.  'bbs','guest',
  1295. Xand 'lp' are known to have weak passwords or no passwords at all.
  1296. X
  1297. X  With the -f option, ISS wont check the FTP port. By default, it will
  1298. Xconnect to the ftp port and check to see if a person can log into anonymous. 
  1299. XMany systems such as Macs let anyone log in and look around other users'
  1300. Xprivate information.  If it succeeds logging in as anonymous, it will then
  1301. Xattempt to create a directory.  If it does that successfully, the main
  1302. Xdirectory of the FTP site is writeable and open to attack.  Many anonymous
  1303. Xftp sites have security holes.  Such weaknesses is being able to write to the
  1304. Xmain directory of the ftp directory, thus an intruder could write a .rhost
  1305. Xfile and log in as ftp.  Plus, the anonymous ftp site may contain the actual
  1306. Xhost's password file and not just a dummy password file. 
  1307. X
  1308. X  With the -r option, ISS ignores checking for rpc. By default, ISS will look
  1309. Xfor holes that most systems are more prone to have open.  It uses rpc
  1310. Xinformation to find security weaknesses.  It will do a 'rpcinfo -p hostname'.
  1311. X With this information gained, it finds which hosts are running NIS, rexd,
  1312. Xbootparam, whose on the host, selection_svc, and NFS. 
  1313. X
  1314. X  If a system shows YPServ, it is likely that it has not been patched yet and
  1315. Xwith the proper domainname, ypserv will provide the password file to any
  1316. Xremote host asking for it.  To fix this, apply the proper ypserv patch from
  1317. Xyour vendor.  ISS will attempt to guess the domainname and that will provide
  1318. Xinformation as to which machine is the NIS server is.   The domainname should
  1319. Xbe changed if it can easily be guessed so that it will slow people from
  1320. Xgrabbing the password file.  Another attempt to fix this problem is
  1321. Xto make sure that if the password file does get out, none of the
  1322. Xpasswords can easily be cracked.  Crack (by Alec Muffett alecm@sun.com) does
  1323. Xa fine job of finding weak passwords. Also shadowing the password file will
  1324. Xhelp correct this weakness.
  1325. X
  1326. X  With the -y option and a program called Ypx (by Rob Nautu
  1327. Xrob@wzv.win.tue.nl), ISS will try to grab the password file from ypserv.
  1328. X
  1329. X  If a system shows Select_svr, selection_svr is running on the machine and
  1330. Xthere are known holes that let anyone remotely grab the password file.
  1331. XSelection_svr should be disabled.
  1332. X
  1333. X  When Rexd is running on a remote system, anyone with a small C program can
  1334. Xemulate the 'on' command spoofing any user on the remote machine, thus
  1335. Xgaining access to the password file and adding .rhosts files. Rexd should be
  1336. Xdisabled.
  1337. X
  1338. X  If a machine is running Bootparam, it is likely a server to diskless
  1339. Xclients.  One problem with bootparam is that if it is running and someone
  1340. Xcan guess which machines the client and servers are, they are able to get
  1341. Xthe domainname from bootparam, which goes back to the YPServ problem.   
  1342. X
  1343. X  The -e option will only log exports that everyone can mount.  To
  1344. Xusually find out which machines are its clients, by default, log all the
  1345. Xexportable directories.  'showmount -e hostname' shows the exports on a
  1346. Xremote host.  If the exported directories look like:
  1347. X
  1348. X    /usr            (everyone)
  1349. X    /export/placebo    placebo
  1350. X    /export/spiff      spiff
  1351. X
  1352. X  Anyone can mount /usr and possible replace files and do other damage.
  1353. XPlacebo and spiff appear to be clients to this server.
  1354. X
  1355. X  ISS also does a 'rusers -l hostname' searching for users on the system.
  1356. XThat provides how busy is the machine and possible login entries to try.
  1357. X
  1358. X  ISS with option -p will support scanning all the ports on a certain host,
  1359. Xthus looking for possible access entries, such as gophers, muds, and other
  1360. Xapplications ran by local users.  This has not been implemented yet.
  1361. X
  1362. X  ISS will quickly scan the domain. It does not try to connect to every
  1363. Xaddress, but rather scans through doing a name lookup for each address.  And
  1364. Xif that address has a name, it will then do a more thorough lookup of
  1365. Xinformation on that host. With the -q option, it will try to connect to hosts
  1366. Xeven without names.  
  1367. X
  1368. X To sum it up, ISS will scan a domain grabbing essential information for
  1369. Xadministrators to easily sort through and give him a chance to secure the
  1370. Xopen machines on his network.
  1371. X
  1372. X
  1373. XAcknowledgements
  1374. X  I would like to thank the following people for ideas, suggestions, and help:
  1375. XScott Miles, Dan Farmer, Wietse Venema, Alec Muffett, Scott Yelich, Darren
  1376. XReed, and Tim Newsham.
  1377. X
  1378. X Please send suggestions to
  1379. X
  1380. X    cklaus@hotsun.nersc.gov
  1381. X or:    coup@gnu.ai.mit.edu.
  1382. X
  1383. X Copyright C Klaus, 1993.
  1384. END_OF_FILE
  1385.   if test 8386 -ne `wc -c <'iss/readme.iss'`; then
  1386.     echo shar: \"'iss/readme.iss'\" unpacked with wrong size!
  1387.   fi
  1388.   # end of 'iss/readme.iss'
  1389. fi
  1390. if test -f 'iss/telnet.h' -a "${1}" != "-c" ; then 
  1391.   echo shar: Will not clobber existing file \"'iss/telnet.h'\"
  1392. else
  1393.   echo shar: Extracting \"'iss/telnet.h'\" \(10035 characters\)
  1394.   sed "s/^X//" >'iss/telnet.h' <<'END_OF_FILE'
  1395. X/*
  1396. X * Copyright (c) 1983 Regents of the University of California.
  1397. X * All rights reserved.
  1398. X *
  1399. X * Redistribution and use in source and binary forms, with or without
  1400. X * modification, are permitted provided that the following conditions
  1401. X * are met:
  1402. X * 1. Redistributions of source code must retain the above copyright
  1403. X *    notice, this list of conditions and the following disclaimer.
  1404. X * 2. Redistributions in binary form must reproduce the above copyright
  1405. X *    notice, this list of conditions and the following disclaimer in the
  1406. X *    documentation and/or other materials provided with the distribution.
  1407. X * 3. All advertising materials mentioning features or use of this software
  1408. X *    must display the following acknowledgement:
  1409. X *    This product includes software developed by the University of
  1410. X *    California, Berkeley and its contributors.
  1411. X * 4. Neither the name of the University nor the names of its contributors
  1412. X *    may be used to endorse or promote products derived from this software
  1413. X *    without specific prior written permission.
  1414. X *
  1415. X * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  1416. X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  1417. X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  1418. X * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  1419. X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  1420. X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  1421. X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  1422. X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  1423. X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  1424. X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  1425. X * SUCH DAMAGE.
  1426. X *
  1427. X *    @(#)telnet.h    5.14 (Berkeley) 4/3/91
  1428. X */
  1429. X
  1430. X#ifndef _TELNET_H_
  1431. X#define    _TELNET_H_
  1432. X
  1433. X/*
  1434. X * Definitions for the TELNET protocol.
  1435. X */
  1436. X#define    IAC    255        /* interpret as command: */
  1437. X#define    DONT    254        /* you are not to use option */
  1438. X#define    DO    253        /* please, you use option */
  1439. X#define    WONT    252        /* I won't use option */
  1440. X#define    WILL    251        /* I will use option */
  1441. X#define    SB    250        /* interpret as subnegotiation */
  1442. X#define    GA    249        /* you may reverse the line */
  1443. X#define    EL    248        /* erase the current line */
  1444. X#define    EC    247        /* erase the current character */
  1445. X#define    AYT    246        /* are you there */
  1446. X#define    AO    245        /* abort output--but let prog finish */
  1447. X#define    IP    244        /* interrupt process--permanently */
  1448. X#define    BREAK    243        /* break */
  1449. X#define    DM    242        /* data mark--for connect. cleaning */
  1450. X#define    NOP    241        /* nop */
  1451. X#define    SE    240        /* end sub negotiation */
  1452. X#define EOR     239             /* end of record (transparent mode) */
  1453. X#define    ABORT    238        /* Abort process */
  1454. X#define    SUSP    237        /* Suspend process */
  1455. X#define    xEOF    236        /* End of file: EOF is already used... */
  1456. X
  1457. X#define SYNCH    242        /* for telfunc calls */
  1458. X
  1459. X#ifdef TELCMDS
  1460. Xchar *telcmds[] = {
  1461. X    "EOF", "SUSP", "ABORT", "EOR",
  1462. X    "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
  1463. X    "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
  1464. X};
  1465. X#else
  1466. Xextern char *telcmds[];
  1467. X#endif
  1468. X
  1469. X#define    TELCMD_FIRST    xEOF
  1470. X#define    TELCMD_LAST    IAC
  1471. X#define    TELCMD_OK(x)    ((x) <= TELCMD_LAST && (x) >= TELCMD_FIRST)
  1472. X#define    TELCMD(x)    telcmds[(x)-TELCMD_FIRST]
  1473. X
  1474. X/* telnet options */
  1475. X#define TELOPT_BINARY    0    /* 8-bit data path */
  1476. X#define TELOPT_ECHO    1    /* echo */
  1477. X#define    TELOPT_RCP    2    /* prepare to reconnect */
  1478. X#define    TELOPT_SGA    3    /* suppress go ahead */
  1479. X#define    TELOPT_NAMS    4    /* approximate message size */
  1480. X#define    TELOPT_STATUS    5    /* give status */
  1481. X#define    TELOPT_TM    6    /* timing mark */
  1482. X#define    TELOPT_RCTE    7    /* remote controlled transmission and echo */
  1483. X#define TELOPT_NAOL     8    /* negotiate about output line width */
  1484. X#define TELOPT_NAOP     9    /* negotiate about output page size */
  1485. X#define TELOPT_NAOCRD    10    /* negotiate about CR disposition */
  1486. X#define TELOPT_NAOHTS    11    /* negotiate about horizontal tabstops */
  1487. X#define TELOPT_NAOHTD    12    /* negotiate about horizontal tab disposition */
  1488. X#define TELOPT_NAOFFD    13    /* negotiate about formfeed disposition */
  1489. X#define TELOPT_NAOVTS    14    /* negotiate about vertical tab stops */
  1490. X#define TELOPT_NAOVTD    15    /* negotiate about vertical tab disposition */
  1491. X#define TELOPT_NAOLFD    16    /* negotiate about output LF disposition */
  1492. X#define TELOPT_XASCII    17    /* extended ascic character set */
  1493. X#define    TELOPT_LOGOUT    18    /* force logout */
  1494. X#define    TELOPT_BM    19    /* byte macro */
  1495. X#define    TELOPT_DET    20    /* data entry terminal */
  1496. X#define    TELOPT_SUPDUP    21    /* supdup protocol */
  1497. X#define    TELOPT_SUPDUPOUTPUT 22    /* supdup output */
  1498. X#define    TELOPT_SNDLOC    23    /* send location */
  1499. X#define    TELOPT_TTYPE    24    /* terminal type */
  1500. X#define    TELOPT_EOR    25    /* end or record */
  1501. X#define    TELOPT_TUID    26    /* TACACS user identification */
  1502. X#define    TELOPT_OUTMRK    27    /* output marking */
  1503. X#define    TELOPT_TTYLOC    28    /* terminal location number */
  1504. X#define    TELOPT_3270REGIME 29    /* 3270 regime */
  1505. X#define    TELOPT_X3PAD    30    /* X.3 PAD */
  1506. X#define    TELOPT_NAWS    31    /* window size */
  1507. X#define    TELOPT_TSPEED    32    /* terminal speed */
  1508. X#define    TELOPT_LFLOW    33    /* remote flow control */
  1509. X#define TELOPT_LINEMODE    34    /* Linemode option */
  1510. X#define TELOPT_XDISPLOC    35    /* X Display Location */
  1511. X#define TELOPT_ENVIRON    36    /* Environment variables */
  1512. X#define    TELOPT_AUTHENTICATION 37/* Authenticate */
  1513. X#define    TELOPT_ENCRYPT    38    /* Encryption option */
  1514. X#define    TELOPT_EXOPL    255    /* extended-options-list */
  1515. X
  1516. X
  1517. X#define    NTELOPTS    (1+TELOPT_ENCRYPT)
  1518. X#ifdef TELOPTS
  1519. Xchar *telopts[NTELOPTS+1] = {
  1520. X    "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
  1521. X    "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
  1522. X    "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
  1523. X    "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
  1524. X    "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
  1525. X    "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
  1526. X    "TACACS UID", "OUTPUT MARKING", "TTYLOC",
  1527. X    "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
  1528. X    "LINEMODE", "XDISPLOC", "ENVIRON", "AUTHENTICATION",
  1529. X    "ENCRYPT",
  1530. X    0,
  1531. X};
  1532. X#define    TELOPT_FIRST    TELOPT_BINARY
  1533. X#define    TELOPT_LAST    TELOPT_ENCRYPT
  1534. X#define    TELOPT_OK(x)    ((x) <= TELOPT_LAST && (x) >= TELOPT_FIRST)
  1535. X#define    TELOPT(x)    telopts[(x)-TELOPT_FIRST]
  1536. X#endif
  1537. X
  1538. X/* sub-option qualifiers */
  1539. X#define    TELQUAL_IS    0    /* option is... */
  1540. X#define    TELQUAL_SEND    1    /* send option */
  1541. X#define    TELQUAL_INFO    2    /* ENVIRON: informational version of IS */
  1542. X#define    TELQUAL_REPLY    2    /* AUTHENTICATION: client version of IS */
  1543. X#define    TELQUAL_NAME    3    /* AUTHENTICATION: client version of IS */
  1544. X
  1545. X/*
  1546. X * LINEMODE suboptions
  1547. X */
  1548. X
  1549. X#define    LM_MODE        1
  1550. X#define    LM_FORWARDMASK    2
  1551. X#define    LM_SLC        3
  1552. X
  1553. X#define    MODE_EDIT    0x01
  1554. X#define    MODE_TRAPSIG    0x02
  1555. X#define    MODE_ACK    0x04
  1556. X#define MODE_SOFT_TAB    0x08
  1557. X#define MODE_LIT_ECHO    0x10
  1558. X
  1559. X#define    MODE_MASK    0x1f
  1560. X
  1561. X/* Not part of protocol, but needed to simplify things... */
  1562. X#define MODE_FLOW        0x0100
  1563. X#define MODE_ECHO        0x0200
  1564. X#define MODE_INBIN        0x0400
  1565. X#define MODE_OUTBIN        0x0800
  1566. X#define MODE_FORCE        0x1000
  1567. X
  1568. X#define    SLC_SYNCH    1
  1569. X#define    SLC_BRK        2
  1570. X#define    SLC_IP        3
  1571. X#define    SLC_AO        4
  1572. X#define    SLC_AYT        5
  1573. X#define    SLC_EOR        6
  1574. X#define    SLC_ABORT    7
  1575. X#define    SLC_EOF        8
  1576. X#define    SLC_SUSP    9
  1577. X#define    SLC_EC        10
  1578. X#define    SLC_EL        11
  1579. X#define    SLC_EW        12
  1580. X#define    SLC_RP        13
  1581. X#define    SLC_LNEXT    14
  1582. X#define    SLC_XON        15
  1583. X#define    SLC_XOFF    16
  1584. X#define    SLC_FORW1    17
  1585. X#define    SLC_FORW2    18
  1586. X
  1587. X#define    NSLC        18
  1588. X
  1589. X/*
  1590. X * For backwards compatability, we define SLC_NAMES to be the
  1591. X * list of names if SLC_NAMES is not defined.
  1592. X */
  1593. X#define    SLC_NAMELIST    "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
  1594. X            "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
  1595. X            "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
  1596. X#ifdef    SLC_NAMES
  1597. Xchar *slc_names[] = {
  1598. X    SLC_NAMELIST
  1599. X};
  1600. X#else
  1601. Xextern char *slc_names[];
  1602. X#define    SLC_NAMES SLC_NAMELIST
  1603. X#endif
  1604. X
  1605. X#define    SLC_NAME_OK(x)    ((x) >= 0 && (x) < NSLC)
  1606. X#define SLC_NAME(x)    slc_names[x]
  1607. X
  1608. X#define    SLC_NOSUPPORT    0
  1609. X#define    SLC_CANTCHANGE    1
  1610. X#define    SLC_VARIABLE    2
  1611. X#define    SLC_DEFAULT    3
  1612. X#define    SLC_LEVELBITS    0x03
  1613. X
  1614. X#define    SLC_FUNC    0
  1615. X#define    SLC_FLAGS    1
  1616. X#define    SLC_VALUE    2
  1617. X
  1618. X#define    SLC_ACK        0x80
  1619. X#define    SLC_FLUSHIN    0x40
  1620. X#define    SLC_FLUSHOUT    0x20
  1621. X
  1622. X#define    ENV_VALUE    0
  1623. X#define    ENV_VAR        1
  1624. X#define    ENV_ESC        2
  1625. X
  1626. X/*
  1627. X * AUTHENTICATION suboptions
  1628. X */
  1629. X
  1630. X/*
  1631. X * Who is authenticating who ...
  1632. X */
  1633. X#define    AUTH_WHO_CLIENT        0    /* Client authenticating server */
  1634. X#define    AUTH_WHO_SERVER        1    /* Server authenticating client */
  1635. X#define    AUTH_WHO_MASK        1
  1636. X
  1637. X/*
  1638. X * amount of authentication done
  1639. X */
  1640. X#define    AUTH_HOW_ONE_WAY    0
  1641. X#define    AUTH_HOW_MUTUAL        2
  1642. X#define    AUTH_HOW_MASK        2
  1643. X
  1644. X#define    AUTHTYPE_NULL        0
  1645. X#define    AUTHTYPE_KERBEROS_V4    1
  1646. X#define    AUTHTYPE_KERBEROS_V5    2
  1647. X#define    AUTHTYPE_SPX        3
  1648. X#define    AUTHTYPE_MINK        4
  1649. X#define    AUTHTYPE_CNT        5
  1650. X
  1651. X#define    AUTHTYPE_TEST        99
  1652. X
  1653. X#ifdef    AUTH_NAMES
  1654. Xchar *authtype_names[] = {
  1655. X    "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
  1656. X};
  1657. X#else
  1658. Xextern char *authtype_names[];
  1659. X#endif
  1660. X
  1661. X#define    AUTHTYPE_NAME_OK(x)    ((x) >= 0 && (x) < AUTHTYPE_CNT)
  1662. X#define    AUTHTYPE_NAME(x)    authtype_names[x]
  1663. X
  1664. X/*
  1665. X * ENCRYPTion suboptions
  1666. X */
  1667. X#define    ENCRYPT_IS        0    /* I pick encryption type ... */
  1668. X#define    ENCRYPT_SUPPORT        1    /* I support encryption types ... */
  1669. X#define    ENCRYPT_REPLY        2    /* Initial setup response */
  1670. X#define    ENCRYPT_START        3    /* Am starting to send encrypted */
  1671. X#define    ENCRYPT_END        4    /* Am ending encrypted */
  1672. X#define    ENCRYPT_REQSTART    5    /* Request you start encrypting */
  1673. X#define    ENCRYPT_REQEND        6    /* Request you send encrypting */
  1674. X#define    ENCRYPT_ENC_KEYID    7
  1675. X#define    ENCRYPT_DEC_KEYID    8
  1676. X#define    ENCRYPT_CNT        9
  1677. X
  1678. X#define    ENCTYPE_ANY        0
  1679. X#define    ENCTYPE_DES_CFB64    1
  1680. X#define    ENCTYPE_DES_OFB64    2
  1681. X#define    ENCTYPE_CNT        3
  1682. X
  1683. X#ifdef    ENCRYPT_NAMES
  1684. Xchar *encrypt_names[] = {
  1685. X    "IS", "SUPPORT", "REPLY", "START", "END",
  1686. X    "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
  1687. X    0,
  1688. X};
  1689. Xchar *enctype_names[] = {
  1690. X    "ANY", "DES_CFB64",  "DES_OFB64",  0,
  1691. X};
  1692. X#else
  1693. Xextern char *encrypt_names[];
  1694. Xextern char *enctype_names[];
  1695. X#endif
  1696. X
  1697. X
  1698. X#define    ENCRYPT_NAME_OK(x)    ((x) >= 0 && (x) < ENCRYPT_CNT)
  1699. X#define    ENCRYPT_NAME(x)        encrypt_names[x]
  1700. X
  1701. X#define    ENCTYPE_NAME_OK(x)    ((x) >= 0 && (x) < ENCTYPE_CNT)
  1702. X#define    ENCTYPE_NAME(x)        enctype_names[x]
  1703. X
  1704. X#endif /* !_TELNET_H_ */
  1705. END_OF_FILE
  1706.   if test 10035 -ne `wc -c <'iss/telnet.h'`; then
  1707.     echo shar: \"'iss/telnet.h'\" unpacked with wrong size!
  1708.   fi
  1709.   # end of 'iss/telnet.h'
  1710. fi
  1711. if test -f 'iss/todo' -a "${1}" != "-c" ; then 
  1712.   echo shar: Will not clobber existing file \"'iss/todo'\"
  1713. else
  1714.   echo shar: Extracting \"'iss/todo'\" \(628 characters\)
  1715.   sed "s/^X//" >'iss/todo' <<'END_OF_FILE'
  1716. XTry common default accounts (e.g. guest, bbs, lp, adm, admin, sysadm). 
  1717. X
  1718. XThe following are possible things to probe for: more sendmail bugs, tftp, more
  1719. Xftp tests, finger probe, ypset , nfs problems (guess file handles, export
  1720. Xaccess list => 256 bytes).
  1721. X
  1722. XClean up the Log file so it is more readable and comprehensive.  For example,
  1723. XFTP will tell you whether or not it has anonymous FTP and if the ftp site has
  1724. Xflaws, rather than just showing the results of the commands.
  1725. X
  1726. XMake it so you can 'iss hostname' and it will scan that host and any related
  1727. Xhosts in that domain that would provide access to the hostname you specified.
  1728. X
  1729. END_OF_FILE
  1730.   if test 628 -ne `wc -c <'iss/todo'`; then
  1731.     echo shar: \"'iss/todo'\" unpacked with wrong size!
  1732.   fi
  1733.   # end of 'iss/todo'
  1734. fi
  1735. echo shar: End of archive 1 \(of 1\).
  1736. cp /dev/null ark1isdone
  1737. MISSING=""
  1738. for I in 1 ; do
  1739.     if test ! -f ark${I}isdone ; then
  1740.     MISSING="${MISSING} ${I}"
  1741.     fi
  1742. done
  1743. if test "${MISSING}" = "" ; then
  1744.     echo You have the archive.
  1745.     rm -f ark[1-9]isdone
  1746. else
  1747.     echo You still must unpack the following archives:
  1748.     echo "        " ${MISSING}
  1749. fi
  1750. exit 0
  1751. exit 0 # Just in case...
  1752.