Translated ['src/pentesting-web/sql-injection/sqlmap.md', 'src/pentestin

This commit is contained in:
Translator 2025-07-30 06:30:03 +00:00
parent d6a8e3fc96
commit 12cefd433e
2 changed files with 107 additions and 67 deletions

View File

@ -21,6 +21,23 @@
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=PROXY
```
### Technique flags (`--technique`)
L'argomento `--technique` definisce quali metodi di SQL injection sqlmap tenterà. Ogni carattere nella stringa rappresenta una tecnica:
| Letter | Technique | Description |
| ------ | --------- | ----------- |
| B | Boolean-based blind | Usa condizioni true/false per inferire dati |
| E | Error-based | Sfrutta messaggi di errore DBMS dettagliati per esfiltrare risultati |
| U | UNION query | Inietta dichiarazioni `UNION SELECT` per recuperare dati tramite lo stesso canale |
| S | Stacked queries | Aggiunge dichiarazioni aggiuntive separate da `;` |
| T | Time-based blind | Si basa su ritardi (`SLEEP`, `WAITFOR`) per rilevare l'injection |
| Q | Inline / out-of-band | Usa funzioni come `LOAD_FILE()` o canali OOB come DNS |
L'ordine predefinito è `BEUSTQ`. Puoi riordinarli o limitarli, ad esempio solo Boolean e Time-based in quell'ordine:
```bash
sqlmap -u "http://target/?id=1" --technique="BT" --batch
```
### Recuperare informazioni
#### Interno
@ -118,50 +135,53 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| Tamper | Descrizione |
| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Sostituisce il carattere apostrofo con il suo corrispondente a larghezza completa UTF-8 |
| apostrophenullencode.py | Sostituisce il carattere apostrofo con il suo corrispondente illegale a doppio unicode |
| appendnullbyte.py | Aggiunge un carattere NULL codificato alla fine del payload |
| apostrophenullencode.py | Sostituisce il carattere apostrofo con il suo corrispondente illegale a doppio unicode |
| appendnullbyte.py | Aggiunge un carattere NULL codificato alla fine del payload |
| base64encode.py | Codifica in Base64 tutti i caratteri in un dato payload |
| between.py | Sostituisce l'operatore maggiore di \('&gt;'\) con 'NOT BETWEEN 0 AND \#' |
| bluecoat.py | Sostituisce il carattere di spazio dopo l'istruzione SQL con un carattere vuoto casuale valido. Successivamente sostituisce il carattere = con l'operatore LIKE |
| chardoubleencode.py | Codifica doppio url tutti i caratteri in un dato payload \(non elaborando quelli già codificati\) |
| chardoubleencode.py | Codifica due volte in url tutti i caratteri in un dato payload \(non elaborando quelli già codificati\) |
| commalesslimit.py | Sostituisce istanze come 'LIMIT M, N' con 'LIMIT N OFFSET M' |
| commalessmid.py | Sostituisce istanze come 'MID\(A, B, C\)' con 'MID\(A FROM B FOR C\)' |
| concat2concatws.py | Sostituisce istanze come 'CONCAT\(A, B\)' con 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| charencode.py | Codifica url tutti i caratteri in un dato payload \(non elaborando quelli già codificati\) |
| charunicodeencode.py | Codifica unicode-url i caratteri non codificati in un dato payload \(non elaborando quelli già codificati\). "%u0022" |
| charunicodeescape.py | Codifica unicode-url i caratteri non codificati in un dato payload \(non elaborando quelli già codificati\). "\u0022" |
| equaltolike.py | Sostituisce tutte le occorrenze dell'operatore uguale \('='\) con l'operatore 'LIKE' |
| escapequotes.py | Escape con barra delle virgolette \(' e "\) |
| greatest.py | Sostituisce l'operatore maggiore di \('&gt;'\) con il corrispondente 'GREATEST' |
| halfversionedmorekeywords.py | Aggiunge un commento MySQL versionato prima di ogni parola chiave |
| ifnull2ifisnull.py | Sostituisce istanze come 'IFNULL\(A, B\)' con 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Racchiude la query completa con un commento versionato |
| modsecurityzeroversioned.py | Racchiude la query completa con un commento a zero versione |
| multiplespaces.py | Aggiunge spazi multipli attorno alle parole chiave SQL |
| commalessmid.py | Sostituisce istanze come 'MID\(A, B, C\)' con 'MID\(A FROM B FOR C\)' |
| concat2concatws.py | Sostituisce istanze come 'CONCAT\(A, B\)' con 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| charencode.py | Codifica in url tutti i caratteri in un dato payload \(non elaborando quelli già codificati\) |
| charunicodeencode.py | Codifica in unicode-url i caratteri non codificati in un dato payload \(non elaborando quelli già codificati\). "%u0022" |
| charunicodeescape.py | Codifica in unicode-url i caratteri non codificati in un dato payload \(non elaborando quelli già codificati\). "\u0022" |
| equaltolike.py | Sostituisce tutte le occorrenze dell'operatore uguale \('='\) con l'operatore 'LIKE' |
| escapequotes.py | Escape con barra delle virgolette \(' e "\) |
| greatest.py | Sostituisce l'operatore maggiore di \('&gt;'\) con il corrispondente 'GREATEST' |
| halfversionedmorekeywords.py | Aggiunge un commento MySQL versionato prima di ogni parola chiave |
| ifnull2ifisnull.py | Sostituisce istanze come 'IFNULL\(A, B\)' con 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Racchiude la query completa con un commento versionato |
| modsecurityzeroversioned.py | Racchiude la query completa con un commento a zero versione |
| multiplespaces.py | Aggiunge spazi multipli attorno alle parole chiave SQL |
| nonrecursivereplacement.py | Sostituisce parole chiave SQL predefinite con rappresentazioni adatte per la sostituzione \(e.g. .replace\("SELECT", ""\)\) filtri |
| percentage.py | Aggiunge un simbolo di percentuale \('%'\) davanti a ogni carattere |
| overlongutf8.py | Converte tutti i caratteri in un dato payload \(non elaborando quelli già codificati\) |
| randomcase.py | Sostituisce ogni carattere della parola chiave con un valore di caso casuale |
| randomcomments.py | Aggiunge commenti casuali alle parole chiave SQL |
| securesphere.py | Aggiunge una stringa appositamente creata |
| sp_password.py | Aggiunge 'sp_password' alla fine del payload per l'oscuramento automatico dai log DBMS |
| space2comment.py | Sostituisce il carattere di spazio \(' '\) con commenti |
| percentage.py | Aggiunge un simbolo di percentuale \('%'\) davanti a ogni carattere |
| overlongutf8.py | Converte tutti i caratteri in un dato payload \(non elaborando quelli già codificati\) |
| randomcase.py | Sostituisce ogni carattere della parola chiave con un valore di caso casuale |
| randomcomments.py | Aggiunge commenti casuali alle parole chiave SQL |
| securesphere.py | Aggiunge una stringa appositamente creata |
| sp_password.py | Aggiunge 'sp_password' alla fine del payload per l'oscuramento automatico dai log DBMS |
| space2comment.py | Sostituisce il carattere di spazio \(' '\) con commenti |
| space2dash.py | Sostituisce il carattere di spazio \(' '\) con un commento a trattino \('--'\) seguito da una stringa casuale e una nuova riga \('\n'\) |
| space2hash.py | Sostituisce il carattere di spazio \(' '\) con un carattere di cancelletto \('\#'\) seguito da una stringa casuale e una nuova riga \('\n'\) |
| space2morehash.py | Sostituisce il carattere di spazio \(' '\) con un carattere di cancelletto \('\#'\) seguito da una stringa casuale e una nuova riga \('\n'\) |
| space2mssqlblank.py | Sostituisce il carattere di spazio \(' '\) con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| space2mssqlhash.py | Sostituisce il carattere di spazio \(' '\) con un carattere di cancelletto \('\#'\) seguito da una nuova riga \('\n'\) |
| space2mysqlblank.py | Sostituisce il carattere di spazio \(' '\) con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| space2mysqldash.py | Sostituisce il carattere di spazio \(' '\) con un commento a trattino \('--'\) seguito da una nuova riga \('\n'\) |
| space2plus.py | Sostituisce il carattere di spazio \(' '\) con un più \('+'\) |
| space2randomblank.py | Sostituisce il carattere di spazio \(' '\) con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| symboliclogical.py | Sostituisce gli operatori logici AND e OR con i loro corrispondenti simbolici \(&& e |
| unionalltounion.py | Sostituisce UNION ALL SELECT con UNION SELECT |
| space2mssqlblank.py | Sostituisce il carattere di spazio \(' '\) con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| space2mssqlhash.py | Sostituisce il carattere di spazio \(' '\) con un carattere di cancelletto \('\#'\) seguito da una nuova riga \('\n'\) |
| space2mysqlblank.py | Sostituisce il carattere di spazio \(' '\) con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| space2mysqldash.py | Sostituisce il carattere di spazio \(' '\) con un commento a trattino \('--'\) seguito da una nuova riga \('\n'\) |
| space2plus.py | Sostituisce il carattere di spazio \(' '\) con un più \('+'\) |
| space2randomblank.py | Sostituisce il carattere di spazio \(' '\) con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| symboliclogical.py | Sostituisce gli operatori logici AND e OR con i loro corrispondenti simbolici \(&& e |
| unionalltounion.py | Sostituisce UNION ALL SELECT con UNION SELECT |
| unmagicquotes.py | Sostituisce il carattere di virgolette \('\) con una combinazione multi-byte %bf%27 insieme a un commento generico alla fine \(per farlo funzionare\) |
| uppercase.py | Sostituisce ogni carattere della parola chiave con il valore maiuscolo 'INSERT' |
| varnish.py | Aggiunge un'intestazione HTTP 'X-originating-IP' |
| versionedkeywords.py | Racchiude ogni parola chiave non funzione con un commento MySQL versionato |
| versionedmorekeywords.py | Racchiude ogni parola chiave con un commento MySQL versionato |
| xforwardedfor.py | Aggiunge un'intestazione HTTP falsa 'X-Forwarded-For' |
| uppercase.py | Sostituisce ogni carattere della parola chiave con il valore maiuscolo 'INSERT' |
| varnish.py | Aggiunge un'intestazione HTTP 'X-originating-IP' |
| versionedkeywords.py | Racchiude ogni parola chiave non funzione con un commento MySQL versionato |
| versionedmorekeywords.py | Racchiude ogni parola chiave con un commento MySQL versionato |
| xforwardedfor.py | Aggiunge un'intestazione HTTP falsa 'X-Forwarded-For' |
## Riferimenti
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -23,6 +23,23 @@
--proxy=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char
```
### Technique flags (`--technique`)
L'opzione `--technique` ti consente di restringere o riordinare le tecniche di SQL injection che sqlmap testerà. Ogni lettera corrisponde a una diversa classe di payload:
| Letter | Technique | Description |
| ------ | --------- | ----------- |
| B | Boolean-based blind | Utilizza condizioni vero/falso nella risposta della pagina per inferire i risultati |
| E | Error-based | Sfrutta messaggi di errore DBMS dettagliati per estrarre dati |
| U | UNION query | Inietta dichiarazioni `UNION SELECT` per recuperare dati tramite lo stesso canale |
| S | Stacked queries | Aggiunge dichiarazioni extra separate da un delimitatore SQL (`;`) |
| T | Time-based blind | Si basa su ritardi `SLEEP/WAITFOR` per rilevare condizioni iniettabili |
| Q | Inline / out-of-band | Utilizza funzioni come `LOAD_FILE()` o esfiltrazione DNS per estrarre dati |
L'ordine predefinito che sqlmap seguirà è `BEUSTQ` (tutte le tecniche). Puoi cambiare sia l'ordine che il sottoinsieme. Ad esempio, il seguente comando tenterà **solo** le tecniche UNION query e Time-based blind, provando prima UNION:
```bash
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
```
### Recuperare informazioni
#### Interno
@ -86,7 +103,7 @@ Se hai trovato una SQLi ma sqlmap non l'ha rilevata, puoi forzare la tecnica di
### Eval
**Sqlmap** consente l'uso di `-e` o `--eval` per elaborare ogni payload prima di inviarlo con qualche oneliner python. Questo rende molto facile e veloce elaborare in modi personalizzati il payload prima di inviarlo. Nell'esempio seguente, la **sessione cookie di flask** **è firmata da flask con il segreto noto prima di inviarla**:
**Sqlmap** consente l'uso di `-e` o `--eval` per elaborare ogni payload prima di inviarlo con un oneliner python. Questo rende molto facile e veloce elaborare in modi personalizzati il payload prima di inviarlo. Nell'esempio seguente, la **sessione cookie di flask** **è firmata da flask con il segreto noto prima di inviarla**:
```bash
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
```
@ -146,50 +163,53 @@ Ricorda che **puoi creare il tuo tamper in python** ed è molto semplice. Puoi t
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Sostituisce il carattere apostrofo con il suo corrispondente a larghezza completa UTF-8 |
| apostrophenullencode.py | Sostituisce il carattere apostrofo con il suo corrispondente illegale a doppio unicode |
| appendnullbyte.py | Aggiunge un carattere NULL codificato alla fine del payload |
| appendnullbyte.py | Aggiunge un carattere NULL codificato alla fine del payload |
| base64encode.py | Codifica in Base64 tutti i caratteri in un dato payload |
| between.py | Sostituisce l'operatore maggiore di ('>') con 'NOT BETWEEN 0 AND #' |
| bluecoat.py | Sostituisce il carattere di spazio dopo l'istruzione SQL con un carattere vuoto casuale valido. Successivamente sostituisce il carattere = con l'operatore LIKE |
| bluecoat.py | Sostituisce il carattere spazio dopo l'istruzione SQL con un carattere vuoto casuale valido. Successivamente sostituisce il carattere = con l'operatore LIKE |
| chardoubleencode.py | Codifica doppio url tutti i caratteri in un dato payload (non elabora quelli già codificati) |
| commalesslimit.py | Sostituisce istanze come 'LIMIT M, N' con 'LIMIT N OFFSET M' |
| commalessmid.py | Sostituisce istanze come 'MID(A, B, C)' con 'MID(A FROM B FOR C)' |
| commalessmid.py | Sostituisce istanze come 'MID(A, B, C)' con 'MID(A FROM B FOR C)' |
| concat2concatws.py | Sostituisce istanze come 'CONCAT(A, B)' con 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
| charencode.py | Codifica url tutti i caratteri in un dato payload (non elabora quelli già codificati) |
| charencode.py | Codifica in url tutti i caratteri in un dato payload (non elabora quelli già codificati) |
| charunicodeencode.py | Codifica unicode-url i caratteri non codificati in un dato payload (non elabora quelli già codificati). "%u0022" |
| charunicodeescape.py | Codifica unicode-url i caratteri non codificati in un dato payload (non elabora quelli già codificati). "\u0022" |
| equaltolike.py | Sostituisce tutte le occorrenze dell'operatore uguale ('=') con l'operatore 'LIKE' |
| equaltolike.py | Sostituisce tutte le occorrenze dell'operatore uguale ('=') con l'operatore 'LIKE' |
| escapequotes.py | Escape con barra delle virgolette (' e ") |
| greatest.py | Sostituisce l'operatore maggiore di ('>') con il corrispondente 'GREATEST' |
| halfversionedmorekeywords.py | Aggiunge un commento MySQL versionato prima di ogni parola chiave |
| ifnull2ifisnull.py | Sostituisce istanze come 'IFNULL(A, B)' con 'IF(ISNULL(A), B, A)' |
| greatest.py | Sostituisce l'operatore maggiore di ('>') con il corrispondente 'GREATEST' |
| halfversionedmorekeywords.py | Aggiunge un commento MySQL versionato prima di ogni parola chiave |
| ifnull2ifisnull.py | Sostituisce istanze come 'IFNULL(A, B)' con 'IF(ISNULL(A), B, A)' |
| modsecurityversioned.py | Racchiude la query completa con un commento versionato |
| modsecurityzeroversioned.py | Racchiude la query completa con un commento a zero versionato |
| multiplespaces.py | Aggiunge spazi multipli attorno alle parole chiave SQL |
| modsecurityzeroversioned.py | Racchiude la query completa con un commento a zero versionato |
| multiplespaces.py | Aggiunge spazi multipli attorno alle parole chiave SQL |
| nonrecursivereplacement.py | Sostituisce parole chiave SQL predefinite con rappresentazioni adatte per la sostituzione (es. .replace("SELECT", "")) filtri |
| percentage.py | Aggiunge un simbolo di percentuale ('%') davanti a ogni carattere |
| percentage.py | Aggiunge un simbolo di percentuale ('%') davanti a ciascun carattere |
| overlongutf8.py | Converte tutti i caratteri in un dato payload (non elabora quelli già codificati) |
| randomcase.py | Sostituisce ogni carattere parola chiave con un valore di caso casuale |
| randomcomments.py | Aggiunge commenti casuali alle parole chiave SQL |
| randomcase.py | Sostituisce ciascun carattere della parola chiave con un valore di caso casuale |
| randomcomments.py | Aggiunge commenti casuali alle parole chiave SQL |
| securesphere.py | Aggiunge una stringa appositamente creata |
| sp_password.py | Aggiunge 'sp_password' alla fine del payload per l'oscuramento automatico dai log DBMS |
| space2comment.py | Sostituisce il carattere di spazio (' ') con commenti |
| space2dash.py | Sostituisce il carattere di spazio (' ') con un commento dash ('--') seguito da una stringa casuale e una nuova riga ('\n') |
| space2hash.py | Sostituisce il carattere di spazio (' ') con un carattere di cancelletto ('#') seguito da una stringa casuale e una nuova riga ('\n') |
| space2morehash.py | Sostituisce il carattere di spazio (' ') con un carattere di cancelletto ('#') seguito da una stringa casuale e una nuova riga ('\n') |
| space2mssqlblank.py | Sostituisce il carattere di spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| space2mssqlhash.py | Sostituisce il carattere di spazio (' ') con un carattere di cancelletto ('#') seguito da una nuova riga ('\n') |
| space2mysqlblank.py | Sostituisce il carattere di spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| space2mysqldash.py | Sostituisce il carattere di spazio (' ') con un commento dash ('--') seguito da una nuova riga ('\n') |
| space2plus.py | Sostituisce il carattere di spazio (' ') con un più ('+') |
| space2randomblank.py | Sostituisce il carattere di spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| symboliclogical.py | Sostituisce gli operatori logici AND e OR con i loro corrispondenti simbolici (&& e |
| unionalltounion.py | Sostituisce UNION ALL SELECT con UNION SELECT |
| sp_password.py | Aggiunge 'sp_password' alla fine del payload per l'oscuramento automatico dai log DBMS |
| space2comment.py | Sostituisce il carattere spazio (' ') con commenti |
| space2dash.py | Sostituisce il carattere spazio (' ') con un commento dash ('--') seguito da una stringa casuale e una nuova riga ('\n') |
| space2hash.py | Sostituisce il carattere spazio (' ') con un carattere pound ('#') seguito da una stringa casuale e una nuova riga ('\n') |
| space2morehash.py | Sostituisce il carattere spazio (' ') con un carattere pound ('#') seguito da una stringa casuale e una nuova riga ('\n') |
| space2mssqlblank.py | Sostituisce il carattere spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| space2mssqlhash.py | Sostituisce il carattere spazio (' ') con un carattere pound ('#') seguito da una nuova riga ('\n') |
| space2mysqlblank.py | Sostituisce il carattere spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| space2mysqldash.py | Sostituisce il carattere spazio (' ') con un commento dash ('--') seguito da una nuova riga ('\n') |
| space2plus.py | Sostituisce il carattere spazio (' ') con un più ('+') |
| space2randomblank.py | Sostituisce il carattere spazio (' ') con un carattere vuoto casuale da un insieme valido di caratteri alternativi |
| symboliclogical.py | Sostituisce gli operatori logici AND e OR con i loro corrispondenti simbolici (&& e |
| unionalltounion.py | Sostituisce UNION ALL SELECT con UNION SELECT |
| unmagicquotes.py | Sostituisce il carattere di virgolette (') con una combinazione multi-byte %bf%27 insieme a un commento generico alla fine (per farlo funzionare) |
| uppercase.py | Sostituisce ogni carattere parola chiave con il valore maiuscolo 'INSERT' |
| uppercase.py | Sostituisce ciascun carattere della parola chiave con il valore maiuscolo 'INSERT' |
| varnish.py | Aggiunge un'intestazione HTTP 'X-originating-IP' |
| versionedkeywords.py | Racchiude ogni parola chiave non funzione con un commento MySQL versionato |
| versionedmorekeywords.py | Racchiude ogni parola chiave con un commento MySQL versionato |
| xforwardedfor.py | Aggiunge un'intestazione HTTP falsa 'X-Forwarded-For' |
| versionedkeywords.py | Racchiude ciascuna parola chiave non funzione con un commento MySQL versionato |
| versionedmorekeywords.py | Racchiude ciascuna parola chiave con un commento MySQL versionato |
| xforwardedfor.py | Aggiunge un'intestazione HTTP falsa 'X-Forwarded-For' |
## Riferimenti
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../../banners/hacktricks-training.md}}