Wapiti allows you to audit the security of your web applications.
It performs "black-box" scans, i.e. it does not study the source code
of the application but will scans the webpages of the deployed webapp, looking for scripts
and forms where it can inject data.
Once it gets this list, Wapiti acts like a fuzzer,
injecting payloads to see if a script is vulnerable.
Wapiti can detect the following vulnerabilities :
Wapiti is able to differentiate ponctual and permanent XSS vulnerabilities.
Wapiti prints a warning everytime it founds a script allowing HTTP uploads.
A warning is also issued when a HTTP 500 code is returned (useful for ASP/IIS)
Wapiti does not rely on a vulnerability database like Nikto do. Wapiti aims to discover unknown vulnerabilities in web applications.
It does not provide a GUI for the moment and you must use it from a terminal.
Here is an exemple of output against a vulnerable web application.
Take a look at the README file.
Wapiti is developed in Python and use a Python library I made called lswww. This web spider library does the most of the work.
Unfortunately, the html parsers module within Python only works with well formated html pages so lswww fails to extract informations from bad-coded webpages.
Tidy can clean these webpages on the fly for us so lswww will give pretty good results.
In order to make Wapiti far more efficient, you should install the following applications :
Wapiti-1.1.5 - A web application vulnerability scanner Usage: python wapiti.py http://server.com/base/url/ [options] Supported options are: -s <url> --start <url> To specify an url to start with -x <url> --exclude <url> To exclude an url from the scan (for example logout scripts) You can also use a wildcard (*) Exemple : -x "http://server/base/?page=*&module=test" or -x http://server/base/admin/* to exclude a directory -p <url_proxy> --proxy <url_proxy> To specify a proxy Exemple: -p http://proxy:port/ -c <cookie_file> --cookie <cookie_file> To use a cookie -t <timeout> --timeout <timeout> To fix the timeout (in seconds) -a <login%password> --auth <login%password> Set credentials for HTTP authentication Doesn't work with Python 2.4 -r <parameter_name> --remove <parameter_name> Remove a parameter from URLs -m <module> --module <module> Use a predefined set of scan/attack options GET_ALL: only use GET request (no POST) GET_XSS: only XSS attacks with HTTP GET method POST_XSS: only XSS attacks with HTTP POST method -u --underline Use color to highlight vulnerables parameters in output