安全矩阵

 找回密码
 立即注册
搜索
查看: 2434|回复: 0

CVE-2019-0232漏洞原理和复现

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-10-8 19:59:19 | 显示全部楼层 |阅读模式
原文链接:CVE-2019-0232漏洞原理和复现

CVE-2019-0232为Apache Tomcat RCE

漏洞原理
漏洞相关的代码在 tomcat\java\org\apache\catalina\servlets\CGIServlet.java 中,CGIServlet提供了一个cgi的调用接口,在启用 enableCmdLineArguments 参数时,会根据RFC 3875来从Url参数中生成命令行参数,并把参数传递至Java的 Runtime 执行。这个漏洞是因为 Runtime.getRuntime().exec 在Windows中和Linux中底层实现不同导致的
Java的 Runtime.getRuntime().exec 在CGI调用这种情况下很难有命令注入。而Windows中创建进程使用的是 CreateProcess ,会将参数合并成字符串,作为 lpComandLine 传入 CreateProcess 。程序启动后调用 GetCommandLine 获取参数,并调用 CommandLineToArgvW 传至 argv。在Windows中,当 CreateProcess 中的参数为 bat 文件或是 cmd 文件时,会调用 cmd.exe , 故最后会变成 cmd.exe /c "arg.bat & dir",而Java的调用过程并没有做任何的转义,所以在Windows下会存在漏洞
漏洞复现
启动tomcat

访问一下已经启动成功

Tomcat的 CGI_Servlet组件默认是关闭的,在conf/web.xml中找到注释的 CGIServlet部分,去掉注释,并配置enableCmdLineArguments和executable

这里注意一下,去掉注释并添加以下代码
enableCmdLineArguments启用后才会将Url中的参数传递到命令行executable指定了执行的二进制文件,默认是perl,需要置为空才会执行文件本身。
<init-param>        <param-name>enableCmdLineArguments</param-name>        <param-value>true</param-value>    </init-param>    <init-param>        <param-name>executable</param-name>        <param-value></param-value>    </init-param>

然后在conf/web.xml中启用cgi的 servlet-mapping

修改conf/context.xml的添加 privileged="true"属性,否则会没有权限

添加true
<Context privileged="true">

在C:\Tomcat\webapps\ROOT\WEB-INF下创建cgi-bin目录

在该目录下创建一个hello.bat

然后重启tomcat环境

访问http://localhost:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe即可弹出计算器,这里构造系统命令即可



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-22 16:26 , Processed in 0.014165 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表