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

Введение в XPath - инъекции
http://ah.flybb.ru/topic1432.html
Страница 1 из 1

Автор:  BECHED [ 29-12, 12:31 ]
Заголовок сообщения:  Введение в XPath - инъекции

Что такое 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 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/