• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья XSLT Injections for Dummies

timeshout

RAID-массив
Пользователь
Регистрация
29.06.2022
Сообщения
62
Реакции
83
XML - довольно широко известный формат, и я уверен, что вы наверняка много слышали о XXE (XML External Entity), он даже входит в список OWASP Top 10 по безопасности веб-приложений.

Но слышали ли вы о XSLT?

Он расшифровывается как Extensible Stylesheet Language Transformations и является языком, используемым для преобразования документов XML либо в XML, либо в другие форматы, такие как HTML, SVG, обычный текст и т.д....

XSLT предоставляет такие конструкции, как циклы, if, switch-case, и другие функции, такие как substring и т.д., для выполнения манипуляций с XML-документами. Мало того, он даже позволяет определять функции и вызывать их. Потрясающе!

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


XSLT XPath Tutorial



XSLT Injections

Проблемы с инъекциями возникают, когда пользователь слепо доверяет вводимым данным, не задумываясь о последствиях. Если создать правильные условия, то это может привести к утечке данных, RCE, XSS и многому другому.

Если пользователь может предоставлять собственные файлы XSLT или вводить теги XSLT, то это может привести к инъекциям XSLT. Конструкции, которые вы имеете в своем распоряжении, во многом зависят от используемого процессора и версии спецификации XSLT. Наиболее широко используется и поддерживается версия 1, поскольку более новые версии: 2 и 3 имеют обратную совместимость, а также потому, что браузеры поддерживают версию 1 и, следовательно, популярность.

Версии 2 и 3 имеют гораздо больше возможностей по сравнению с версией 1, поэтому эксплуатация становится намного проще с более высокими версиями. Но, тем не менее, и с первой версией можно многое сделать. Вот некоторые интересные вопросы:

  • RCE
  • Local File Read (via error messages)
  • XXE
  • SSRF and Port Scans
В экосистеме XSLT мы имеем различное количество процессоров, включая:

1656897412410.png



Возможно, вы думаете, что все это полезно знать, но откуда вы вообще знаете, какой процессор используется. Ведь иначе это будет своего рода "слепая" атака, а это более болезненно и шумно, верно? Не волнуйтесь, есть некоторые теги, которые вы можете использовать для проведения разведки.

Вот 3 тега, которые вернут вам версию, поставщика и url поставщика:

Код:
<xsl:value-of select="system-property('xsl:version')" />
<xsl:value-of select="system-property('xsl:vendor')" />
<xsl:value-of select="system-property('xsl:vendor-url')" />


RCE

Подобный XSLT-файл может привести к RCE, если приложение уязвимо (если включена функция registerPHPFunctions):

1656897515245.png


1656897530377.png



Local File Read
И не только это, вы даже можете прочитать содержимое локального файла (хотя бы 1 строку) через сообщения об ошибках:
1656897591575.png


1656897611422.png



XXE
Код:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE dtd_sample[<!ENTITY ext_file SYSTEM "path/to/file">]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/events">
    Events &ext_file;:
    <xsl:for-each select="event">
      <xsl:value-of select="name"/>: <xsl:value-of select="value"/>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>


SSRF & Port Scanning

Код:
<xsl:copy-of select="document('http://10.10.10.10:22')"/>

XSLT Injections for Dummies
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх