1. PHP / Говнокод #16175

    +161

    1. 1
    2. 2
    //Insert record into database
    $result = mysql_query("INSERT INTO people(Name, Age, RecordDate) VALUES('" . $_POST["Name"] . "', " . $_POST["Age"] . ",now());");

    Из документации к jTable http://www.jtable.org/GettingStarted

    Запостил: burik666, 16 Июня 2014

    Комментарии (12) RSS

    • о, инжекшн на блюдечке, класс
      Ответить
      • А вдруг он профильтровал их заранее или заэкранировал (или вообще включил magic quote)? :)

        Был тут на ГК один персонаж, который мне доказывал, что так и надо делать, а все эти ваши подготовленные запросы и даже экранировки перед самим запросом - бесполезное фуфло.
        Ответить
        • видимо, эскейпил без разбору (и кавычки, и уголки) и клал обратно в гет\пост?
          Ответить
          • Юзал magic quotes и нахваливал.
            Ответить
            • Движенья нет, сказал мудрец брадатый.
              Другой смолчал и стал пред ним ходить.
              Сильнее бы не мог он возразить.


              интересно, скоро ли он в них разочаровался...
              Ответить
              • Базу уже слил кто-нибудь?
                Ответить
                • В инсерт-инъекции данные слить нельзя. В этом случае, примерный наихудший вектор атаки - подменить дату записи. Не помню, как происходит многострочный инсерт, нужна там стандартная функция или особая. Если mysql_query позволяет, тогда также возможно вставить произвольное количество записей, вместо одной, в произвольные таблицы.
                  Если где-то есть echo mysql_error, то можно ещё попробовать угадывать таблицы-поля.
                  Ну и, разумеется, самое жирное - если результат из таблицы выводится куда-то без обработки прямо в html.
                  Ответить
                  • > В инсерт-инъекции данные слить нельзя.
                    Но вполне возможно сделать какую-то выборку и записать ее в поле этой записи (в данном случае в name). А потом зайти в свой профиль и подсмотреть.
                    Ответить
                    • Это если есть возможность корректно закрыть insert, начать свой select into, не забывая, что больше одной записи надо как-то поклеить. А так да, можно.
                      Можно ещё добавить нового админа в систему, зайти с чёрного хода и потырить всё оттуда.
                      Ответить
                      • > Это если есть возможность корректно закрыть insert
                        Просто ' || (select че-нибудь) || ' в качестве своего name подсунуть, да и все. Но в мускуле палки не работают, надо concat, поэтому так не проканает :(

                        > больше одной записи надо как-то поклеить
                        А почти во всех базах есть агрегирующие функции, которые позволяют поклеить пачку записей через разделитель.

                        > Можно ещё добавить нового админа в систему, зайти с чёрного хода и потырить всё оттуда.
                        Тоже вариант. Кстати, если есть одна возможность для иньекции, значит рядом всяко лежит еще 100500 других. И шансы найти подходящую велики :)
                        Ответить
                        • > Но в мускуле палки не работают, надо concat, поэтому так не проканает :(
                          hardened security
                          тут вам не дырявый ынтерпрайз
                          Ответить
        • В царские данные nullиньекция не придёт.
          Ответить

    Добавить комментарий