BCTF 选拔赛一道蛋疼的题目:真假难辨
BCTF里web板块有一道很有趣的题目,当时在做题的时候绕了点弯子,直到做出来的一刻才倍感蛋疼。这里就把流程记录一下,供各位看官一笑。
题目的描述是“唯有游戏与美食不可辜负。米特尼克拿到Alice的资料之后接着在BAT内网游荡,他发现了一个被限制的游戏,只有管理员Alice自己才能玩,但区区一个管理员的限制怎么能挡住米特尼克爱游戏的心!”然后给出了个链接,点进去发现就一个按钮,提示“此游戏只能在本机运行!”点击按钮后弹出提示“You must login at host computer ”。要绕过这一步很简单,打开burpsuite,刷新下页面后查看拦截的内容,发现有个ip的字段,修改为127.0.0.1 后提交,此时错误提示不见了,取而代之的是一个基础认证登录框。试了几次发现admin admin(先前是笔误,现在改好了)可以顺利登录进去(别问我怎么做到的,我猜的!真的!)
登录进去后跳转到了一个画风极其拙劣的游戏界面,如图
一个绿衣服绿帽子的小人捧着枪打僵尸的剧情。这种游戏对于我这样一个骨灰级职业玩家根本就是小菜一碟有没有!于是在我发现了主角只有五点血、小怪根本打不死、后期小怪各种打鸡血加速移动的逆天bug之下,我放弃了-。- 甚至一度怀疑这个游戏就是个坑爹的存在!因为题目名字本身就是“真假难辨”然后我开始找别的入口点但都以失败告终。
整理下思路回到这个游戏,看看源代码发现游戏本身全部都是依靠agint1.js来控制的,包括人物的血量,移动速度,小怪的血量(尼玛小怪的血量要打20枪才死啊!玩到后面四五个小怪疯了一样扑过来怎么玩!)在代码里搜一下life关键字,果然发现了受伤害掉血的函数:
player.prototype.hurt=function(){
var now=(new Date()).getTime();
var floorY=this.y+this.height;
if(now-this.lastHurtTime>=this.hurtDuration){
this.life--; //关键在这里,把life--改成life++ 小怪撞到你就加血了,蛤蛤~
if(isToLeft(this)){
this.setCurrentAnimation("playerHurtLeft");
}
else if(isToRight(this)){
this.setCurrentAnimation("playerHurtRight");
}
this.index(0);
this.isHurt=true;
if(this.life<=0){
this.die();
}
this.y=floorY-this.height;
this.lastHurtTime=now;
}
if(cnGame.collision.col_Between_Rects(this.player.getRect(),this.end.getRect())){
if(this.deadghost == 10){
this.key = authnum(this.key, this.deadghost);
alert("The Key is:" + this.key);
}
else{
alert("once again!");
}
cnGame.loop.end();
return;
}
update:function(duration){
if(cnGame.collision.col_Between_Rects(this.player.getRect(),this.end.getRect())){
if(1){
this.key = authnum(this.key, 10);
alert("The Key is:" + this.key);
}
else{
alert("once again!");
}
cnGame.loop.end();
return;
}
最后有的同学可能会问为什么不在chrome里的console功能直接运行authnum函数得到答案呢?因为key是和整个游戏关联的,具体的方法没有细看,但是能肯定的是要通过口算得到key的值是要花一点功夫的,还不如直接作弊打通关一轮游戏来得快。蛤蛤
评论57次
admin admin 感觉很扯淡,其他参赛者是怎么过去的?
好怀念当时,可恨当时学艺不精啊,不懂代码,最后一只被卡在比小怪虐的那里
好深奥,向各位大神学xi。
感谢思路分享,必须赞
谢谢分享学xi了
牛逼啊 牛逼啊
好玩
admin admin 还用着啊
学xi了。游xi看起来很有意思啊。支持
牛,涨姿势了
路过~~~~~~~~~~~~~~~~~
都是大牛玩的,小菜我真的膜拜
可以改主角速度,血量,ghost血量改为1,一击必杀!
当时试过了,篇幅原因就没写上去
可以改主角速度,血量,ghost血量改为1,一击必杀!
不用这么麻烦的,直接搜索bctf,就能看到算flag的函数,函数需要两个值,断点获取key,找到调用函数的位置,也就是你说的10通过通过才调用,直接将key和10带如函数就算出flag。
很有意思的题目!
题目很有意思啊
赞一下思路
解题过程很精彩,谢谢共享
请问楼主一般是拿什么改JS比较方便呢?有没一款软件可以禁止页面的某个JS文件或者修改调用之类的。
chrome然后F12,选中你要改的js修改好后ctrl+s保存就好了
IE下有开发人员工具箱。一样有快捷键。debug这些个工具很多的。
IE下有是有。但是好像不好用啊。。不可以修改JS,最多只能加个断点。我xi望能找到个工具可以像其他F12一样改JS的。。