什么是SSI
全程:server side includes injection 服务器端包含注入
SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。SSI具有强大的功能,只要使用一条简单的SSI 命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。它与CGI类似,不同之处在于SSI用于在加载当前页面之前或在页面可视化时执行某些操作。 为此,Web服务器在将页面提供给用户之前分析SSI
从技术角度上来说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。
在很多场景中,用户输入的内容可以显示在页面中,比如一个存在反射XSS漏洞的页面,如果输入的payload不是xss代码而是ssi的标签,服务器又开启了ssi支持的话就会存在SSI漏洞
一种对于这类漏洞的挖掘方式即是查看.stm,.shtm和.shtml的页面是否存在,但是缺少这些类型的页面并不意味着不存在SSI攻击。
SSI漏洞产生的条件
用户存在可控输入,并且未过滤,并且还能回显嵌入到html中,如其中一条
<!--#exec cmd=""...""-->(会执行给定的 shell 命令)
如果没有过滤吧
通常存在XSS的地方如果开启了SSI服务,那么就会造成服务器注入
<!--#include file=""...""-->(会显示给定的文件)
SSI命令语法解析
①显示服务器端环境变量<#echo>
本文档名称:
<!--#echo var="DOCUMENT_NAME"-->
现在时间:
<!--#echo var="DATE_LOCAL"-->
显示IP地址:
<!--#echo var="REMOTE_ADDR"-->
②将文本内容直接插入到文档中<#include>
<!--#include file="文件名称"-->
<!--#include virtual="index.html" -->
<!--#include virtual="文件名称"-->
<!--#include virtual="/www/footer.html" -->
注:file包含文件可以在同一级目录或其子目录中,但不能在上一级目录中,virtual包含文件可以是Web站点上的虚拟目录的完整路径
③显示WEB文档相关信息<#flastmod><#fsize>(如文件制作日期/大小等)
文件最近更新日期:
<!--#flastmod file="文件名称"-->
文件的长度:
<!--#fsize file="文件名称"-->
④直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)
<!--#exec cmd="文件名称"-->
<!--#exec cmd="cat /etc/passwd"-->
<!--#exec cgi="文件名称"-->
<!--#exec cgi="/cgi-bin/access_log.cgi"-->
⑤一次CTF中用到的指令
<!--%23include virtual="flag" -->
1、显示服务器端环境变量<#echo>
2、将文本内容直接插入到文档中<#include>
3、显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)
4、直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)
5、设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式)
高级SSI可设置变量使用if条件语句。
SSI指令基本格式:
注意:
1.<!--与#号间无空格,只有SSI指令与参数间存在空格。
2.上面的标点="",一个也不能少。
3.SSI指令是大小写敏感的,因此参数必须是小写才会起作用。
有的时候可使用`来绕过对"的过滤//有时候 有时候,
SSI命令:
https://www.owasp.org/index.php/Server-Side_Includes_%28SSI%29_Injection
https://www.cnblogs.com/wqhwe/p/5442612.html
CTF实战SSI
[EIS-2018ctf挑战赛](https://shuaizhupeiqi.github.io/2018/11/16/2018%20%E9%AB%98%E6%A0%A1%E7%BD%91%E7%BB%9C%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86%E8%BF%90%E7%BB%B4%E6%8C%91%E6%88%98%E8%B5%9B/)
SSI漏洞挖掘
SSI漏洞,一般存在xss的地方都值得一试。
并非所有文件中的SSI指令都会被解析,必须告诉Apache应该解析哪些文件。有两种方法使Apache解析带有特定后缀名的文件,比如:.shtml ,配置如下:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
.stm,.shtm和.shtml的页面是否存在文件后缀名是用来表明网页文件是否包含SSI指令的,因此如果该网站使用了.shtml文件,那说明该网站支持SSI指令。然而.shtml后缀名并非是强制规定的,因此如果没有发现任何.shtml文件,并不意味着目标网站没有受到SSI注入攻击的可能。
SSI防护
默认apache不开启ssi,ssi这种技术已经比较少用了。如果应用没有使用到ssi,关闭服务器对ssi的支持即可。
网友评论