Mutillidae: Deliberately Vulnerable PHP Scripts Of OWASP Top 10
Mutillidae implements the
OWASP Top 10
in PHP. Feel free to use it in your own classes or videos, but if you do I'd
love to hear about it.
Goals
1. Make the code and examples simple to understand so as to get the point across of
how a given vulnerability works.
2. Be geared in such a way that it's easy to update with new modules and
hints.
3. Easy to install and run. Just download XAMPP Lite
for Windows or Linux, put the scripts in the htdocs directory, and click the
"Setup/reset the DB" link in the main menu .
Instructions
Go to the
OWASP Top 10 page to read about a vulnerability, then choose it from
the list on the left to try it out.
Mutillidae currently has two modes: secure and insecure (default). In insecure mode, the
project works like Mutillidae 1.0. Pages are vulnerable to at least the topic they
fall under in the menu. Most pages are vulnerable to much more. In secure mode,
Mutillidae attempts to protect the pages with server side scripts. Also, hints are disabled in
secure mode. In the interest of makign as many challenges as possible, this can be defeated.
In Mutillidae 2.0, the code has been commented to allow the user to see how the defense works.
To get the most out of the project, avoid reading the source code until after learning how
to exploit it. But if you get stuck, the comments should help. Learning how the attack
works should help to understand the defense.
Installation
- Extract the files somewhere in the htdocs folder of
XAMPP (for example
htdocs/mutillidae), or run it from your Linux box after installing Apache/PHP/MySQL.
- By default, Mutillidae trys to connect to MySQL on the localhost with
the username "root" and a blank password. To change this, edit "config.inc" with
the correct information for your environment.
- Do NOT run this code on a production network. Either run it on a
private network, or restrict your web server software to only use the local
loopback address. By default Mutillidae only allows access from localhost
(127.*.*.*). Edit the .htaccess
file to change this behavior (not recommended on a public network). If for some reason .htaccess is not parsed you can
restrict the IP by finding the "Listen" line in the http.conf file and changing
it to read: Listen 127.0.0.1:80
-
Get rid of PHP "strict" errors. They are not compatible with the OWASP ESAPI classes in use in Mutillidae 2.0. The
error modifies headers disrupting functionality so this is not simply an annoyance issue.
To do this, go to the PHP.INI file (default location C:\xampp\php\php.ini) and change
the line that reads "error_reporting = E_ALL | E_STRICT" to "error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECIATED".
-
Once PHP 6.0 arrives in XAMPP, E_ALL will include E_STRICT so the line to change will probably read
"error_reporting = E_ALL". In any case, change the error_reporting line to "error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECIATED".
Notes