ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Продвинытый посимвольный перебор в БД Oracle
  #1  
Старый 12.10.2007, 18:24
Slon
Участник форума
Регистрация: 09.12.2005
Сообщений: 162
Провел на форуме:
701592

Репутация: 91
По умолчанию Продвинытый посимвольный перебор в БД Oracle

Продвинытый посимвольный перебор в БД Oracle

[* Вступление *]

Oracle очень функциональная БД. Осуществить классический посимвольный перебор в ней не проблема. Но как быть, когда отсутствует вывод результатов запроса. Возьмем как пример авторизацию, в ней иногда бывают очень сложные SQL запросы, которые сложно обойти простым ')--. Речь в этой статье пойдет о том, как быть если вы столкнулись с вышеописаным случаем.

[* Теория *]
Как я уже сказал выше в Oracle хватает разных наворотов, есть большое поле для творчества.
Начнем с rownum. Это что-то вроде аналога Limit в MySQL. С ним можно работать как с обычным полем из таблицы подставляя его в условие where. Смысл этого оператора в том что бы ограничить кол-во выводимых рядов. Точнее выбрать во номеру нужный нам ряд.

Теперь пару слов о функции substr. Синтаксис у нее стандартный для языка SQL:
substr(string,start[,length])

Эта функция обладает одним отличным свойством. Если в в качестве параметра подставить результат возвращяющий более одного ряда, то мы увидим ошибку:
single-row subquery returns more than one row

Думаю вы уже поняли о чем дальше будет идти речь

[* Практическая реализация *]
Первое что нам нужно это конечно место для substr. Тут думаю все просто. В нашем случае:
') AND 'x'=substr((…),1);

Основная задача – это составление подзапроса. Нам нужна таблица с большим кол-вот записей, в качестве нее возьмем таблицу аll_users. Вот что должно получитсья (смысл поясню ниже):
(select 1 from all_users where rownum between 1 and (…))

Теперь самое главное! Когда 2 чиста в between станут равны (или второе будет меньше первого) то ошибка пропадет. Что бы добиться этого будет постепенно отнимать от ascii кода символа число, увеличивая его на единицу. Пример:

ascii(substr(user,1))-1 ОШИБКА
ascii(substr(user,1))-2 ОШИБКА
.......
ascii(substr(user,1))-86 НЕТ ОШИБКИ

Значит символ – 86 = 1. Код нашего символа 87 то есть 'W'.
Дальше аналогично, нужно лишь менять параметр start в substr.

Общий запрос выглядит примерно так:
') AND 'x'=substr((select 1 from all_users where rownum between 1 and (ascii(substr(user,1))-86)),1)--

[* Заключение *]
Понятно, что в ручную переберать почти нереально. В ближайшем времени ждите новый релиз для автоматизацуии перебора

© Slon, http://aoh.name

Последний раз редактировалось Slon; 12.10.2007 в 18:29..
 
Ответить с цитированием

  #2  
Старый 12.10.2007, 18:44
guest3297
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме:
3887520

Репутация: 2996


По умолчанию

сабстринг боян.
 
Ответить с цитированием

  #3  
Старый 12.10.2007, 18:45
Slon
Участник форума
Регистрация: 09.12.2005
Сообщений: 162
Провел на форуме:
701592

Репутация: 91
По умолчанию

Прочитай чуть внимательнее) Там основнно на rownum. Когда полностью отсутствует вывод
 
Ответить с цитированием

  #4  
Старый 12.10.2007, 18:46
kair
Участник форума
Регистрация: 12.10.2006
Сообщений: 158
Провел на форуме:
668286

Репутация: 187
Отправить сообщение для kair с помощью ICQ
По умолчанию

всегда забивал на такие скули =\
 
Ответить с цитированием

  #5  
Старый 12.10.2007, 18:48
guest3297
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме:
3887520

Репутация: 2996


По умолчанию

так в оракле везде роунум используеться при селектах
 
Ответить с цитированием

  #6  
Старый 12.10.2007, 18:49
Slon
Участник форума
Регистрация: 09.12.2005
Сообщений: 162
Провел на форуме:
701592

Репутация: 91
По умолчанию

Ну да. Тут я этим и пользуюсь. А первый substring нужен что б "ловить" ошибки. Тут ошибка НЕ самого веб приложения (т.к. вывод чего-либо отсутствует)
 
Ответить с цитированием

  #7  
Старый 12.10.2007, 18:50
guest3297
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме:
3887520

Репутация: 2996


По умолчанию

Ну ладно подожду релиза
 
Ответить с цитированием

  #8  
Старый 12.10.2007, 19:54
Scipio
Members of Antichat - Level 5
Регистрация: 02.11.2006
Сообщений: 781
Провел на форуме:
5939734

Репутация: 1917


Отправить сообщение для Scipio с помощью ICQ
По умолчанию

Способ оригинальный конечно, но это частный случай, который не всегда сработает, имхо "классическое" использование подзапросов имеет более широкое применение...
__________________
Карфаген должен быть разрушен...
 
Ответить с цитированием

  #9  
Старый 12.10.2007, 20:04
Slon
Участник форума
Регистрация: 09.12.2005
Сообщений: 162
Провел на форуме:
701592

Репутация: 91
По умолчанию

Просто понимаешь, тебе не помогут подзапросы, когда ты не видишь вывода результатов. Тут изюминка в том, что бы вызвать ошибку самого SQL-а. В aspx почти стопроцентная гарантия, что мы ее увидим
 
Ответить с цитированием

  #10  
Старый 12.10.2007, 20:17
Slon
Участник форума
Регистрация: 09.12.2005
Сообщений: 162
Провел на форуме:
701592

Репутация: 91
По умолчанию

Под выводом я имел ввиду какие-то признаки жизни. В твоем случае это перекидывание на гл. страницу
Мой де разработан, когда таковых вообще нет. А ошибку ASP ты не отменишь.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посимвольный перебор в базах данных на примере MySQL LoFFi Чужие Статьи 5 30.04.2007 05:05
Посимвольный перебор в бд }{0TT@БЬ)Ч PHP, PERL, MySQL, JavaScript 8 24.01.2007 21:14
Распределённый перебор *Van* Расшифровка хешей 399 24.12.2005 18:14
Распределенный перебор. Ver.3 (прием участников и хэшей) censored! Расшифровка хешей 191 06.09.2005 10:41
Перебор пароля Dimann E-Mail 34 29.01.2005 02:09



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ