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

admin 2022年5月23日11:05:21评论271 views字数 1348阅读4分29秒阅读模式

CVE-2019-0232为Apache Tomcat RCE

漏洞原理

漏洞相关的代码在 tomcatjavaorgapachecatalinaservletsCGIServlet.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

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


访问一下已经启动成功


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


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


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


这里注意一下,去掉注释并添加以下代码

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>

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


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


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


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


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


添加true

<Context privileged="true">

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


C:TomcatwebappsROOTWEB-INF下创建cgi-bin目录


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


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


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


然后重启tomcat环境


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


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


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



来源:先知社区


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

欢迎加群,一起学习!(达到200人,需要加群主才可拉群)

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

如果群满了,欢迎加小浪,拉你入群

原文始发于微信公众号(衡阳信安):CVE-2019-0232漏洞原理和复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月23日11:05:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2019-0232漏洞原理和复现https://cn-sec.com/archives/677022.html

发表评论

匿名网友 填写信息