SSI解析(Server Side Include)

1、SSI介绍   SSI全称(Server Side Includes),是在HTML静态页面中使用的指令,当页面在服务器端执行的时候可以进行服务端解析的。 
这种方式可以让我们在存在的HTML页面里面动态的生成内容,而不是在整个执行了CGI等服务器端技术的接触上进行动态页面服务。在返回请求的页面(包含SSI指令),服务器会处理这些指令,并用处理的结果替换指令,然后把页面返回。 

因为SSI指令的文件要求特殊处理,所以必须为所有SSI文件赋予SSI文件拓展名。  默认扩展名是: 
.stm、.shtm和.shtml
2、配置apache支持SSI解析 

2、1 编辑配置文件 

1、加载include.so模块(默认加载) 
LoadModule include_module modules/mod_include.so
2、添加支持类型(默认支持) 
AddType text/html .shtml 
AddOutputFilter INCLUDES .shtml

3、Directory目录权限中添加Includes 
#支持全部功能 
Options Indexes FollowSymLinks Includes 
#不能够调用exec执行命令 
Options Indexes FollowSymLinks IncludesNOEXEC

4、重启Apache 
/etc/init.d/apache restart
2、2 通过配置htaccess来支持SSI 

1、允许apache支持htaccess文件,并重启服务 
vim /etc/httpd/conf/httpd.conf 
AllowOverride All

2、目录中写入htaccess文件 
Options Indexes FollowSymLinks Includes 
AddType application/x-httpd-CGI .CGI 
AddType text/x-server-parsed-html .shtml

3、SSI指令集 

config:设置日期格式一起被SSI处理的其他数据 
echo:用于显示各种服务器变量 
参数: 
        
  1.     var :定义变量  
  2.     DOCUMENT_NAME :显示当前文档的名称  
  3.     DOCUMENT_URL :显示当前文档的虚拟路径  
  4.     SERVER_SOFTWARE :显示服务器软件的名称和版本  
  5.     SERVER_NAME :显示服务器的主机名, DNS 别名或者 IP 地址  
具体利用 
        
  1.     vim echo . sthml 
  2.      <!--# echo var = "DOCUMENT_NAME" -->  
exec:执行命令 
        
  1.     vim cmd . shtml 
  2.      <!--# exec cmd = "id" -->  
include:用于将其他文档或元素包含在当前文档中 
参数: 
    virtual:给出到服务器端某个文档的虚拟路径 
    file:给出当前目录的相对路径,其中不能使用"../",页不能使用绝对路径 
        
  1.     vim include . shtml 
  2.      <!--# include file = "1.txt" -->
测试结果 
[root@centos html]# cat cmd.shtml 
<!--#exec cmd="id "--> 

返回页面 
?  ~  curl http://192.168.5.6/cmd.shtml 
uid=48(apache) gid=48(apache) groups=48(apache)

参考: 
        
  1. http : //weibo.com/p/230418777f9dbb0102v9de?from=page_100505_profile&wvr=6&mod=wenzhangmod 
  2. http : //www.haodaima.net/art/1699955 
  3. http : //baike.baidu.com/item/shtml 
  4. http : //kennel209.gitbooks.io/owasp-testing-guide-v4/content/zh/web_application_security_testing/testing_for_ssi_injection_otg-inpval-009.html
SSIwebshell见附件