News
January 13, 2012 :
sqlsus 0.7.2 is out, bug fix release.
Starting with version 0.7, sqlsus now supports time-based blind injection and automatically detects web server / suhosin / etc.. lentgh restrictions.
Quite a lot of improvements for this release again, see CHANGELOG for more information.
Bug reports, feature requests, and greetings are as always more than welcome, drop me an email !
Introduction
sqlsus is an open source MySQL injection and takeover tool, written in perl.
Using multithreading on top of that, sqlsus is an extremely fast database dumper, be it for inband or blind injection.
If the privileges are high enough, sqlsus will be a great help for uploading a backdoor through the injection point, and takeover the web server.
It uses SQLite as a backend, for an easier use of what has been dumped, and integrates a lot of usual features (see below) such as cookie support, socks/http proxying, https..
Features
General
Both quoted and numeric injections are supported.
Databases names, tables names, columns names, count(*) per table, privileges... On MySQL > 5, the database structure can be grabbed in one command from within sqlsus.
Discovery of the exact injection space, going through all possible restrictions (web server, suhosin patch...), to inject as much as possible at once.
All quoted texts can be translated as their hex equivalent to bypass any quotes filtering (eg: magic_quotes_gpc) (eg : "sqlsus" will become 0x73716c737573).
sqlsus also supports these types of injection :
- inband (UNION w/ stacked subqueries) : the result of the request will be in the HTML returned by the web server
- blind (boolean-based or time-based) : when you can't see the result of the request directly
Support for GET and POST parameters injection vectors.
Support for HTTP proxy and HTTP simple authentication.
Support for HTTPS.
Support for socks proxy.
Support for cookies.
Support for binary data retrieving.
Full SQLite backend, storing queries / results as they come, databases structure, key variables. This allows you to recall a command and its cached answer, even in a later re-use of the session.
Possibility to clone a database / table / column, into a local SQLite database, and continue over different sessions.
If you can't access the information_schema database, or if it doesn't exist, sqlsus will help you bruteforce the names of the tables and columns.
Possibility to change the current database and still use all the commands transparently.
Auto-detection of the length restriction in place, be it the web server or the layer above (eg: suhosin).
Inband
If your query is likely to return more than one row, sqlsus will use as many subqueries it can use at a time (per query), staying under a configurable limit.
Therefore, it can grab up to thousands of records in just 1 server hit (depending on the available injection space) (cf inband demo)
Once you have found an inband injection, you need to find the correct number of columns for UNION. sqlsus will do the job for you, identifying the needed number of columns, and which of them are suitable for injection.
To speed things up, multithreading (actually, multiple processes (fork)) can be used.
Blind
Blind injection is supported, using conditional responses, and multithreading (actually, again, multiple processes (fork)).
The engine has been optimised in speed and server hit :
- keep all the threads busy with small relevant tasks.
- match each item against a few regular expressions, prior to bruteforcing, to determine the character space to use, reducing a lot the number of hits required.
Takeover
If the database user has the FILE privilege, and if you can use quotes in your injection (mandatory for a SELECT INTO OUTFILE), then sqlsus will help you place a php backdoor on the remote system, recursively looking for writable directories.
You can use download <file> from sqlsus shell, to download an arbitrary (world readable) file from the remote server. The file will be stored in the local filesystem, rebuilding the path tree to the file in the data directory.
sqlsus has the ability to crawl the website at a configurable depth, looking for all the directories it can find, via hypertext links, img links, etc... Then, it tries to upload a tiny php uploader on each candidate directory until it finds one world writable, later used to upload the backdoor itself.
All sqlsus needs (besides what has been said above) is the document_root used server side. You can find it by downloading/reading the relevant files on the web server.
It ships with a PHP backdoor you can upload and a controller, to help you execute system commands, PHP commands, and SQL queries as if you were sitting on a normal direct MySQL connection.
Getting started
Generate a configuration file with sqlsus --genconf my.cfg, read the comments and adapt it to reflect your target.
Launch sqlsus, with your configuration as a parameter sqlsus my.cfg, you will get a shell.
Type help and follow your instincts :)
Notes
sqlsus expects the terminal to be in UTF-8.
Other
License
sqlsus is released under the GNU GPL version 3 or later.
Disclaimer
Use it at your own risk.
Just keep in mind that whatever you do with this tool, the author (aka me, not you) won't be held responsible for anything.
Author
Jérémy Ruffet (sativouf) : sativouf <at> gmail -dot- com