Whisker v1.3 has arrived
Thu Dec 23 17:10:11 MST 1999
Courtesy of .rain.forest.puppy (rfp@wiretrip.net)

                                                        ...scan SSL...
 ...8 new anti-IDS tactics....

                                  ...alternate file formats...

              ...distributed scanning...

                                                ...200 vulnerabilities...
    ...multi-threaded front end...

                           ...whisker v1.3...

I've been a busy puppy lately, wrapping up the new release of whisker,
version 1.3.  For those of you that are lazy, reread the blurbs above for
the main new features.  For those of you that want to know all the
details, read on below.  Whisker v1.3 is available from


                                                   . Rain Forest Puppy .
                                                   .  rfp@wiretrip.net .

                        You're the death of me.

New stuff in v1.3:

- "Multi-threaded" front end (Unix only).  Actually, NightAxis yelled at
  me because the name implies I use threads, when it really is full forks,
  but the concept is understood--it runs multiple whiskers (defaults to 5
  at a time) using the same input.  Due to language and logic constraints,
  it's impossible for whisker to multi-thread scans for a single hosts,
  because the following logic may depend on the return of the previous
  scan.  However, there's no reason why we can't scan two (or more) hosts
  independantly at once, since they have no dependancies on each other.
  The current multi.pl front end does break a few things though:

	- You can't use the -l option; instead, pipe it to the 'tee'
	  command, like:

		multi.pl -H host.list | tee /tmp/whisker.log

	- Nmap file information is not passed to the child processes, so 
	  you don't get to use all the new nmap features.

- More updates to server.db and scan.db.  Identifies over 100 servers and
  over 200 vulnerabilities, not including brute.db, which can check for
  over a thousand different possible files/CGIs.

- Changed options around.  Option snapshot now looks like:

-- whisker / v1.3.0 / rain forest puppy / ADM / wiretrip --
Usage:  whisker (options)

	-n+ *nmap output (machine format, v2.06+)
	-h+ *scan single host (IP or domain)
	-H+ *host list to scan (file)
	-F+ *(for unix multi-threaded front end use only)
	-s+  specifies the script database file (defaults to scan.db)
	-V   use virtual hosts when possible
	-N   query Netcraft for server OS guess
	-S+  force server version (e.g. -S "Apache/1.3.6")
	-u+  user input; pass XXUser to script
	-i   more info (exploit information and such)
	-v   verbose.  Print more information
	-d   debug. Print extra crud++ (to STDERR)
	-l+  log to file instead of stdout

	-I 1 IDS-evasive mode 1 (URL encoding)
	-I 2 IDS-evasive mode 2 (/./ directory insertion)
	-I 3 IDS-evasive mode 3 (premature URL ending)
	-I 4 IDS-evasive mode 4 (long URL)
	-I 5 IDS-evasive mode 5 (fake parameter)
	-I 6 IDS-evasive mode 6 (TAB separation) (not NT/IIS)
	-I 7 IDS-evasive mode 7 (case sensitivity)
	-I 8 IDS-evasive mode 8 (Windows \ delimiter)
	-I 9 IDS-evasive mode 9 (session splicing) (slow)
	-I 0 IDS-evasive mode 0 (NULL method)

	-M 1 use HEAD method (default)
	-M 2 use GET method
	-M 3 use GET method w/ byte-range
	-M 4 use GET method w/ socket close
	-A 1 alternate db format: Voideye exp.dat
	-A 2 alternate db format: cgichk*.r (in rebol)
	-A 3 alternate db format: cgichk.c/messala.c (not cgiexp.c)

	-p+  proxy off x.x.x.x port y (HTTP proxy--see docs)
	-P   request and format proxy list from fsu.virtualave.net
	-B 1 bounce off of altavista.com (and netcraft.com)
	-B 2 bounce off of samspade.org
	-B 4 bounce off fsu.virtualave.net proxy list (random)

 	+ requires parameter;  * one must exist;

- Changed the 'set' command to take .= (append) as well.  Example:

	set test = HI
	# test will now be 'HI'

	set test .= yo
	# test is now 'HIyo'

	set test = Sup
	# test is now 'Sup'

- Added multi-file scans, using the following syntax:

	scan () / >> file1, file2, file3

  *NOTE: using this notation breaks things like 'ifexist' and 'info'

- Fingerprinting was originally added to minimize false positives; instead
  of all Cold Fusion checks coming up 200/Found, whisker would (most of
  the time) change it to come up 404/Not Found (especially on IIS).  To
  get around this anomaly (IIS servers weren't being scanned for Cold
  Fusion files), whisker will internally 'read' the output from a .cfm
  script and determine if it really exists, eliminating *all* false
  reports.  *However*, this only works if you use the normal GET method,
  since it requires page source to interpret.

- Added support for variables and tab's, cr's, and lf's in strings.
  For instance:

	set variable = Newline\n CRLF \r\n Tab->\t<-Tab
	set name = RFP
	set string = Whisker v1.3, coded by $name in 1999

	array doh = 1,2,3
	array stuff = blah, $name, @doh
	# @stuff now has: blah, RFP, 1, 2, 3

  Currently you can use the notation in 'set', 'print', 'info', and

  *NOTE: I don't provide support for \\n or \$something.  It's

- You can now use a variable for 'server' and 'scan' matching:

	set name = Apache
		# stuff to do for Apache

	# will scan if it's Apache
	scan ($name) / >> some.cgi

  *NOTE: be cautious of spaces

- Scan database files don't have to be in the current directory; they
  only need to be in the same directory as whisker.pl.  This means you
  can have whisker in your path, and call it from anywhere.

- Whisker defaults to scan.db, so it's not required to specify -s 

- Whisker will automatically rescan servers with dumb.db if they need it
  (if they don't return a Server: string).  There's also a little bit of
  logic to try to guess what the server is (especially in combination with
  an nmap input file w/ OS identification)

- NMAP information is now available inside the scripts, as the following

	XXNmapOS    (namp's OS guess, if available)
        XXNmapTCP   (double-space delimited TCP port list)
        XXNmapUDP   (double-space delimited UDP port list)

  Double-space delimited looks like:

	21  23  80  135  139  ...etc...etc...

  The 'pingport' command will use the nmap info (if available) rather than
  actually making a connection to determine if a port is open.  You can
  use the 'ifnmapinfo' command (with 'endnmapinfo') to run commands only
  if nmap information is available for that particular host, like so:

	#this host has nmap information, let's check it

	print - Nmap's OS guess (if available): $XXNmapOS

	pingport 8080
	info Port 8080 is also open; may be web stuff up there

	pingport 3128
	info Port 3128 is also open; could be a proxy (squid?)

	pingport 2301
	info Port 2301 is also open; web-based Compaq Insight Manager

- Redid the bounce options.  You can specify which bounce you want by
  using the '-B' command with the number of scan type you want. 
  Currently supported:

	-B 1 -- bounce off of altavista.com (and netcraft.com)
	-B 2 -- bounce off of samspade.org
	-B 4 -- bounce off fsu.virtualave.net proxy list (random)

- Support for distributed proxies.  You need to first 'initialize' whisker
  by downloading the proxy list from fsu.virtualave.net.  This can be done
  by calling whisker with the '-P' command (no other commandline options

  Once done, you can use distributed proxies (each CGI check uses a
  different, random proxy) by the -B 4 option.

- Ability to use other CGI scanners' databases.  Whisker can now read in
  and use VoidEye (exp.dat), cgichk.r (rebol script), and cgichk.c.
  Whisker not only reads them in, but also will apply some of it's
  intelligent scanning tactics to them.  And you can also use the bounce
  scan and anti-IDS switches as well...so if you don't like the scan.db
  that whisker ships with (although I don't see why not), you can use
  someone elses.  Best reason to use them that I could think of is that
  they are more up to date/newer, although whisker will soon be able to
  even cope with that drawback..... ;)

- Better timeout control (Unix only).  Timeout can be set in scripts via
  XXTimeoutVal, and now whisker will attempt to continue scanning, even
  if a particular script timed out (before, any timeout would result in 
  whisker aborting the scan).  This is needed since servers like Roxen (or
  at least www.securityfocus.com ;)  will return the data, but won't close
  the connection...leaving whisker waiting around until it times out.
  Actually, I believe it to be a bug in Roxen, due to the fact that
  whisker sends a 'Connection: close' directive, but oh well. 

- Implemented a suggestion by Philip Stoev to be able to use 'GET' method,
  but still close the connection after all the headers have arrived.  This
  is controlled by the XXNoContent variable.  Note that Apache doesn't
  quite like this, and whines some message into the logs...

- EXPERIMENTAL SSL support.  Let me repeat it's EXPERIMENTAL, and is only
  for Unix.  It requires you to install the OpenSSL package.  Basically
  whisker shells out to /usr/local/ssl/bin/openssl to do the query, and
  reads in the input.  Note that it's SLOW.  You have to enable it in your
  script by setting XXUseSSL=1 prior to runinitial. You may need to set
  XXSSLPath correctly if openssl binary is somewhere other than

- SamSpade bounce by Styx was added with the AltaVista bounce already in
  v1.2 by Philip Stoev.  I got lazy and didn't add the anonymizer bounce.

- Other little tweaks to variable handling and new variables added.

- Netcraft changed their output, so I had to change to match it.  Ugh.

- A little bit of internal code rewriting.  Moved more stuff into 
  reusable functions.

- Eight new anti-IDS modes to help avoid IDS detection.

- Whisker now detects if the server is a proxy (rather than a normal
  server) via the detecting of the Proxy-agent: header.  This cuts down on
  the 'dumb' server warnings when you come across a proxy (like Netscape),
  which returns only a Proxy-agent header and not a Server header.

- Whisker now keeps tracks and reports of things like cookies,
  authentication, content length, content location, etc.  It will return
  cookies, just like a normal user, as well as a user-agent (Netscape
  4.7), referer, etc.