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 Injections
Проблемы с инъекциями возникают, когда пользователь слепо доверяет вводимым данным, не задумываясь о последствиях. Если создать правильные условия, то это может привести к утечке данных, RCE, XSS и многому другому.
Если пользователь может предоставлять собственные файлы XSLT или вводить теги XSLT, то это может привести к инъекциям XSLT. Конструкции, которые вы имеете в своем распоряжении, во многом зависят от используемого процессора и версии спецификации XSLT. Наиболее широко используется и поддерживается версия 1, поскольку более новые версии: 2 и 3 имеют обратную совместимость, а также потому, что браузеры поддерживают версию 1 и, следовательно, популярность.
Версии 2 и 3 имеют гораздо больше возможностей по сравнению с версией 1, поэтому эксплуатация становится намного проще с более высокими версиями. Но, тем не менее, и с первой версией можно многое сделать. Вот некоторые интересные вопросы:
Возможно, вы думаете, что все это полезно знать, но откуда вы вообще знаете, какой процессор используется. Ведь иначе это будет своего рода "слепая" атака, а это более болезненно и шумно, верно? Не волнуйтесь, есть некоторые теги, которые вы можете использовать для проведения разведки.
Вот 3 тега, которые вернут вам версию, поставщика и url поставщика:
RCE
Подобный XSLT-файл может привести к RCE, если приложение уязвимо (если включена функция registerPHPFunctions):
Local File Read
И не только это, вы даже можете прочитать содержимое локального файла (хотя бы 1 строку) через сообщения об ошибках:
XXE
SSRF & Port Scanning
XSLT Injections for Dummies
Но слышали ли вы о 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
Возможно, вы думаете, что все это полезно знать, но откуда вы вообще знаете, какой процессор используется. Ведь иначе это будет своего рода "слепая" атака, а это более болезненно и шумно, верно? Не волнуйтесь, есть некоторые теги, которые вы можете использовать для проведения разведки.
Вот 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):
Local File Read
И не только это, вы даже можете прочитать содержимое локального файла (хотя бы 1 строку) через сообщения об ошибках:
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