This is the command skipfish that can be run in the OnWorks free hosting provider using one of our multiple free online workstations such as Ubuntu Online, Fedora Online, Windows online emulator or MAC OS online emulator
PROGRAM:
NAME
skipfish - web application security scanner
SYNOPSIS
skipfish [options] -o output-directory [ start-url | @url-file [ start-url2 ... ]]
DESCRIPTION
skipfish is an active web application security reconnaissance tool. It prepares an
interactive sitemap for the targeted site by carrying out a recursive crawl and
dictionary-based probes. The resulting map is then annotated with the output from a
number of active (but hopefully non-disruptive) security checks. The final report
generated by the tool is meant to serve as a foundation for professional web application
security assessments.
OPTIONS SUMMARY
Authentication and access options:
-A user:pass - use specified HTTP authentication credentials
-F host=IP - pretend that ´host´ resolves to ´IP´
-C name=val - append a custom cookie to all requests
-H name=val - append a custom HTTP header to all requests
-b (i|f|p) - use headers consistent with MSIE / Firefox / iPhone
-N - do not accept any new cookies
Crawl scope options:
-d max_depth - maximum crawl tree depth (16)
-c max_child - maximum children to index per node (512)
-x max_desc - maximum descendants to index per branch (8192)
-r r_limit - max total number of requests to send (100000000)
-p crawl% - node and link crawl probability (100%)
-q hex - repeat probabilistic scan with given seed
-I string - only follow URLs matching ´string´
-X string - exclude URLs matching ´string´
-K string - do not fuzz parameters named ´string´
-D domain - crawl cross-site links to another domain
-B domain - trust, but do not crawl, another domain
-Z - do not descend into 5xx locations
-O - do not submit any forms
-P - do not parse HTML, etc, to find new links
Reporting options:
-o dir - write output to specified directory (required)
-M - log warnings about mixed content / non-SSL passwords
-E - log all caching intent mismatches
-U - log all external URLs and e-mails seen
-Q - completely suppress duplicate nodes in reports
-u - be quiet, disable realtime progress stats
Dictionary management options:
-W wordlist - use a specified read-write wordlist (required)
-S wordlist - load a supplemental read-only wordlist
-L - do not auto-learn new keywords for the site
-Y - do not fuzz extensions in directory brute-force
-R age - purge words hit more than ´age´ scans ago
-T name=val - add new form auto-fill rule
-G max_guess - maximum number of keyword guesses to keep (256)
Performance settings:
-l max_req - max requests per second (0..000000)
-g max_conn - max simultaneous TCP connections, global (40)
-m host_conn - max simultaneous connections, per target IP (10)
-f max_fail - max number of consecutive HTTP errors (100)
-t req_tmout - total request response timeout (20 s)
-w rw_tmout - individual network I/O timeout (10 s)
-i idle_tmout - timeout on idle HTTP connections (10 s)
-s s_limit - response size limit (200000 B)
-e - do not keep binary responses for reporting
Other settings:
-k duration - stop scanning after the given duration h:m:s
--config file - load specified configuration file
AUTHENTICATION AND ACCESS
Some sites require authentication, and skipfish supports this in different ways. First
there is basic HTTP authentication, for which you can use the -A flag. Second, and more
common, are sites that require authentication on a web application level. For these sites,
the best approach is to capture authenticated session cookies and provide them to skipfish
using the -C flag (multiple if needed). Last, you'll need to put some effort in protecting
the session from being destroyed by excluding logout links with -X and/or by rejecting new
cookies with -N.
-F/--host <ip:hostname>
Using this flag, you can set the ´Host:´ header value to define a custom mapping
between a host and an IP (bypassing the resolver). This feature is particularly
useful for not-yet-launched or legacy services that don't have the necessary DNS
entries.
-H/--header <header:value>
When it comes to customizing your HTTP requests, you can also use the -H option to
insert any additional, non-standard headers. This flag also allows the default
headers to be overwritten.
-C/--cookie <cookie:value>
This flag can be used to add a cookie to the skipfish HTTP requests; This is
particularly useful to perform authenticated scans by providing session cookies.
When doing so, keep in mind that cetain URLs (e.g. /logout) may destroy your
session; you can combat this in two ways: by using the -N option, which causes the
scanner to reject attempts to set or delete cookies; or by using the -X option to
exclude logout URLs.
-b/--user-agent <i|f|p>
This flag allows the user-agent to be specified where ´i´ stands for Internet
Explorer, ´f´ for Firefox and ´p´ for iPhone. Using this flag is recommended in
case the target site shows different behavior based on the user-agent (e.g some
sites use different templates for mobiles and desktop clients).
-N/--reject-cookies
This flag causes skipfish to ignore cookies that are being set by the site. This
helps to enforce stateless tests and also prevent that cookies set with ´-C´ are
not overwritten.
-A/--auth <username:password>
For sites requiring basic HTTP authentication, you can use this flag to specify
your credentials.
--auth-form <URL>
The login form to use with form authentication. By default skipfish will use the
form's action URL to submit the credentials. If this is missing than the login data
is send to the form URL. In case that is wrong, you can set the form handler URL
with --auth-form-target <URL> .
--auth-user <username>
The username to be used during form authentication. Skipfish will try to detect the
correct form field to use but if it fails to do so (and gives an error), then you
can specify the form field name with --auth-user-field.
--auth-pass <password>
The password to be used during form authentication. Similar to auth-user, the form
field name can (optionally) be set with --auth-pass-field.
--auth-verify-url <URL>
This URL allows skipfish to verify whether authentication was successful. This
requires a URL where anonymous and authenticated requests are answered with a
different response.
CRAWLING SCOPE
Some sites may be too big to scan in a reasonable timeframe. If the site features well-
defined tarpits - for example, 100,000 nearly identical user profiles as a part of a
social network - these specific locations can be excluded with -X or -S. In other cases,
you may need to resort to other settings: -d limits crawl depth to a specified number of
subdirectories; -c limits the number of children per directory; -x limits the total number
of descendants per crawl tree branch; and -r limits the total number of requests to send
in a scan.
-d/--max-crawl-depth <depth>
Limit the depth of subdirectories being crawled (see above).
-c/--max-crawl-child <childs>
Limit the amount of subdirectories per directory we crawl into (see above).
-x/--max-crawl-descendants <descendants>
Limit the total number of descendants per crawl tree branch (see above).
-r/--max-request-total <request>
The maximum number of requests can be limited with this flag.
-p/--crawl-probability <0-100>
By specifying a percentage between 1 and 100%, it is possible to tell the crawler
to follow fewer than 100% of all links, and try fewer than 100% of all dictionary
entries. This - naturally - limits the completeness of a scan, but unlike most
other settings, it does so in a balanced, non-deterministic manner. It is extremely
useful when you are setting up time-bound, but periodic assessments of your
infrastructure.
-q/--seed <seed>
This flag sets the initial random seed for the crawler to a specified value. This
can be used to exactly reproduce a previous scan to compare results. Randomness is
relied upon most heavily in the -p mode, but also influences a couple of other scan
management decisions.
-I/--include-string <domain/path>
With this flag, you can tell skipfish to only crawl and test URLs that match a
certain string. This can help to narrow down the scope of a scan by only
whitelisting certain sections of a web site (e.g. -I /shop).
-X/--exclude-string <domain/path>
The -X option can be used to exclude files / directories from the scan. This is
useful to avoid session termination (i.e. by excluding /logout) or just for
speeding up your scans by excluding static content directories like /icons/, /doc/,
/manuals/, and other standard, mundane locations along these lines.
-K/--skip-parameter <parameter name>
This flag allows you to specify parameter names not to fuzz. (useful for
applications that put session IDs in the URL, to minimize noise).
-D/--include-domain <domain>
Allows you to specify additional hosts or domains to be in-scope for the test. By
default, all hosts appearing in the command-line URLs are added to the list - but
you can use -D to broaden these rules. The result of this will be that the crawler
will follow links and tests links that point to these additional hosts.
-B/--trust-domain <domain>
In some cases, you do not want to actually crawl a third-party domain, but you
trust the owner of that domain enough not to worry about cross-domain content
inclusion from that location. To suppress warnings, you can use the -B option
-Z/--skip-error-pages
Do not crawl into pages / directories that give an error 5XX.
-O/--no-form-submits
Using this flag will cause forms to be ignored during the scan.
-P/--no-html-parsing
This flag will disable link extracting and effectively disables crawling. Using -P
is useful when you want to test one specific URL or when you want to feed skipfish
a list of URLs that were collected with an external crawler.
TESTING SCOPE
--checks
EXPERIMENTAL: Displays the crawler injection tests. The output shows the index
number (useful for --checks-toggle), the check name and whether the check is
enabled.
--checks-toggle <check1,check2,..>
EXPERIMENTAL: Every injection test can be enabled/disabled with using this flag. As
value, you need to provide the check numbers which can be obtained with the
--checks flag. Multiple checks can be toggled via a comma separated value (i.e.
--checks-toggle 1,2 )
--no-injection-tests
EXPERIMENTAL: Disables all injection tests for this scan and limits the scan to
crawling and, optionally, bruteforcing. As with all scans, the output directory
will contain a pivots.txt file. This file can be used to feed future scans.
REPORTING OPTIONS
-o/--output <dir>
The report wil be written to this location. The directory is one of the two
mandatory options and must not exist upon starting the scan.
-M/--log-mixed-content
Enable the logging of mixed content. This is highly recommended when scanning SSL-
only sites to detect insecure content inclusion via non-SSL protected links.
-E/--log-cache-mismatches
This will cause additonal content caching error to be reported.
-U/--log-external-urls
Log all external URLs and email addresses that were seen during the scan.
-Q/--log-unique-nodes
Enable this to completely suppress duplicate nodes in reports.
-u/--quiet
This will cause skipfish to suppress all console output during the scan.
-v/--verbose
EXPERIMENTAL: Use this flag to enable runtime reporting of, for example, problems
that are detected. Can be used multiple times to increase verbosity and should be
used in combination with -u unless you run skipfish with stderr redirected to a
file.
DICTIONARY MANAGEMENT
Make sure you've read the instructions provided in doc/dictionaries.txt to select the
right dictionary file and configure it correctly. This step has a profound impact on the
quality of scan results later on.
-S/--wordlist <file>
Load the specified (read-only) wordlist for use during the scan. This flag is
optional but use of a dictionary is highly recommended when performing a blackbox
scan as it will highlight hidden files and directories.
-W/--rw-wordlist <file>
Specify an initially empty file for any newly learned site-specific keywords (which
will come handy in future assessments). You can use -W- or -W /dev/null if you
don't want to store auto-learned keywords anywhere. Typically you will want to use
one of the packaged dictonaries (i.e. complete.wl) and possibly add a custom
dictionary.
-L/--no-keyword-learning
During the scan, skipfish will try to learn and use new keywords. This flag
disables that behavior and should be used when any form of brute-forcing is not
desired.
-Y/--no-extension-brute
This flag will disable extension guessing during directory bruteforcing.
-R <age>
Use of this flag allows old words to be purged from wordlists. It is intended to
help keeping dictionaries clean when used in recurring scans.
-T/--form-value <name=value>
Skipfish also features a form auto-completion mechanism in order to maximize scan
coverage. The values should be non-malicious, as they are not meant to implement
security checks - but rather, to get past input validation logic. You can define
additional rules, or override existing ones, with the -T option (-T
form_field_name=field_value, e.g. -T login=test123 -T password=test321 - although
note that -C and -A are a much better method of logging in).
-G <max guesses>
During the scan, a temporary buffer of newly detected keywords is maintained. The
size of this buffer can be changed with this flag and doing so influences
bruteforcing.
PERFORMANCE OPTIONS
The default performance setting should be fine for most servers but when the report
indicates there were connection problems, you might want to tweak some of the values here.
For unstable servers, the scan coverage is likely to improve when using low values for
rate and connection flags.
-l/--max-request-rate <rate>
This flag can be used to limit the amount of requests per second. This is very
useful when the target server can't keep up with the high amount of requests that
are generated by skipfish. Keeping the amount requests per second low can also help
preventing some rate-based DoS protection mechanisms from kicking in and ruining
the scan.
-g/--max-connections <number>
The max simultaneous TCP connections (global) can be set with this flag.
-m/--max-host-connections <number>
The max simultaneous TCP connections, per target IP, can be set with this flag.
-f/--max-failed-requests <number>
Controls the maximum number of consecutive HTTP errors you are willing to see
before aborting the scan. For large scans, you probably want to set a higher value
here.
-t/--request-timeout <timeout>
Set the total request timeout, to account for really slow or really fast sites.
-w/--network-timeout <timeout>
Set the network I/O timeout.
-i/--idle-timeout <timeout>
Specify the timeout for idle HTTP connections.
-s/--response-size <size>
Sets the maximum length of a response to fetch and parse (longer responses will be
truncated).
-e/--discard-binary
This prevents binary documents from being kept in memory for reporting purposes,
and frees up a lot of RAM.
--flush-to-disk
This causes request / response data to be flushed to disk instead of being kept in
memory. As a result, the memory usage for large scans will be significant lower.
EXAMPLES
Scan type: config
skipfish --config config/example.conf http://example.com
Scan type: quick
skipfish -o output/dir/ http://example.com
Scan type: extensive bruteforce
skipfish [...other options..] -S dictionaries/complete.wl http://example.com
Scan type: without bruteforcing
skipfish [...other options..] -LY http://example.com
Scan type: authenticated (basic)
skipfish [...other options..] -A username:password http://example.com
Scan type: authenticated (cookie)
skipfish [...other options..] -C jsession=myauthcookiehere -X /logout http://example.com
Scan type: flaky server
skipfish [...other options..] -l 5 -g 2 -t 30 -i 15 http://example.com
NOTES
The default values for all flags can be viewed by running ´./skipfish -h´ .
Use skipfish online using onworks.net services