1)前面有两位基友发了麦考林的密码重置逻辑设计问题,我情不自禁也看了下;注册一个用户,来到密码重置功能发现可通过用户名或者邮箱找回密码;
2)输入用户名点击确认,发现可通过两种方式找回密码:注册邮箱(直接发送)、绑定手机(需填写注册手机号码),这里我们选择通过注册邮箱方式;
3)登陆对应邮箱查收系统发送的密码重置链接;
4)我们发现密码重置链接看上去貌似[滴水不漏],有重置密钥[p1]、与之相对应的邮件帐号[p2];作为一个wooyun白帽子,我们都不相信所谓的滴水不漏,于是重新使用密码重置功能并抓包分析;
5)分析发现在这个密码重置过程中,系统似乎交互了一些不明数据,这些数据是干什么的呢,于是再次查看邮箱第二次收到的密码重置连接,将两次收到的密码重置链接进行对比,发现两次收到的密码重置链接是一样的;
6)抓包截获到的系统交互数据:
{"decrypt_email":"EJ_g_1_OX7w1BDNwTJ2iH3a8hULouLhlnkL4O6Mg2HBhtWShjSFrCElW6hPCLPjcuO1d","decrypt_custno":"1j8D5pO_g_2_w我是隐藏部分hpSvQ_g_3__g_3_","___cache_expire___":"Mon Jan 14 2013 23:51:43 GMT+0800 (China Standard Time)"}
7)收到系统发送的密码重置链接:
http://www.m18.com/gmkt.inc/Member/ForgotMemberPwdSearch. asp x?p1=1j8D5pO_g_2_w我是隐藏部分hpSvQ_g_3__g_3_&p2=xxxxx@sina.com
8)亲,告诉我你发现什么了?是的,截获到的数据包中"decrypt_custno"参数正是我们的密码重置密钥,而且同一用户的密码重置密钥还是固定不变的;
9)好吧,我不会告诉你,其实密码重置链接中的"p2"参数是毫无意义的,直接使用密钥即可重置密码-_-||
10)这里以剑心妹纸的帐号为例子,给大家演示下;
10.1)直接来到邮件发送环节;
10.2)点击发送邮件并抓包,哈哈,这里就不马赛克了;
10.3)有了密钥就直接构造链接链接重置剑心妹纸的帐号咯;
http://www.m18.com/gmkt.inc/Member/ForgotMemberPwdSearch.aspx?p1=T6W_g_2_vO0pyOBYOspiYmVW5w_g_3__g_3_
10.4)就这样把剑心妹纸征服 :)
11)最后,小结下:只要知道用户名(这个是公开的),即可使用邮箱重置密码功能抓包截获对应账户的密码重置密钥,进行密码重置(不需要知道邮箱帐号);且该密钥固定不变,相当于变向长期控制用户账户!!!
查看更多关于麦考林任意妹纸密码重置 - 网站安全 - 自学php的详细内容...