You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/ARCHITECTURE.md
+22-4Lines changed: 22 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,6 +19,7 @@ non-ASCII byte is unavoidable. Compatibility shims live in `lib/core/compat.py`
19
19
|-------|------|---------|
20
20
| CLI |`sqlmap.py` -> `main()`| the scanner. Applies runtime patches, parses options, runs a scan. |
21
21
| REST API |`sqlmapapi.py`|`-s` server / `-c` client wrappers around `lib/utils/api.py`. |
22
+
| Library |`import sqlmap` -> `lib/utils/library.py`|`scan()` / `scanFromRequest()` for programmatic callers; like the API, it drives the engine as a subprocess. |
22
23
23
24
`main()` (sqlmap.py) does, in order: `dirtyPatches()` (monkey-patches stdlib for
24
25
quirks/security - see below), `setPaths()`, `init()` (option parsing + environment
@@ -58,7 +59,7 @@ Identifiers in the codebase are camelCase.
|`lib/techniques/`| the exploitation engines: `blind/inference.py`, `error/use.py`, `union/{test,use}.py`, `dns/`|
62
+
|`lib/techniques/`| the exploitation engines: `blind/{inference,multibit}.py`, `error/use.py`, `union/{test,use}.py`, `dns/`, plus one directory per non-SQL family (`ssti/`, `nosql/`, `xpath/`, ...)|
62
63
|`lib/parse/`| parsing of inputs: CLI, config, HTTP request/log files, HTML, sitemap, and the XML payload/boundary loader (`payloads.py`) |
Copy file name to clipboardExpand all lines: doc/CHANGELOG.md
+12-2Lines changed: 12 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,10 +15,12 @@
15
15
* Added the switch `--xslt`. It tests for XSLT injection. The engine names itself in the response. sqlmap then dumps the XML document that the stylesheet transforms. It also reads the files that the engine can reach. When the engine exposes an extension bridge (PHP `php:function` or the Xalan `java:` namespace), sqlmap reads any file through it, and with `--os-cmd` or `--os-shell` it runs operating system commands.
16
16
* Added the switch `--xxe`. It tests for XML External Entity injection. It uses in-band, error-based, and out-of-band channels.
17
17
* Added the switch `--jwt`. It examines JSON Web Tokens for weak keys and for injection in the claims.
18
+
* sqlmap now offers to get around a WAF/IPS on its own. Once it identifies one and the ordinary payloads come back blocked, it drops the scanner fingerprint and tries the tamper scripts that suit that WAF, and it keeps the first one that brings the injection back.
18
19
19
20
## Speed
20
21
21
22
* Added the switch `--timeless`. It reads each blind bit from the HTTP/2 response order. It does not use a delay. sqlmap calibrates the target first, and it uses the usual time-based technique if the target is not applicable.
23
+
* Added the switch `--multi-bit`. On a page that renders rows, one request reads a bit from each row that comes back instead of a single bit altogether.
22
24
* Added set-membership (Huffman) retrieval for blind dumps. It needs fewer requests for each character. Use `--no-huffman` to stop it.
23
25
* Added keyset (seek) pagination for blind table dumps. Use `--no-keyset` to stop it.
24
26
* Added parallel retrieval of values in blind mode. Each thread retrieves a different value.
@@ -53,10 +55,13 @@
53
55
* Added time-based payloads for CUBRID.
54
56
* Added out-of-band DNS channels for H2 and ClickHouse.
55
57
* Added PostgreSQL command execution through a PL extension.
56
-
* Added the running of non-query statements without stacked queries through a gadget. On PostgreSQL, when the `dblink` extension is present, `--sql-query`, `--file-write`, `--os-cmd`, and `--os-shell` now work from a plain (e.g. boolean-based) injection point.
58
+
* Added the running of non-query statements without stacked queries through a gadget. On PostgreSQL, when the `dblink` extension is there and the current user can run it, `--sql-query`, `--file-write`, `--os-cmd`, and `--os-shell` now work from a plain (e.g. boolean-based) injection point.
57
59
* Added file read and file write support for SQLite through the `fileio` extension functions `readfile` and `writefile`.
58
60
* Added the data access and the security type of a routine to the output of `--procs` on MySQL and PostgreSQL, so a routine that runs as its definer or that modifies data stands out.
59
-
* Added the tamper scripts `blindbinary`, `dollarquote`, `infoschema2innodb`, `oraclequote`, and `sign`.
61
+
* Added stacked query payloads for Microsoft SQL Server and Sybase that carry no semicolon, so a filtered semicolon alone no longer hides the technique.
62
+
* Added the error signatures that tell the MySQL and the PostgreSQL forks apart: Doris, StarRocks, CockroachDB, YugabyteDB, OpenGauss, DuckDB, and Trino. These forks keep the wording of the engine that they come from, so only a leaked driver package or an engine-internal source reference gives them away.
63
+
* Made the fingerprinting payloads friendlier to a WAF, so the version detection survives where it used to get blocked.
64
+
* Added the tamper scripts `blindbinary`, `castprefix`, `dollarquote`, `infoschema2innodb`, `mid2leftright`, `mssqlnosemicolon`, `odbcbrace`, `oraclequote`, `quote2ltat`, `sign`, `sleep2hex`, and `uniontable`.
60
65
61
66
## Fewer dependencies
62
67
@@ -93,6 +98,11 @@
93
98
* Made the heuristic hints of the non-SQL switches exclusive. A signature no longer matches the errors of a different engine, an ordinary SQL error, or a page that only contains the name of a template engine.
94
99
* Corrected the GraphQL validation signatures. They now match the quotes in the way that the JSON body escapes them.
95
100
* Added the error signatures of Mako and of DynamoDB. sqlmap did not recognise the errors of these two back-ends.
101
+
* sqlmap no longer stops with an exception on a JWT whose signature is not valid base64url. Such a signature can not be an HMAC that sqlmap could verify, so it is reported as not crackable instead.
102
+
* Corrected the uppercasing of the keywords in the shown queries. A word that merely contains a keyword (e.g. a table named `selected`) and a keyword inside a quoted string are now left alone.
103
+
* Corrected the cracking of the old Oracle password hashes when the user name or the password does not come in as text.
104
+
* sqlmap now skips a UNION test whose request holds no character instead of stopping with an exception. Only a hand-edited `payloads/union_query.xml` can hold such a test.
105
+
* The gadget check now runs the gadget itself instead of only looking for the extension. A user that can not use it no longer gets a false success.
0 commit comments