什么是Server-Side-Include漏洞
服务端包含漏洞是指发送指令到服务器,服务器会将指令运行完,把运行结果包含在返回文件中发送给你。利用这种漏洞可以获取服务端的信息甚至执行命令,这样的指令是构造在HTML注释中发过去的。当然,因为包含SSI指令的文件要求特殊处理,所以必须为所有SSI文件赋予 SSI文件扩展名。默认扩展名是 .stm、.shtm和 .shtml。
指令类型
- 显示服务端变量<!--#echo var="PATH"-->
- 将文本内容添加到文档<!--#include file="phpi.php"-->
- 执行命令<!--#exec cmd="ping -c 4 172.16.204.1"-->
- 还有其他的,类似<!--#config xx=xxx--><!--#flastmod #fsize-->等等
burp扫描展示可以确认:
代码分析原理和防御
function xss($data){ switch($_COOKIE["security_level"]) { case "0" : $data = no_check($data); break; case "1" : $data = xss_check_4($data); break; case "2" : $data = xss_check_3($data); break; default : $data = no_check($data); break; } return $data;}
本质是代码在shtml里面就会被执行,那么没啥,来看防御嘛,从代码来看,应该还是过滤,我们来测试测试中级尝试绕过办法。
绕过
无防御时候的payload尝试【失败】:<!--#echo var="PATH"-->
编码了<> 测试失败
看来转义了",编码"测试<!--#echo var=%22PATH%22-->
都编码测试一下也失败
burp没有问题
其实还是可以 使用<!--#printenv-->可以获取信息高级
水平太菜,无能为力
防御
- 1、配置禁止ssi和xssi
//例如Nginx的配置文件中ssi on;//修改为ssi off;
- 2、输入过滤严格,使用htmlspecialchars函数。