0x00 写在前面的话
最近无聊在抖音上刷视频时,偶然间刷到了Youkia社区,瞬间就勾起了当年的游戏记忆

当年植物大战僵尸ol非常火爆的时候,Youkia也推出了属于它们自己的PVZ游戏
每天守在这个游戏面前等待着日常任务的更新,可以算是当年的快乐
由于近些年新社交应用的兴起,Youkia社区也是逐渐被淘汰,最后被收购合并,现在的Youkia的家园就只剩下了唯一的两个游戏入口和账户信息的修改


0x01 重置密码请求的研究
在我找到pvzol的组织后,我发现总是有那么些人打着卖资源号的幌子去zha骗一些萌新,为了搞清楚他们是如何做到洗号的,我对Youkia社区的重置密码开始了简单的分析。
找回密码界面
首先我们来到找回密码界面

确实有够简洁的,非常符合十年前的审美观,就只有一个简单的电子邮件找回密码

抓包处理
只要是网络通信,那么我们就有机会通过抓包来获取到一些蛛丝马迹
打开fiddler后,配置好过滤规则,我们输入注册时使用的邮箱地址

并且正常发送了重置密码的请求,并且在邮箱中也是收到了由Youkia社区发来的找回密码的邮件
不过值得一提的是,这里我发送重置密码的请求后,Youkia社区仍然是处于登录状态,并且没有下线,如果猜测正确的话,它的社区并没有心跳这一说法,不能强制下线。并且原密码已经无法再次登录Youkia社区,必须通过点击邮件中的重置邮件地址激活发送的新密码,重新登录Youkia社区

分析请求

参数如下:
PS:由于这里请求带有数组,所以重放请求时需要对应参数位置,不要混乱,否则后台是无法下标获取数据
大致分析下,xajax对应的的是action,xajaxr对应的是一串13位的数字
这里我首先想到的是时间戳,不过常见的都是10位,半信半疑下我还是去转换了下Unix时间戳(13位毫秒)

Bingo,猜想正确,xajaxr对应的是发送重置密码时的时间点,并且与重置的密码相对应
邮件密码分析

发送重置密码的请求后,我们会受到由Youkia社区发来的一封邮件,包含了Youkia系统生成的新密码和激活新密码的链接,点击链接后即可通过新密码登录
注意链接的Get参数:
Name | Value |
xxxx@qq.com | |
str | cb623efd6c42c884ab4a4244a75b723d |
str这一段就比较有趣,一共是32个字符,这里我联想到了32位的md5值
明文:692VKJH2
密文:cb623efd6c42c884ab4a4244a75b723d

通过比对后确认,验证密码的链接str参数的值就是登陆密码的md5值
0x02 伪造密码请求
至此,我们可以通过伪造重置密码请求,达到修改密码的效果
例如,设置xxx@qq.com
的密码为Q28EO1HI
md5加密后的密文为:f860ec2526a33c44547c87f67189e9c8

请求后,我们成功重置了该邮箱的密码,不过想要再次登录的话,不论你输入什么密码都会显示错误,密码已经随机
猜测:由于确认重置密码时并没有时间戳这个参数,导致后台无法确认是哪个密码,导致密码再次随机
0x03 启用修改邮箱账号功能

在Youkia社区,还有一个尘封已久的功能,通过验证新的E-mail地址,修改当前账号的登录电邮,写文章前猜测号贩可以通过此项功能达到目的。
抓取文件
调用浏览器的开发者人员工具,选择提交按钮,审查该元素,得到该按钮绑定的js事件为:edit_email();
避免本地缓存影响搜索结果,进入Network
选项,选择 disable cache

搜索函数名:edit_email()
,定位该函数所在js文件,并且通过抓包单独下载下来,或者在fiddler中保存整个响应,保存到本地桌面或者英文目录。

在fiddler中,我们需要选择home.js
文件,并且右键→保存为本地文件
,打开后进行编辑

通过查看该函数,我们可以明确地看到,更换电邮部分函数被官方注释,并且留下了此功能暂时关闭的提示消息,我们修改时将原来注释的代码恢复,并将此功能暂时关闭注释掉即可。

以下是修改后的函数代码,要确保函数的括号和分号正确,否则会导致js文件问题
function edit_email()
{
var new_email=$.trim($('#new_email').val());
if(!isEmail(new_email))
{
alert('请正确填写要修改的邮箱');
$('#new_email').focus();
return false;
}
if($('#old_email').html()==$('#new_email').val())
{
alert('新的邮箱与原来的邮箱一致,操作不成功');
$('#new_email').focus();
return false;
}
SetPageDisabled();
$('#popdiv_body').html('<p class="popdivBlockTxt">新的邮箱地'+new_email+'需通过邮件确认后才能生效<br />请到该邮箱查收邮件并点击确认链接<br />生效后,请用此Email登录你的Youkia帐户</p><p class="popdivSubmitBtn"><a href="javascript:void(0);" onclick="duty_checkemail(\''+new_email+'\')">确定</a></p><p class="popdivSubmitBtn"><a href="javascript:closeDIV($(\'#popdiv\'));">取消</a></p>');
/*
$('#popdiv_body').html('<p class="popdivBlockTxt">此功能暂时关闭</p>');
setCenter($('#popdiv'));
$('#popdiv').fadeIn('slow');
*/duty_checkemail(new_email);
}
拦截修改关键文件
修改完成后,保存文件,建议不要修改文件名称,并且在fiddler中选择过滤规则,选中home.js
后添加到我们的自定义规则中,并且将其替换为我们本地的home.js

启用规则后,在浏览器请求home.js
文件时,就会自动响应为本地的文件,达到修改网页js的目的
我录制了一段GIF演示拦截home.js
文件的实际效果:
我们可以看到,edit_mail
已经被我完全修改了,这时我们再点击修改邮箱账号,就不会再出现功能暂时关闭的字样,不过能否修改,还得看服务器上的功能是否被关闭,有不小心的站长前端写了禁止,但是后端并没有禁用此功能,导致了系统的漏洞。不过Youkia社区的运维应该没有这么粗心,能撤的全部撤了,就剩下了一个游戏和充值系统。
请求修改账号

点击提交后,系统正常发送了邮件,并且我也在新的邮箱中收到了由find@youkia.com
发送的更换账号请求

该重置账号的链接包含userid
和code
参数:
Name | Value |
userid | xxxxxx |
code | 32位字符(猜测为md5) |
不过该code参数的值嗦对应的是什么md5也不得而知,目前已经将该md5值加入md5后台进行解密,想要得到结果可能还要等待很长一段时间。

不过可惜的是,得到结果是服务器无法处理此次请求,并且显示了以下错误:

0x04 盗取猜想
由于我们在上文提到,该游戏和整个社区并没有心跳功能,简要说明,只要拿到你的cookies或者sign的值,那么我们就可以直接对有游戏进行登录。
在我处于登录状态修改密码后,系统只是单一弹出一个密码成功修改的窗口,并没有强制当前用户下线或者游戏下线,这便是该社区甚至整个游戏的一个BUG。在后续的抓包过程中存在interface
请求,不过不影响正常游戏和已登录用户。所以可以大胆猜想:
- 号贩想方设法登录你的账号
- 保存账号的sign值和cookies
- 伪造登录请求,直接登录账号或者进行其他洗号行为
以上文章内容仅代表个人观点,如果有兴趣了解关于充值抓包的可以看下这篇文章: