Team LiB
Previous Section Next Section

4.6. Using LibWhisker

LibWhisker is the Perl module Nikto relies on for its core functionality. At the time of this writing, the current Nikto version ships with LibWhisker 1.7. In general you will not need to use more than a handful of LibWhisker routines. Keep in mind they are all available and have very powerful features, such as crawling, NT Lan Man (NTLM) authentication support, hashing, and encoding. The names of the 69 exported routines are detailed here to help you understand the kind of functionality they provide. You can generate a very detailed manual of these routines from LibWhisker itself. To do this, uncompress LibWhisker and run the following commands:

$cd libwhisker-1.8/scripts/
$perl func2html.pl < ../LW.pm > LW.pod.htm

Here are the routines LibWhisker exports:

anti_ids
forms_read
multipart_setfile
auth_brute_force
forms_write
multipart_write
auth_set_header
get_page
ntlm_client
bruteurl
get_page_hash
ntlm_new
cookie_get
get_page_to_file
upload_file
cookie_parse
html_find_tags
utils_absolute_uri
cookie_read
http_do_request
utils_array_shuffle
cookie_set
http_do_request_ex
utils_find_lowercase_key
cookie_write
http_fixup_request
utils_get_dir
crawl
http_init_request
utils_getline
crawl_get_config
http_reset
utils_getline_crlf
crawl_set_config
md4
utils_getopts
decode_base64
md4_perl
utils_join_uri
decode_base64_perl
md5
utils_lowercase_hashkeys
do_auth
md5_perl
utils_lowercase_heades
download_file
multipart_boundary
utils_normalize_uri
dumper
multipart_files_list
utils_port_open
dumper_writefile
multipart_get
utils_randstr
encode_base64
multipart_getfile
utils_recperm
encode_base64_perl
multipart_params_list
utils_save_page
encode_str2ruri
multipart_read
utils_split_uri
encode_str2uri
multipart_read_data
utils_text_wrapper
encode_unicode
multipart_set
utils_unidecode_ur


In addition to the LibWhisker routines, plug-in developers can also use routines provided by the nikto_core plug-in. Many of these routines are meant for one-time use or for internal use only. Here are the common routines from LibWhisker and nikto_core that are frequently used by the existing plug-ins, along with a brief description of each:


fetch

This takes two parameters, and an optional third parameter. The first parameter is the full path of a file that is to be requested. The second parameter is the HTTP method to use for the request. The optional third parameter is any POST data for the request. The routine makes an HTTP request and returns two scalars. The first returned value is the response code number and the second is the data returned. This routine will make the request using the LibWhisker parameters set by Nikto, so the host that is currently being scanned is where the request will be sent.


parse_csv

This takes a single string of comma-separated values as a parameter and returns an array of those items without the commas.


nprint

This takes one required parameter, and one optional parameter. The required parameter is the string to send to output (output depends on what was specified on the command line). The optional parameter prints only if Nikto is run in verbose or debug mode.


char_escape

This takes one string parameter, escapes all nonalphanumeric characters in it with the \ character before them, and returns the result.

If you need a higher level of control over the HTTP requests, you can use the LibWhisker routines. The most commonly used routines for plug-ins are summarized next. The LibWhisker request hash $request{'whisker'} has many values you can set to control the request. These should be returned to their original values if they are changed within a plug-in. See the nikto_headers plug-in as an example of how to do this correctly.


LW::http_do_request

This takes two parameters: a request hash and a response hash that will be populated accordingly. An optional third parameter is a LibWhisker configs hash. The routine does the work of the actual HTTP request. It returns 0 on success and a nonzero value on error.


LW::http_fixup_request

This makes sure the request conforms to the HTTP standard. It should be called immediately prior to http_do_request. It takes the request hash as the only parameter.


LW::http_reset

This resets internal LibWhisker caches and closes existing connections.


LW::utils_get_dir

This takes in a URI as a parameter and returns the base directory, similar to the dirname command on Linux systems.


LW::utils_normalize_uri

This takes one parameter and corrects any ./ or ../ sequences to get a final, absolute URL.


LW::auth_set_header

This sets authorization information in the request hash. It takes four required parameters and one optional parameter. The first parameter is either ntlm or basic, the second is the request hash, the third and fourth are the username and password, and the optional parameter is the domain (for ntlm auth).

    Team LiB
    Previous Section Next Section