Статьи Прямое введение команд в Sql сервер

Discussion in 'Статьи' started by k00p3r, 13 Jun 2005.

  1. k00p3r

    k00p3r Banned

    Joined:
    31 May 2005
    Messages:
    430
    Likes Received:
    8
    Reputations:
    2
    Класс: Проверка правильности ввода
    Название Атаки: Прямое введение команд в SQL сервер
    OWASP ID : OWASP-IV-DSC-1
    Цель атаки: База данных
    Механизм: HTTP
    Описание: Ввод SQL команд (SQL injection) - методика, которая может изменять существующий или создавать новый SQL запрос, эксплуатируя уязвимость в неправильной проверке правильности ввода подпрограмм. При вводе SQL команды становится возможным отыскать данные в базе данных и в некоторых случаях в операционной системе.
    Анализ: Типичные Web приложения хранят данные в базе данных. Это позволяет динамически формировать страницы или использовать сохраненные данные для формирования страницы в зависимости от пользователя или процесса. Последовательный Язык запросов или SQL - язык высокого уровня, имеет обыкновение связываться с базами данных. Web приложения часто запрашивают вводимые пользователем данные (динамические), которые объединяются со статическими параметрами (типа баз данных и таблиц). Эти данные используются для формирования запроса, чтобы получить соответствующие данные от базы данных, которые возвращаются приложению для обработки. Приложения, которые не проверяют правильность или не санируют ввод пользователя, могут быть потенциально уязвимы следующими методами:

    Изменение SQL значений.

    Связывание дополнительных SQL инструкций.

    Добавления вызова функции или сохраненной процедуры к SQL инструкции.

    Приведение типа и связывание найденных данных.

    Пример:

    1. Изменение SQL значений:
    Оригинкальный Mysql запрос:
    UPDATE usertable SET pwd='$INPUT[pwd]' WHERE uid='$INPUT[uid]';

    Измененный HTTP запрос:
    http://www.none.to/script?pwd=ngomo&uid=1'+or+uid+like'%25admin%25';--%00

    2.Связывание дополнительных SQL инструкций
    Оригинкальный PostgreSql запрос:
    SELECT id,name FROM products WHERE id LIKE '%$INPUT[prod]%';

    Измененный HTTP запрос:
    http://www.none.to/script?0';insert+into+pg_shadow+usename+values+('hoschi');--


    3. Добавления вызова функции или сохраненной процедуры к SQL инструкции.
    Original MSSQL-Query:
    SELECT id,name FROM products WHERE id LIKE '%$INPUT[prod]%';

    Deformed HTTP-Request:
    http://www.none.to/script?0';EXEC+master..xp_cmdshell(cmd.exe+/c);--


    4. Приведение типа и связывание найденных данных.
    Original DB2-Query:
    SELECT id,t_nr,x_nr,i_name,last_update,size FROM p_table WHERE size = '$INPUT[size]';

    Deformed HTTP-Request
    http://www.none.to/script?size=0'+union+select+'1','1','1',concat(uname||'-'||passwd)+as+i_name+'1'+'1'+from+usertable+where+uname+like+'25



    Эти методы могут использоваться для получения дополнительной информации о приложении и операционной системы, обхода проверки идентификации и авторизации, получения данных и, в некоторых случаях, получения доступа к операционной системе.
    Краткий список проблем в популярных базах данных:

    1. MySQL

    Поддерживает ' INTO OUTFILE '

    Выполняется часто как "root"

    Большинство модулей и библиотек не поддерживают множественные инструкции.


    2. Oracle

    Поддерживает Subselects

    Поддерживает UNION

    Поставляется с множеством сохраненных процедур (utf_file!)

    Не позволяет множественные инструкции


    3. DB2

    Поддерживает Subselects

    Поддерживает UNION

    Сохраненные процедуры

    Не позволяет множественные инструкции


    4. Postgres

    Поддерживает COPY (если superusermode)

    Поддерживает Subselects

    Поддерживает UNION

    Сохраненные процедуры

    Возможны множественные инструкции.


    5. MS SQL

    Поддерживает Subselects

    Поддерживает UNION

    Сохраненные процедуры

    Возможны множественные инструкции.

    Поставляется с множеством опасных сохраненных процедур (xp_cmdshell, sp_adduser)

    Воздействие: Прямое введение команд в SQL сервер в обход проверки правильности ввода.
    меры противодействия:

    Никогда не пропускайте ввод пользователя без контроля типов к запросу базы данных.


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


    Проверяйте, имеет ли данный ввод, ожидаемый тип данных.


    Ограничивайте пользовательский ввод, который пропускается к базе данных.

    Большинство основных библиотек базы данных, модулей и классов обеспечивают программиста нормальной работой и механизмом защиты.
     
  2. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    ЦИТАТА выполняется часто как root

    хехе несогласен