SSI总结

SSI总结

SSI是”Server Side Includes”即服务器端包含。SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。

从技术角度上来说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。

这么一听是不是很危险?能够直接控制服务器执行命令,太恐怖了。当然这么危险的东西常见的服务器中间件中是默认不开启的。

开启SSI

Nginx

找到Nginx的配置文件,在http段中加入下面几句即可:

ssi on;
ssi_silent_errors off;
ssi_types text/shtml;

Apache

找到Apache的配置文件,修改以下内容

  1. 加载ssl模组

找到ssl_module模组,把前面的#号去掉

LoadModule ssl_module modules/mod_ssl.so
  1. 添加.shtml支持

找到以下两个,把前面的#号去掉

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
  1. 添加INCLUDES

找到这一行:

Options +Indexes +FollowSymLinks +ExecCGI 

在后面添加INCLUDES,如下面所示:

Options +Indexes +FollowSymLinks +ExecCGI +INCLUDES 

这里nginx的我开启成功了,但是apache似乎不行??

SSI语法

首先,介绍下SHTML,在SHTML文件中使用SSI指令引用其他的html文件(#include),此时服务器会将SHTML中包含的SSI指令解释,再传送给客户端,此时的HTML中就不再有SSI指令了。比如说框架是固定的,但是里面的文章,其他菜单等即可以用#include引用进来。

注意:
1.<!--与#号间无空格,只有SSI指令与参数间存在空格。
2.上面的标点="",一个也不能少。
3.SSI指令是大小写敏感的,因此参数必须是小写才会起作用。

显示服务器端环境变量echo

本文档名称:

<!--#echo var="DOCUMENT_NAME"-->

现在时间:

<!--#echo var="DATE_LOCAL"-->

显示IP地址:

<!--#echo var="REMOTE_ADDR"-->

将文本内容直接插入到文档中include

file:给出到当前目录的相对路径,其中不能使用”../“,也不能使用绝对路径

<!--#include file="index.html" -->

virtual:给出到服务器端某个文档的虚拟路径

<!--#include virtual="/www/footer.html" -->

注:file包含文件可以在同一级目录或其子目录中,但不能在上一级目录中,virtual包含文件可以是Web站点上的虚拟目录的完整路径

显示WEB文档相关信息

文件最近更新日期:

<!--#flastmod file="文件名称"-->

文件的长度:

<!--#fsize file="文件名称"-->

接执行服务器上的各种程序exec(如CGI或其他可执行程序)

cmd:常规应用程序

<!--#exec cmd="cat /etc/passwd"-->

cgi:CGI脚本程序

<!--#exec cgi="/cgi-bin/access_log.cgi"–>

将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是cgi。

修改SSI的默认设置

errmsg:设置默认的错误信息,该指令必须入在其它指令的前面

<!--#config errmsg="error!please email mamager!"-->

Timefmt:设置日期与时间的显示格式,需放在echo指令前

<!--#config timefmt="%A, %B %d, %Y"-->
<!--#echo var="last_modified"-->

Sizefmt:设置表示文件大小的单位。如bytes。该指令需要放在fsize指令前使用。

<!--#config sizefmt="bytes"-->
<!--#fsize file="head.html"-->

更多SSI的操作见:SSI指令

漏洞场景

在很多业务中,用户输入的内容会显示在页面中。比如,一个存在反射型XSS漏洞的页面,如果输入的payload不是XSS代码而是SSI的标签,同时服务器又开启了对SSI的支持的话就会存在SSI漏洞。

从定义中看出,页面中有一小部分是动态输出的时候使用SSI,比如:

  • 文件相关的属性字段
  • 当前时间
  • 访客IP
  • 调用CGI程序

利用条件:

  • Web 服务器已支持SSI(服务器端包含)
  • Web 应用程序未对对相关SSI关键字做过滤
  • Web 应用程序在返回响应的HTML页面时,嵌入用户输入

example:

<?php
echo $_POST["data"];

后端将传入的数据直接不过滤就回显到前端中,输入:

<!--#echo var="DATE_LOCAL"-->
image-20220530115455975

实现了SSI注入。

参考资料

服务器端包含注入SSI分析总结

SSI服务器注入

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇