0x00 SSI概述:
SSI(Server Side Include)即服务器端嵌入或者叫服务器端包含。SSI技术通过在文档中加入SSI指令,让服务器端在输出文档之前解析SSI指令,并把解析完的结果和文档一同输出给客户端。
SSI的指令格式为:<!-- #directive parameter="value" -->
其中,directive是指令名,parameter指令参数,value指令参数值
可以看到,就是html注释,事实上,Web服务器开启了SSI,并且页面包含可以解析的指令,那么Web服务器就解析这个指令。没开启器SSI或者开启了SSI,但是不是可以解析的指令,那么都当做注释。
详细:参见博客
0x01 win下开启SSI:
1、修改配置文件,开启ssl_module模块
2、为虚拟主机添加SSI的INCLUDES指令:
3、添加可用于执行SSI之类的页面:(.shtml或html等自己指定的扩展名)
修改完配置文件(httpd.conf)要重启服务器使配置生效,另外如果重启apache失败可以检查配置文件是否修改有错误,导致读取配置文件失败,服务器启动失败。
4、实现一下SSI进行文件包含:
文件结构:
首先在ss文件夹下创建input.html
然后在include目录下创建p.html:
在根目录下(SSI目录)创建btn.html:
然后在浏览器打开input页面:
可以看到同过SSI的include指令,input.html包含了btn.html和p.html。这个就是SSI技术。
0x02 一个SSI注入靶机:
整个靶机的利用较为简单:
1、 首页发现提交界面:
2、 数据提交到一个shtml页面,可以尝试是否存在SSI注入:
3、 尝试提交恶意SSI指令:
发现存在简单过滤:
尝试大小写bypass:
4、 利用msf生成一个meterpreter/reverse_tcp 的shell:
5、 通过python3开启简易web服务,然后通过SSI注入下载shell文件:
6、 使用msf监听反弹回来的shell
访问上传的shell.php反弹shell到msf
7、 至此拿到一个meterpreter_shell,尝试提权,上传漏洞检测脚本,扫描发现存在CVE-2017-16695(如何上传文件,可以使用meterpreter的文件上传下载功能)
Shell美化:
执行漏洞扫描脚本:
8、 不过执行提权时发现使用的是i686的系统,exp无法编译执行,CVE-2017-16695提权失败。
0x03 由于太菜,之后的提权直接使用了物理提权,嘻嘻(修改linux启动配置,强制修改root密码)
1、 使用recover mode强行进入root权限的linux终端:在Linux启动过程中一直按ESC键,进入GRUB界面,选择advanced options。
2、 进入该模式之后选择recovery mode,然后按e进入编辑方式:
3、 修改配置文件:
原来是这个亚子的:
改完之后:
然后按ctrl+x重启系统,就可以强制进入root权限的终端:修改root密码
这个系统有点坑,还要修改一下启动配置文件,是root用户可以登录系统:
修改/root/.profile文件:
之后重启主机就可以使用root用户登录了。
0x04 分析一波SSI漏洞成因:
1、 首先查看一下apache的配置文件:
2、 打包源代码下载到本地进行分析:
在index.php中将输入传递到receipt.php进行处理:
在receipt.php文件中进行简单的过滤:
在37行导入输入值然后写入receipt.shtml,最后包含这个文件:
因为服务器开启了SSI技术,可以从37行获取访问IP的形式看出来:
又由于过滤不严格,那么在此处便存在着SSI注入。
3、 本地之前开启了SSI技术,尝试包含之前的input.html:<!--#include virtual="./ss/input.html"-->
4、 在windows下存在的一个问题就是要想执行命令,要配合CGI模块一起进行。