Что делает эта инъекция SQL? - PullRequest
6 голосов
/ 16 декабря 2011

Короче говоря, через старый asp-сайт я запускаю, кто-то нашел параметр нефильтрованного URL-адреса и смог выполнить этот запрос. Я пытаюсь выяснить, что он делает, хотя ...

Запрос должен выглядеть так:

select * from reserve where id = 345

был запущен:

select * from reserve where id = 345 and ascii(substring((select concat(user,0x3a,password,0x3a,host) from mysql.user limit 0,1),17,1))=53

Я действительно не уверен, что это дает. Любой вход?

Ответы [ 5 ]

5 голосов
/ 17 декабря 2011

Возможно, проверяется, обращается ли веб-приложение к базе данных как root. Удаление частей ascii(substring()) при запуске от имени root возвращает следующее:

mysql> select concat(user,0x3a,password,0x3a,host) from mysql.user limit 0,1;
+--------------------------------------+
| concat(user,0x3a,password,0x3a,host) |
+--------------------------------------+
| root:<rootpw-hash>:localhost         |
+--------------------------------------+

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

2 голосов
/ 15 февраля 2012

Эксплойт SQL-инъекции не обязательно сразу выводит результат запроса на экран злоумышленников, часто результатом является либо просто ошибка, либо ошибка, либо, возможно, инъекция вызывает измеримую (для злоумышленника) задержку.таким образом, злоумышленник может получить 1 бит информации за запрос.

Посылая множество запросов, перебирая позиции строк, выполняя двоичный поиск по символам - или, как в этом случае, линейный поиск (который можетуказать, что злоумышленник на самом деле не понимает, что он делает, но в конечном итоге он доберется до него), он сможет найти все символы в парольном хеше пользователя mysql.(Который, возможно, может быть взломан в автономном режиме).

2 голосов
/ 17 декабря 2011

запрос, по-видимому, один из множества:

  • , изменив начальную позицию charcode и подстроки, и вы можете узнать все имена пользователей и соответствующие хеши паролей (когда страница отображается так, как ожидалось, у вас есть совпадение char)
  • позволяет узнать, что текущий пользователь имеет доступ к схеме mysql.
2 голосов
/ 17 декабря 2011

Вторая часть, где условие действительно странное: он ищет учетные данные mysql и обрабатывает их следующим образом:

  • concat (пользователь, 0x3a, пароль, 0x3a, хост) будет выглядеть примерно так: 'someUser: hisPass: localhost'
  • указанная выше строка будет разбита на меньшую
  • приведенная выше строка преобразуется в код ascii (вы можете знать это из устаревших языков как ord ())
  • результат преобразования сравнивается с 53 целыми числами

Я полагаю, что первая часть оператора WHERE (id = 345) всегда будет возвращать true, а вторая слишком специфична, поэтому весь запрос, вероятно, будет возвращать пустой результат все время.

2 голосов
/ 17 декабря 2011

SQL пытается прочитать пользовательские данные из пользовательской таблицы My-Sql, которая обычно содержит список пользователей и хостов, которым разрешен доступ к данному серверу my-sql.

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

Если ваше веб-приложение использует имя входа, которое разрешит доступдля таблицы пользователей mysql, то это серьезный недостаток безопасности: если он использует логин, которому предоставлены только разрешения для таблиц, требуемых для приложения, то никакая информация не будет доступна.

Совет по безопасности: При настройке ЛЮБОГО типа базы данных жизненно важно, чтобы приложение, использующее приложение, делало это с ролью входа / доступа, которая предоставляет ему ТОЛЬКО то, что ему нужно.

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

Всегда создавайте определенного пользователя, только для этой БД и / или коллекциитаблиц, и всегда предоставляйте этому пользователю абсолютный минимум, который требуется, если ваше приложение затем будет взломано с помощью межсайтовой скриптинговой атаки, то в большинстве случаев он также получит доступ к этой конкретной базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...