Форум о защите от: хакеров, взлом, раскрутка, хакер, вирусы, взлом программы, взлом паролей, взлом вконтакте, взлом 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/ |