Форум о защите от: хакеров, взлом, раскрутка, хакер, вирусы, взлом программы, взлом паролей, взлом вконтакте, взлом icq, раскрутка сайта, взлом скачать, взлом почты, взлом ru, проги взлома, хакер, программа взлома, трояны, программирование

Хакер, взлом, программа, сайт, форум, информатика, железо, разгон, раскрутка, SEO, защита, безопасность, взломать, как взломать, взлом icq, взлом вконтакте, взлом программ, одноклассники, взлом почты, взлом аськи
Текущее время: 03-05, 16:11

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Введение в XPath - инъекции
СообщениеДобавлено: 29-12, 12:31 
Не в сети
<b><font color=red>Admin</font></b>
Аватара пользователя

Зарегистрирован: 22-05, 15:38
Сообщения: 1901
Что такое XPath инъекции? Данные могут хрнаиться в XML файлах всесто баз данных. Для \"общения\" с XML документами был разработан язык XPath. Спецификации его не возбраняется сыскать тут: http://www.w3.org/TR/xpath.

XPath - язык запросов для XML документов, в общем схожий на SQL для баз данных. Правда вместо таблиц, колонок и строчек XPath оперирует нодами в XML дереве. Но аналогично SQL, XPath может быть уязвим для инъекции в случае в случае введенные данные мало проверяются на стороне сервера.
В чем угроза XPath инъекций?

XPath 1.0 - стандартный язык в отличии от SQL, что имеет уймище \"диалектов\", основанных на сравнительно слабом синтаксисе.

XPath 1.0 позволяет заполучить все объекты базы (XML объяекты). В SQL во многих случаях мы не можем простым SELECT достигнуть до всех объектов базы данных.

XPath 1.0 не имеет разграничений прав для доступа к базе данных в то час как в SQL кое-какие части БД могут быть недоступны из-за недостатка прав.
Пример 1

Представим что у нас есть XML база и аутентификация, основанная на ней:



1
admin
xp8th!



2
test
test987



3
bigolnerd
nerdsneedlovetoo



Код, реализующий атуентификацию:

String username = req.getParameter(\"username\');
String password = req.getParameter(\"password\');
XPathFactory factory = XPathFactory.newInstance();

Xpath xpath = factory.newXPath();
File file = new File(\"/usr/webappdata/users.xml\');

InputSource src = new InputSource(new FileInputStream(file));
XPathExpression expr = xpath.compile(\"//users[username/text()=\' \" +
username + \" \' and password/text()=\' \" + password + \' \']/id/text()\');

String id = expr.evaluate(src);

Этот код загружает XML протокол и запросом получает из него ID, привязанный к введенному пользователем логину и паролю. Предположим это \"admin\" и \"xp8th!\". В таком случае запрос будет такой:

//users[username/text()=\'admin\' and password/text()=\'xp8th!\'] /id/text()

Никаких проверок не производится и не возбраняется применить давнехонько знакомый нам подход использовав \' либо \'1\'=\'1;

//users[username/text()=\'admin\' and password/text()=\'\' or \'1\'=\'1\' ]/id/text()

Запрос вернет ID для пользователя admin с пустым паролем либо при условии 1=1, что завсегда правда.
Пример 2

Представим, что у нас есть таковый документ:




Bob Smith
bob.smith@bobsmithinc.com
1234567812345678


1
10.00
Sprocket



2
9.00
Cog



...


Сайт позволяет пользователю осуществлять розыск по своим предыдущим заказм по цене. XPath запрос в приложении выглядит на глаз так:

string query = \"/orders/customer[@id=\'\" + customerId + \"\']/order/item[price >= \'\" + priceFilter + \"\']\";

Если оба поля customerId и priceFilter не проверяются на ввод, атакующий может применять инъекцию. Введя следующие значения нападающий получит весь XML документ:

\'] | /* | /foo[bar=\'

Запрос будет смотреться так:

string query = \"/orders/customer[@id=\'\'] | /* | /foo[bar=\'\']/order/item[price >= \'\" + priceFilter + \"\']\";

Одним простым запросом мы получаем всю базу данных.
Зачем применять XML вместо баз данных?

Многие XML приложения используют XML дампы баз данных. Идея сосотоит в том, что позволительно ВСЕ ЧТО УГОДНО поместить в XML и опосля применять приложение либо кое-какой код для парсинга тех данных, которые вам необходимы (В частности, к примеру, на Хакере XML базы применяются для разгрузки занятого SQL сервера. Сформировав дампы мы перенесли проблему получения нужных данных со сложных и тяжелых SQL запросов на файловую систему и легкое читка XML файлов.) Проблема же в том, что нет никакого контроля над уровнем доступа и в случае ваше приложение либо код читает XML протокол, то существует вероятность того, что ЛЮБЫЕ данные в нем могут быть просмотрены.

Если ваш сайт использует XML документы для хранения данных и пользовательский ввод употребляется для построения запросов, то целиком быть может, что он уязвим для XPath инъекции.
Защита от XPath инъекций

Лучший тракт это, разумеется, прямые руки разработчиков - ревизия всех полученных от пользователя данных на ошибочные символы и слова.Наиболее оптимально сотворить список разрешенных символов, в частности для ввода номера кредитной карты это будут цифры от 0 до 9, для, в частности, имен - только буквы. Второй технология - параметризация зарпосов. Вместо того, что бы составлять строку запроса в приложении на лету, динамически, целесообразнее сотворить прекомпелированный запрос и уже отдавать переменные не выражениями, а параметрами.
Ссылки

Борьба с XPath инъекциями в .NET:

http://www.tkachenko.com/blog/archives/000385.html

Руководство XPath:

http://www.w3schools.com/xpath/

Предотвращение XPath инъекций:

http://www.ibm.com/developerworks/xml/l ... ction.html

-=Jul=- at xakep.ru

BigBear


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by Forumenko © 2006–2014
Русская поддержка phpBB