目录
- 1. 介绍
- 2. 配置使用
- 2.1 启用SSI
- 2.2 SSI语法
- 3. SSI注入
1. 介绍
SSI:Server Side Includes,服务器端包含。
SSI是前乳HTML页面中的指令,在页面被提供时,由服务器进行运算,以对现有html页面增加动态生成的内容,而无需通过CGI程序提供整个页面,或者使用其他动态技术。
从技术角度上,SSI就是在HTML文件中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或者远程执行任意代码。
2. 配置使用
2.1 启用SSI
-
apache
默认apache不开启SSI,SSI这种技术很少使用了。如果应用中没有用到SSI,关闭服务器对SSI的支持就可以。
-
IIS
IIS也可以开启SSI功能。
-
Nginx
在http段加入下面内容:
ssi on; ssi_silent_errors off; ssi_types text/shtml;
2.2 SSI语法
SHTML文件:
在SHTML文件中使用SSI指令(#incldue)引用其他的HTML文件,此时服务器会将SHTML中包含的SSI指令解释,再传送给客户端。此时的HTML中就不再含有SSI指令了。
- <#echo>:显示服务器端环境变量
- 本文档名称:
<!--#echo var="DOCUMENT_NAME"-->
- 现在时间:
<!--#echo var="DATE_LOCAL"-->
- 显示IP地址:
<! #echo var="REMOTE_ADDR"-->
- 本文档名称:
- <#include>:将文本内容直接插入到文档中
- file包含文件:
<!--#include file="文件名称"-->
- virtual包含文件:
<!--#include virtual="文件名称”-->
- file包含文件可以再同一级目录或者其子目录中,但是不能在上一级目录中;virtual包含文件可以是web站点上的虚拟目录的完整路径。
- file包含文件:
- 显示web文档相关信息
- 文件最近更新日期:
<!--#flastmod file="文件名称"-->
- 文件的长度:
<!--#fsize file="文件名称"–--
- 文件最近更新日期:
- <#exec>:直接执行服务器上的各种程序
- 其他可执行程序:
<!--#exec cmd="cat /etc/passd"-->
- CGI:
<!--#exec cgi="/cgi-bin/access_log.cgi"-->
- 将某一个外部程序的输出插入到页面中,可以插入CGI程序或者是常规应用程序的输入,这取决于参数是cmd还是cgi。
- 其他可执行程序:
3. SSI注入
SSI注入的条件:
- web服务器支持SSI。
- web应用程序未对相关SSI关键字做过滤。
- web应用程序在返回响应的HTML页面时,嵌入用户输入。
漏洞场景:
在很多业务中,用户输入的内容会展示在页面中。
比如:一个存在反射型XSS漏洞的页面,如果输入的payload不是xss代码,而是SSI的标签,同事服务器又开启了对SSI的支持的话,就会存在SSI漏洞。