漏洞概要
关注数(24)
关注此漏洞
漏洞标题:Discuz!从CSRF全员XSS到脱裤与任意SQL执行(附POC主要谈修复方式)
提交时间:2015-01-26 10:37
修复时间:2015-04-26 10:38
公开时间:2015-04-26 10:38
漏洞类型:CSRF
危害等级:中
自评Rank:10
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2015-01-26: 细节已通知厂商并且等待厂商处理中
2015-01-29: 厂商已经确认,细节仅向厂商公开
2015-02-01: 细节向第三方安全合作伙伴开放
2015-03-25: 细节向核心白帽子及相关领域专家公开
2015-04-04: 细节向普通白帽子公开
2015-04-14: 细节向实习白帽子公开
2015-04-26: 细节向公众公开
简要描述:
Discuz! 从CSRF全员XSS到脱裤&任意sql执行(附POC,主要谈修复方式)
详细说明:
首先是一个CSRF:
url:/admincp.php?action=members&operation=newsletter&username=%2A&uid=0&srchemail=®datebefore=®dateafter=&postshigher=&postslower=®ip=&lastip=&lastvisitafter=&lastvisitbefore=&lastpostafter=&lastpostbefore=&birthyear=&birthmonth=&birthday=&lower[credits]=&lower[extcredits1]=&lower[extcredits2]=&higher[credits]=&higher[extcredits1]=&higher[extcredits2]=
POST内容:
formhash=&scrolltop=&anchor=&subject=%3Cscript%3Ealert%28%2Fxss%2F%29%3B%3C%2Fscript%3E&message=test&sendvia=pm&pertask=100&newslettersubmit=%E6%8F%90%E4%BA%A4
给出一个简单的POC:
成功提交
前台所有成员均受到被X影响
那下面说一下怎么利用这个XSS,其实这个XSS是很好利用的,既然我们有了XSS,后台任意操作只需要拿到formhash即可,那么给出POC:
只要把这段js代码通过CSRF发送给论坛全部会员(包括所有管理),即可成功利用脱裤。
并且可以执行任意sql
漏洞证明:
修复方案:
我们先来谈一下风险,这个漏洞从一开始挖掘就开始做风险评估,要结合CSRF和XSS才可以利用的一个漏洞,到底有没有价值呢?
1.首先最鸡肋的就是这个CSRF,要管理员访问指定页面才可以达到目的。不过我们反过来想一下,如果是针对性非常高的攻击,再结合一些社工方法,仅仅让管理员访问一个页面应该是问题不大的。
2.访问页面后,XSS已经发送给所有用户。管理员在不知情的情况下,看到有新消息,应该是毫不犹豫地打开提醒,XSS即可被触发。
需要管理员互动,但是会造成很大的风险。根据DREAD模型,取最高威胁风险值为4。
Damage Potential:可造成执行所有后台操作的风险(脱裤、sqlshell等),4。
Reproducibility:过程比较繁琐,1。
Exploitability:漏洞利用条件相对复杂,2。
Affected users:影响所有用户,4。
Discoverability:知情者较容易发现,3。
那么Impact = D(4) + R(1) + E(2) + A(4) + D(3) = 14
Likelihood取70%的可能性利用成功。
即最后Risk = Likelihood * Impact = 70% * 14 = 9.8,取10
最后我们来谈一下修复。
1.首先那个CSRF操作要判断formhash,不多说了。主要来谈一下如何解决一旦有XSS就可以伪造执行任意后台请求的问题。
2.最简单的方法就是搞个验证码,在验证码不被识别的情况下基本不可能达到目的。
3.其次还有一种方法,在每个页面的URI里都加上token,并且每次访问均不同。
在点右上角的“管理后台”访问admincp.php的时候,URI里带有生成好的token(并且仅当前页面访问有效,重新访问页面后过期),如果已经登陆,即可直接访问后台,未登陆需登陆后访问后台。
如果直接键入url(比如http://host.com/admincp.cp),URI中不带有token,即需要重新登陆后生成token,才可访问后台。
在访问后台后,每个页面(所有页面,不仅仅是请求页面)都带有token,如果通过直接访问url的方式(即URI中不带有token)访问某个页面或执行操作,则还需要重新登陆后台,才可以访问。
这样的方式对程序员写代码相对复杂一些,但是这样的方式可以保证即使存在XSS,也不会被抓取到页面中的formhash去伪造请求。应该是可以保证100%安全的。
4.不知道你们理解了没,我的表达可能不是太准确。如果有不明白的地方可以问我。
版权声明:转载请注明来源 zph@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:10
确认时间:2015-01-29 17:05
厂商回复:
非常感谢你提出的问题和解决方案,我们尽快对这个问题进行修复
最新状态:
暂无