远程命令执行漏洞与远程代码执行漏洞33333

远程命令执行漏洞的概念

	远程命令执行漏洞,指用户通过浏览器提交执行操作命令,
由于服务器端,没有针对执行函数做过滤,就执行了恶意命令

远程代码执行漏洞概念

	代码执行漏洞也叫代码注入漏洞,指用户通过浏览器
提交执行恶意脚本代码,执行恶意构造的脚本代码

两者区别

        命令执行: 一般指操作系统命令
     远程代码执行: 一般指的是脚本代码

造成的原因

   造成的原因是Web服务器对用户输入命令安全检测不足,
导致恶意(操作系统命令 或 脚本代码)被执行。

命令执行漏洞

命令执行漏洞的分类

	代码层:一些商业应用需要执行命令,商业应用的一些核心代码可能封装在
二进制文件中,在web应用中通过system函数来调用;

	第三方组件层:很典型的就是wordpress中,可以选择使用imageMagick这个
常用的图片处理组件,对用户上传的图片进行处理,造成命令执行,
另外java中的命令执行漏洞(struts2/Elasticsearch等)

命令执行漏洞的危害

任意执行系统命令,恶意木马被种植,挂马,钓鱼,敏感信息泄露.....

示例1

远程命令执行漏洞与远程代码执行漏洞33333_第1张图片
提交 http://localhost/cmd.php?ip=192.168.199.150|ipconfig

提交以后 | 命令管道符会将 ping 192.168.199.150|ipconfig
命令变成了 shell_exec('ping '.|ipconfig)
远程命令执行漏洞与远程代码执行漏洞33333_第2张图片

如何防止命令执行漏洞

修复方法有很多方式,例如 1、过滤特殊字符或替换字符 2、严格验证输入的类型长度

方案2 修复代码 :
远程命令执行漏洞与远程代码执行漏洞33333_第3张图片
执行效果
远程命令执行漏洞与远程代码执行漏洞33333_第4张图片

远程代码执行漏洞

复现示例 Tomcat任意文件上传漏洞CVE-2017-12615

介绍

	ApacheTomcat服务组件中开启了http的Put方法所造成的攻击者可以利用该方法任意
上传jsp木马所造成的远程代码执行漏洞。
	知默认情况下是禁止http请求中的上传(PUT)和删除(DELETE)方法的。

漏洞影响

上传包含任意代码的文件,并被服务器执行。

影响平台

Windows/Linux

漏洞影响版本

Apache Tomcat <= 7.0.81 | Apache Tomcat <= 8.5.20 | Apache Tomcat <= 9.0.0.M26

复现步骤一 准备环境

准备环境:
1、 java环境
Java™ SE Runtime Environment (build 1.8.0_20-b26)

2、apache-tomcat-7.0.70

3、配置 环境变量 CATALINA_HOME

4、修改tomcat 目录 conf/web.xml

5、 开启HTTP PUT
远程命令执行漏洞与远程代码执行漏洞33333_第5张图片

复现步骤二 下载复现环境 (在文章最下面)

复现步骤三 启动tomcat 服务

远程命令执行漏洞与远程代码执行漏洞33333_第6张图片

复现步骤四 利用PUT方法上传木马

利用工具目录如下

远程命令执行漏洞与远程代码执行漏洞33333_第7张图片

cmd 进入利用脚本目录

远程命令执行漏洞与远程代码执行漏洞33333_第8张图片

上传可执行木马程序

java -jar CVE-2017-12615-Exploit.jar
http://127.0.0.1:8080 /shell.jsp D:\aqcode\code\CVE-2017-12615-master-利用脚本\cmd.jsp

远程命令执行漏洞与远程代码执行漏洞33333_第9张图片
Existence 代表上传成功

工具源码分析

远程命令执行漏洞与远程代码执行漏洞33333_第10张图片
远程命令执行漏洞与远程代码执行漏洞33333_第11张图片
代码标记1 :
将 D:\aqcode\code\CVE-2017-12615-master-利用脚本\cmd.jsp 文件内容读取出来

cmd.jsp 内容如下

远程命令执行漏洞与远程代码执行漏洞33333_第12张图片

代码标记2 :
将内容写入到 http://127.0.0.1:8080/shell.jsp/ 文件当中

代码标记3 :
远程命令执行漏洞与远程代码执行漏洞33333_第13张图片
当后缀名为 .jsp 和 .jspx 的时候,是通过JspServlet处理请求的:

而其他的静态文件是通过org.apache.catalina.servlets.DefaultServletDefaultServlet处理的:
远程命令执行漏洞与远程代码执行漏洞33333_第14张图片
可以得知,“/shell.jsp/”(末尾有反斜杠)并不能匹配到 JspServlet,而是会交由DefaultServlet去处理。当处理 PUT 请求时:

远程命令执行漏洞与远程代码执行漏洞33333_第15张图片
远程命令执行漏洞与远程代码执行漏洞33333_第16张图片
会调用resources.bind:

远程命令执行漏洞与远程代码执行漏洞33333_第17张图片
dirContext 为FileDirContext:
远程命令执行漏洞与远程代码执行漏洞33333_第18张图片

调用 rebind创建文件:

远程命令执行漏洞与远程代码执行漏洞33333_第19张图片
http://127.0.0.1:8080/shell.jsp/ ,多了一个反斜杠,
这个关键,由于在org.apache.catalina.servlets.DefaultServlet 代 码会去掉最后的 / 的特性,故 put /shell.jsp/ 会创建成功
(同时绕过 JspServlet 处理类)

复现步骤五 执行木马程序

http://127.0.0.1:8080/shell.jsp

远程命令执行漏洞与远程代码执行漏洞33333_第20张图片

修复方案

1、配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat
注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。

2、根据官方补丁升级最新版本

漏洞总结

	该漏洞利用的前提条件需要手动开启readOnly功能,以支持上传操作,默认配置的情况
下是无法成功利用漏洞,从实际测试来看,漏洞危害性并没有那么高。但是如果用户一旦,启用了readOnly功能,黑客可利用漏洞成功入侵。

复现环境及代码

tomcat7源码
https://pan.baidu.com/s/1rcbxfRyRFujkmHJKCr9voQ

利用工具
https://pan.baidu.com/s/10RJCGHUaU_Ifh1p2XCUfTw

你可能感兴趣的:(远程命令执行漏洞与远程代码执行漏洞33333)