• 这是另一个跟XML相关的漏洞,XLST是XML的样式表(类似CSS)
  • 原理跟XXE类似,利用脚本语言对xslt的解析支持,通过xslt的高级特性执行任意代码。
  • 不同的是XXE想要执行任意命令,是需要一定条件的。而XLST的命令执行,只需要使用了有问题XLST文件解析库,都会有任意命令执行的问题。

漏洞类型

  • 命令注入

漏洞影响

  • 任意命令执行
  • 命令执行漏洞与代码执行漏洞的区别?
    • 这两个名字容易混淆,似乎是因为中文翻译的原因。因为“命令”和“代码”其实都是“指令”的同义词。在英文里面分别是Command Execution(一般操作系统执行的指令叫command)、Code Execution(应用服务执行的指令叫code)。加上代码执行也能造成系统命令被执行,所以让大家混淆了。
    • 从名字上来看,一个是构造的系统指令从而进行利用,另一个是构造的应用服务或数据库的指令来利用。
    • 命令执行的情况,应用服务调用系统方法(如system方法),直接执行系统指令。这时我们构造的指令被直接用于系统命令执行。
    • 代码执行的情况,构造的指令,用于应用服务的指令的执行(如eval方法)。根据攻击目的,可能只需要执行到应用服务的代码就可以。因为已经有了应用服务的任意代码执行能力,所以这时也有能力去调用系统方法,去执行系统命令。(所以代码执行,有能力去执行系统命令,但不一定要去执行。这要看攻击者的目的)
      • 但有些时候,应用服务考虑到安全问题是禁用了系统方法的调用的,所以这时候没有办法执行系统命令。
      • 能执行系统命令,这个严格比较下,是比代码执行漏洞危害大,因为能做到的事情更多。但两个漏洞,其实都受限于系统的安全管理、或应用服务的安全配置。所以真实场景下,这两个漏洞的危害可以一样的很大,也有可能受限于安全配置,无法完全达到攻击目标(但也已经实现部分了)。所以在漏洞防御上,不仅仅只有修复漏洞这唯一的方法,还有安全配置,当然还有使用WAF识别拦截。
  • 另外一个容易混淆的名词:本地与远程。
    • 本地指的就是攻击者登录到服务器上执行指令。远程指的是攻击者在另一台机器上向服务器发起指令数据,被服务器执行。
    • 代码执行漏洞,默认指的就是远程代码执行漏洞。因为攻击者如果已经可以登录到服务器了,这时候主机上面的大部分应用服务他都可以使用,他应该是向往更高的权限了。
    • 命令执行漏洞,分为远程命令执行漏洞和本地命令执行漏洞。
      • 远程命令执行漏洞,一般是通过应用服务、或者RPC服务,去执行系统命令。
      • 本地命令执行漏洞,通常是攻击者已经登录到服务器、或是已经有条件执行系统命令的情况下,再做进一步的提权。因为通常情况下,攻击者登录到服务器可能是一个普通用户、或者通过远程命令执行漏洞、远程代码执行漏洞拿到了存在漏洞的服务的所有者权限。这时候如果本地有个服务是使用root运行的,这个服务又存在命令执行漏洞。这时让这个服务执行的所有指令都将会是在root权限下执行的。

检测或利用方法

哪些XLST解析库存在问题呢?

  • 可通过如下XML文件代码进行查看XSLT的版本及厂商
  • XML最好用一个能正常解析的来修改,否则格式可能会出错
<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
<xsl:test select="beers/beer">
    XSLT Version: <xsl:value-of select="system-property('xsl:version')" /><br/>
    XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" /><br/>
    XSLT Verdor URL: <xsl:value-of select="system-property('xsl:vendor-url')" /><br/>
</xsl:test>
</body>
</html>

页面回显:
XSLT Version: 1.0
XSLT Vendor: libxslt
XSLT Verdor URL: http://xmlsoft.org/XSLT/
说明存在漏洞。

更多漏洞利用方式

对照下表,http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20XSLT%20Processing%20Security%20and%20Server%20Side%20Request%20Forgeries%20-%20OWASP%20Switzerland%20Meeting%202015.pdf

语法文档:http://www.xsltfunctions.com/xsl/fn_unparsed-text.html