🖥️ XPath инъекция |

🖥️ XPath инъекция

Статьи

Инъекция XPath – это атака, очень похожая на SQL-инъекцию, когда веб-приложение использует данные, предоставленные пользователем, для построения вредоносного запроса XPath в XML.

Злоумышленник может выполнить эту инъекцию, отправив вредоносную информацию в веб-приложение.

С помощью этой атаки злоумышленник может узнать, как структурированы данные XML, а также получить доступ к конфиденциальным данным из приложения.

Он также может изменить свои привилегии в уязвимом веб-приложении, если есть какие-либо XML-данные, передаваемые приложению для аутентификации.

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

XPath – один из стандартных языков, нотации которого реализуются независимо друг от друга.

Пример

Рассмотрим следующий XML-код.

      <?xml version="1.0" encoding="utf-8"?>
      <Student>
         <Student ID="1">
            <FirstName>Sashwat</FirstName>
            <LastName>K</LastName>
            <UserName>SK</UserName>
            <Password>password1</Password>
            <Type>Admin</Type>
         </Student>
         <Student ID="2">
            <FirstName>Irfan</FirstName>
            <LastName>Hameed</LastName>
            <UserName>IrfanH</UserName>
            <Password>password2</Password>
            <Type>User</Type>
         </Student>
      </Student>
   

Если приведенный выше XML-код используется для аутентификации пользователей, приложение использует XPath для поиска пользователя.

Если злоумышленник отправит случайные имя пользователя и пароль, XML вернет следующее:-

  Username: blimp' or 1=1 or 'a'='a
      Password: blimp
      
      FindUserXPath becomes //Employee[UserName/text()='blimp' or 1=1 or
            'a'='a' And Password/text()='blimp']
      
      Logically this is equivalent to:
            //Employee[(UserName/text()='blimp' or 1=1) or
            ('a'='a' And Password/text()='blimp')]
   

Этот ответ XML доказывает злоумышленнику, что для входа в приложение необходимо только сопоставить имя пользователя.

Злоумышленник может манипулировать ответом, чтобы попасть в систему.

Воздействие

Данная уязвимость может иметь следующие последствия:-

  • Чтение, обновление и удаление произвольных данных/таблиц из базы данных
  • Выполнение команд на базовой операционной системе

Устранение / меры предосторожности

Эта уязвимость может быть устранена следующим образом:-

  • Рассматривайте все вводимые пользователем данные как недоверенные. Выполните соответствующую санацию вводимых данных.
  • При санировании пользовательского ввода проверьте правильность типа, длины, формата и содержания данных.
  • В приложении клиент-сервер выполняйте проверку как на стороне клиента, так и на стороне сервера.
  • Всесторонне тестируйте приложения, которые предоставляют, распространяют или принимают пользовательский ввод.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий