Discuz! <=2.5 csrf防御绕过

2014-05-26T00:00:00
ID SSV:93594
Type seebug
Reporter Root
Modified 2014-05-26T00:00:00

Description

简要描述:

在Discuz! <=2.5版本的某处设计存在失误,csrf防御可被绕过 可以获取到formhash 所以应该算全局的绕过吧

详细说明:

其实还是 drops文章《上传文件的陷阱》带来的问题。 dz2.5以下版本修改头像处未检查图片文件的合法性,可以上传.jpg后缀的swf文件。 使用这个swf文件发起恶意请求读取页面源码就能获取到formhash 有formhash之后。。想干嘛就干嘛了 具体文件/uc_server/control/user.php 281行onuploadavatar函数

$imgtype = array(1 =&gt; '.gif', 2 =&gt; '.jpg', 3 =&gt; '.png');

只检查了后缀而不像3.0以上用库检查了图片格式

漏洞证明:

步骤 1、新建一个获取页面源码 提取formhash 然后用formhash发送添加副站长请求的swf,保存为.jpg后缀

<img src="https://images.seebug.org/upload/201405/24140118027cb57a60e471ee1da2fe45450fc3c7.jpg" alt="0.jpg" width="600" onerror="javascript:errimg(this);">

2、注册一个账号,去/home.php?mod=spacecp&ac=avatar上传上一步生成的.jpg后缀的swf文件并抓包 上传后的地址应该是 http://192.168.1.104/uc_server/data/tmp/upload{uid}.jpg这样的

<img src="https://images.seebug.org/upload/201405/24140259a5b580714c3e240edf7debaceb69a833.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">

3、新建一个html页面,把上一步拿到的头像地址当作flash加载到页面。 4、引诱管理员访问这个html页面,就会在后台把你的账号添加为副站长

<img src="https://images.seebug.org/upload/201405/2414052151e6777efdffe88932382c9ddd901811.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">

<img src="https://images.seebug.org/upload/201405/24140535fa2011caab0791e6e6f3535010b66f43.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">