diff --git a/README.md b/README.md index 6e91f3b..5fc66de 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,7 @@ docker run -d -p 80:8080 medicean/vulapps:s_struts2_s2-037 * [Samba](./s/samba/) * [Shiro](./s/shiro/) +* [SSH](./s/ssh/) * [Spring Boot](./s/springboot/) * [Struts2](./s/struts2/) * [Spring WebFlow](./s/springwebflow/) diff --git a/s/README.md b/s/README.md index 79fa842..452798e 100644 --- a/s/README.md +++ b/s/README.md @@ -2,6 +2,7 @@ * [Samba](./samba/) * [Shiro](./shiro/) +* [SSH](./ssh/) * [Spring Boot](./springboot/) * [Struts2](./struts2/) * [Spring WebFlow](./springwebflow/) diff --git a/s/ssh/1/Dockerfile b/s/ssh/1/Dockerfile new file mode 100644 index 0000000..eefc0e0 --- /dev/null +++ b/s/ssh/1/Dockerfile @@ -0,0 +1,15 @@ +FROM medicean/vulapps:base_lamp + +RUN set -x \ + && apt-get update \ + && apt-get install -y git=1:1.9.1-1 \ + && rm -rf /var/www/html/* \ + && mkdir -p /var/www/html/repos + +COPY src/apache2.conf /etc/apache2/apache2.conf +COPY src/index.php /var/www/html/index.php + +RUN chown -R www-data:www-data /var/www/html + +EXPOSE 80 +CMD ["/start.sh"] diff --git a/s/ssh/1/README.md b/s/ssh/1/README.md new file mode 100644 index 0000000..f4d25d1 --- /dev/null +++ b/s/ssh/1/README.md @@ -0,0 +1,69 @@ +## SSH 命令注入漏洞(CVE-2017-1000117) + +### 漏洞信息 + +恶意人员可以通过巧妙构造 `ssh://…` 链接,让受害人在执行程序等情况下访问该恶意链接,从而达到命令执行的目的。 + +### 影响范围 + +#### 修复版本 + +* Git v2.14.1、2.7.6、v2.8.6、v2.9.5、v2.10.4、v2.11.3、v2.12.4 和 v2.13.5 + +### 镜像信息 + +类型 | 值 +:-:|:-: +Git | 1.9.1 +HTTP 端口 | 80 +镜像 tag | `s_ssh_1` + +### 获取环境: + +1. 拉取镜像到本地 + + ``` +$ docker pull medicean/vulapps:s_ssh_1 + ``` + +2. 启动环境 + + ``` +$ docker run -d -p 8000:80 medicean/vulapps:s_ssh_1 + ``` + > `-p 8000:80` 前面的 8000 代表物理机的端口,可随意指定。 + + 访问 http://127.0.0.1:8000 + +### POC + +本环境中,模拟了远程导入仓库的情景。在该场景下攻击者可远程执行命令。配合本环境所使用的远程 PoC 仓库为:[https://github.com/VulApps/CVE-2017-1000117.git](https://github.com/VulApps/CVE-2017-1000117.git) + +1. 修改并提交远程 PoC 仓库的 [payload](https://github.com/VulApps/CVE-2017-1000117/blob/master/payload) 文件,内容为将要执行的命令 + + 本例中执行的命令为: + + ``` +id > /var/www/html/vul + ``` + + > 若命令执行成功,则会在 `/var/www/html` 目录下生成 `vul` 文件,内容为 `id` 命令的执行结果(实际使用时可直接反弹 Shell) + + +2. 访问目标页面,并填写要 import 的仓库地址 + + > 假如目标地址为: http://127.0.0.1:32774/ + + ![](https://github.com/Medicean/VulApps/raw/master/s/ssh/1/poc-1.png) + +3. 点击 import 之后,访问 `http://127.0.0.1:32774/vul`,看到执行结果 + + ![](https://github.com/Medicean/VulApps/raw/master/s/ssh/1/poc-2.png) + +### 相关链接 + +* [VulApps/CVE-2017-1000117](https://github.com/VulApps/CVE-2017-1000117.git) +* [SSH 命令注入漏洞(CVE-2017-1000117)分析](http://bobao.360.cn/learning/detail/4244.html) +* [多款主流版本控制系统被曝存在客户端任意代码执行漏洞](http://m.bobao.360.cn/news/detail/4260.html) +* [A PoC Repository for CVE-2017-1000117](https://gitlab.com/joernchen/CVE-2017-1000117) +* [CVE-2017-1000117 - PoCs](https://github.com/Manouchehri/CVE-2017-1000117) diff --git a/s/ssh/1/poc-1.png b/s/ssh/1/poc-1.png new file mode 100644 index 0000000..6e61fdd Binary files /dev/null and b/s/ssh/1/poc-1.png differ diff --git a/s/ssh/1/poc-2.png b/s/ssh/1/poc-2.png new file mode 100644 index 0000000..66f420c Binary files /dev/null and b/s/ssh/1/poc-2.png differ diff --git a/s/ssh/1/src/apache2.conf b/s/ssh/1/src/apache2.conf new file mode 100644 index 0000000..1576d89 --- /dev/null +++ b/s/ssh/1/src/apache2.conf @@ -0,0 +1,228 @@ +# This is the main Apache server configuration file. It contains the +# configuration directives that give the server its instructions. +# See http://httpd.apache.org/docs/2.4/ for detailed information about +# the directives and /usr/share/doc/apache2/README.Debian about Debian specific +# hints. +# +# +# Summary of how the Apache 2 configuration works in Debian: +# The Apache 2 web server configuration in Debian is quite different to +# upstream's suggested way to configure the web server. This is because Debian's +# default Apache2 installation attempts to make adding and removing modules, +# virtual hosts, and extra configuration directives as flexible as possible, in +# order to make automating the changes and administering the server as easy as +# possible. + +# It is split into several files forming the configuration hierarchy outlined +# below, all located in the /etc/apache2/ directory: +# +# /etc/apache2/ +# |-- apache2.conf +# | `-- ports.conf +# |-- mods-enabled +# | |-- *.load +# | `-- *.conf +# |-- conf-enabled +# | `-- *.conf +# `-- sites-enabled +# `-- *.conf +# +# +# * apache2.conf is the main configuration file (this file). It puts the pieces +# together by including all remaining configuration files when starting up the +# web server. +# +# * ports.conf is always included from the main configuration file. It is +# supposed to determine listening ports for incoming connections which can be +# customized anytime. +# +# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/ +# directories contain particular configuration snippets which manage modules, +# global configuration fragments, or virtual host configurations, +# respectively. +# +# They are activated by symlinking available configuration files from their +# respective *-available/ counterparts. These should be managed by using our +# helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See +# their respective man pages for detailed information. +# +# * The binary is called apache2. Due to the use of environment variables, in +# the default configuration, apache2 needs to be started/stopped with +# /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not +# work with the default configuration. + + +# Global configuration +# + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE! If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the Mutex documentation (available +# at ); +# you will save yourself a lot of trouble. +# +# Do NOT add a slash at the end of the directory path. +# +#ServerRoot "/etc/apache2" + +# +# The accept serialization lock file MUST BE STORED ON A LOCAL DISK. +# +Mutex file:${APACHE_LOCK_DIR} default + +# +# PidFile: The file in which the server should record its process +# identification number when it starts. +# This needs to be set in /etc/apache2/envvars +# +PidFile ${APACHE_PID_FILE} + +# +# Timeout: The number of seconds before receives and sends time out. +# +Timeout 300 + +# +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. +# +KeepAlive On + +# +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. +# +MaxKeepAliveRequests 100 + +# +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. +# +KeepAliveTimeout 5 + + +# These need to be set in /etc/apache2/envvars +User ${APACHE_RUN_USER} +Group ${APACHE_RUN_GROUP} + +# +# HostnameLookups: Log the names of clients or just their IP addresses +# e.g., www.apache.org (on) or 204.62.129.132 (off). +# The default is off because it'd be overall better for the net if people +# had to knowingly turn this feature on, since enabling it means that +# each client request will result in AT LEAST one lookup request to the +# nameserver. +# +HostnameLookups Off + +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a +# container, error messages relating to that virtual host will be +# logged here. If you *do* define an error logfile for a +# container, that host's errors will be logged there and not here. +# +ErrorLog ${APACHE_LOG_DIR}/error.log + +# +# LogLevel: Control the severity of messages logged to the error_log. +# Available values: trace8, ..., trace1, debug, info, notice, warn, +# error, crit, alert, emerg. +# It is also possible to configure the log level for particular modules, e.g. +# "LogLevel info ssl:warn" +# +LogLevel warn + +# Include module configuration: +IncludeOptional mods-enabled/*.load +IncludeOptional mods-enabled/*.conf + +# Include list of ports to listen on +Include ports.conf + + +# Sets the default security model of the Apache2 HTTPD server. It does +# not allow access to the root filesystem outside of /usr/share and /var/www. +# The former is used by web applications packaged in Debian, +# the latter may be used for local directories served by the web server. If +# your system is serving content from a sub-directory in /srv you must allow +# access here, or in any related virtual host. + + Options FollowSymLinks + AllowOverride None + Require all denied + + + + AllowOverride None + Require all granted + + + + Options Indexes FollowSymLinks + AllowOverride None + Require all granted + + +# +# Options Indexes FollowSymLinks +# AllowOverride None +# Require all granted +# + + Options Indexes FollowSymLinks + + SetHandler application/x-httpd-php-source + Order Deny,Allow + Allow from all + + + + + +# AccessFileName: The name of the file to look for in each directory +# for additional configuration directives. See also the AllowOverride +# directive. +# +AccessFileName .htaccess + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# + + Require all denied + + + +# +# The following directives define some format nicknames for use with +# a CustomLog directive. +# +# These deviate from the Common Log Format definitions in that they use %O +# (the actual bytes sent including headers) instead of %b (the size of the +# requested file), because the latter makes it impossible to detect partial +# requests. +# +# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended. +# Use mod_remoteip instead. +# +LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined +LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %O" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + +# Include of directories ignores editors' and dpkg's backup files, +# see README.Debian for details. + +# Include generic snippets of statements +IncludeOptional conf-enabled/*.conf + +# Include the virtual host configurations: +IncludeOptional sites-enabled/*.conf + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/s/ssh/1/src/index.php b/s/ssh/1/src/index.php new file mode 100644 index 0000000..c657256 --- /dev/null +++ b/s/ssh/1/src/index.php @@ -0,0 +1,22 @@ + + + + Repository Clone + + +

CVE-2017-1000117 Demo

+
+
+
+ +
+Repos'; + } +?> + + diff --git a/s/ssh/README.md b/s/ssh/README.md new file mode 100644 index 0000000..1867a66 --- /dev/null +++ b/s/ssh/README.md @@ -0,0 +1,4 @@ +SSH +--- + +1. [SSH 命令注入漏洞(CVE-2017-1000117)](./1)