### 简要描述: TSRC西安沙龙议题案例之Discuz(影响大量站点,即使修改某文件做过部分防御仍可绕过)。 ### 详细说明: 0x01 窃取Token 默认安装的Discuz,crossdomain.xml中的allow-access-from为*,所以任意域下的flash均可窃取discuz的Token(formhash),造成csrf。 经过统计,常见的八个安全社区: [<img src="https://images.seebug.org/upload/201507/06011457cc447807d8daa7a75185df30a1ee1aad.png" alt="QQ20150706-1@2x.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/06011457cc447807d8daa7a75185df30a1ee1aad.png) 其中红色的四个在我统计的时候仍然存在该问题。 从安全社区的现状即可预估所有Discuz社区的现状,存在漏洞的概率至少在50%以上,而且肯定远比这个值高(毕竟统计的是安全社区,站长和管理员都是相对懂的,就高达50%)。 利用蚁逅平台,即可窃取目标Discuz的Token: [<img src="https://images.seebug.org/upload/201507/0601173899d65bc17cbf3642ec57760c55b72487.png" alt="QQ20150702-2@2x.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/0601173899d65bc17cbf3642ec57760c55b72487.png) 上图是利用CSRF窃取的90sec社区用户的formhash。 0x02 绕过CSRF防御函数 以下代码是Discuz对CSRF的检查函数: [<img...
### 简要描述: TSRC西安沙龙议题案例之Discuz(影响大量站点,即使修改某文件做过部分防御仍可绕过)。 ### 详细说明: 0x01 窃取Token 默认安装的Discuz,crossdomain.xml中的allow-access-from为*,所以任意域下的flash均可窃取discuz的Token(formhash),造成csrf。 经过统计,常见的八个安全社区: [<img src="https://images.seebug.org/upload/201507/06011457cc447807d8daa7a75185df30a1ee1aad.png" alt="QQ20150706-1@2x.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/06011457cc447807d8daa7a75185df30a1ee1aad.png) 其中红色的四个在我统计的时候仍然存在该问题。 从安全社区的现状即可预估所有Discuz社区的现状,存在漏洞的概率至少在50%以上,而且肯定远比这个值高(毕竟统计的是安全社区,站长和管理员都是相对懂的,就高达50%)。 利用蚁逅平台,即可窃取目标Discuz的Token: [<img src="https://images.seebug.org/upload/201507/0601173899d65bc17cbf3642ec57760c55b72487.png" alt="QQ20150702-2@2x.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/0601173899d65bc17cbf3642ec57760c55b72487.png) 上图是利用CSRF窃取的90sec社区用户的formhash。 0x02 绕过CSRF防御函数 以下代码是Discuz对CSRF的检查函数: [<img src="https://images.seebug.org/upload/201507/0601185467d71c8b1f8afd9d5a4058821446150c.png" alt="QQ20150703-1@2x.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/0601185467d71c8b1f8afd9d5a4058821446150c.png) 其中主要验证了formhash和referer formhash在0x01中我通过flash即可窃取了,现在考虑怎么绕过referer。 绕过方法有2: 1.利用空Referer(https -> http) 2.利用代码逻辑错误:代码中,满足这个条件strncmp($_SERVER['HTTP_REFERER'], 'http://wsq.discuz.qq.com', 24) === 0 ,即可不检查referer。而这里我可以构造一个子域名,值为wsq.discuz.qq.com,如http://wsq.discuz.qq.com.jjfly.party,将POC放在该域名下,即可绕过referer检查。 0x03 构造POC 所以,我给出利用POC(这里以CSRF发帖为例): http://wsq.discuz.qq.com.jjfly.party/game/discuz/csrf.php?domain=localdiscuz.com (domain为目标discuz的域名,二级目录则填写localhost/discuz) 默认安装最新版Discuz x3.2(最好装根目录,否则crossdomain.xml可能请求不到),受害者登录并访问以上POC,即可自动发表一篇帖子,标题为“hacked by phithon”。 演示视频:http://youtu.be/H39rRofr8bg 0x04 绕过防御 有安全意识的站长可能会修改crossdomain.xml,将其中的*修改为自己的域名,如: [<img src="https://images.seebug.org/upload/201507/0601472811b2ec8814d2c8ce554b86fe44fb525a.png" alt="QQ20150706-3@2x.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/0601472811b2ec8814d2c8ce554b86fe44fb525a.png) discuz官网就这样修改的。但实际上仍然无法防御CSRF攻击。 如何绕过? 我们可以将flash后缀修改为.gif或.txt等(其实这里存在一个XSS,我们可以直接上传swf,但因为和本漏洞无关,不多解释,本漏洞不需要上传后缀为swf),作为合法文件传到目标域名下。 通过discuz中某些上传方法,可以直接控制上传后的文件内容: http://att.discuz.net/data/attachment/forum/201507/06/024906sfeaii36a9dri6l4.txt 所以,我上传了一个swf,将后缀修改为txt。 官网演示(证明swf是可以上传并得到路径的):http://att.discuz.net/data/attachment/forum/201507/06/024833ti31fmy4484muxxh.txt 为了不影响官网,CSRF发帖就不再官网演示了。本地上传一个: http://localdiscuz.com/data/attachment/forum/201507/06/025812up2z4m6ayayt46pm.txt 构造POC: http://wsq.discuz.qq.com.jjfly.party/game/discuz/csrf1.php?domain=localdiscuz.com&swf=http://localdiscuz.com/data/attachment/forum/201507/06/025812up2z4m6ayayt46pm.txt 其中domain是目标域名,swf是刚才上传的flash。 访问后依旧可以CSRF,因为这个flash也是本域名下的。浏览器执行flash并不以后缀判断。 演示视频: http://youtu.be/VP0N50YThLI 这样一绕过,这个CSRF漏洞影响的范围就更广了,据我估计能影响99%的站点。 ### 漏洞证明: http://youtu.be/H39rRofr8bg http://youtu.be/VP0N50YThLI