Здравствуйте, уважаемые форумчане. Столкнулся с такой забавной дырой. Крутится как error-based, тайм блинд и просто как блиндовая. Но нужно раскрутить как stacked queries. Вот уязвимый код. PHP: <?php error_reporting(0); $nicknames = $_POST['123']; $username = $_COOKIE['1234']; if($nicknames && $username){ $select = $sv->query("SELECT * FROM group WHERE name='$123'"); if($sv->num_rows($select)){ $sv->query("DELETE FROM group WHERE name='$123' AND type='1' OR name='$123' AND type='0'"); $st->query("INSERT INTO logs VALUES(null, '$1234', '$123', '".time()."')"); echo "<span style='color: green' class='uk-icon-ok'> Разбанен</span>"; } else echo "<span style='color: red'>Ошибка</span>"; } else echo "<span style='color: red'>Ошибка</span>";?> Если юзать POST зпрос, натыкаемся на SELECT. Вроде как можно через Cookie внедрить stacked queries. Условие: Запрос происходит только тогда, если в бд есть запись, в моём случае в таблице всего 3 записи = 3 попытки
Если я правильно понимаю, то тут контекст особо не важен и в какой запрос внедряться не имеет значения. Есть первая инъекция в селекте, если БД или приложение имеет поддержку "stacked queries". Можно сразу внедрить произвольный запрос, типа: И посмотреть на результат в выводе из таблицы "known_table". Если нужно просто получить вывод, без последовательных запросов, то в запросе с инсертом, при возможности просмотра содержимого таблицы "logs", внедряемся через $1234 примерно так:
Спасибо за отклик) Не вышло, ибо query поддерживает только 1 запрос( Может кому эта тема ещё пригодится, так как "stacked queries" очень полезная вещь, но редкая(
могу ошибаться, но если mysql, то stacked queries не получится. Блин, ща некогда разбирать, но на вскидку надо думать в сторону того что в post (select) внедрить типа and 1=0 union select ..., тогда delete не выполнится из-за ошибки, а в куки внедрять запрос уже правильный для insert и с коментарием в конце, тогда пост запрос в insert будет проигнорирован
Ну может слишком специфичное php-приложение (в pma тоже можно stacked queries делать), либо как uговорится одно из двух)