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次
1、表示改属性得到的key是对的? 2、deadghost 是死去的僵尸。。。 必须全部杀死才能得到key
我把ip字段改成了218.2.197.238,然后。。。就么有然后了。。。
this.key += newGhost.gh; this.key += "%"+this.player.pe; this.pe = authp(this.moveSpeed, this.life); this.key = "" this.deadghost = 0; if(this.deadghost == 10) key的计算是中和参数进行计算 杀死10个僵尸 僵尸和玩家属性(authp(this.moveSpeed, this.life);) 不变 才是正确的key 全部10个zombie 无属性修改也能通关 为了轻松 this.shootDuration=10;啪啪啪的过 嘿嘿 html5游xi真好玩呢 改js就能作弊
请问楼主一般是拿什么改JS比较方便呢?有没一款软件可以禁止页面的某个JS文件或者修改调用之类的。
我到xi望你说下其中奥妙,我想仔细体会!图文并茂的更好,方便我学xi!谢谢
请问楼主一般是拿什么改JS比较方便呢?有没一款软件可以禁止页面的某个JS文件或者修改调用之类的。
chrome然后F12,选中你要改的js修改好后ctrl+s保存就好了
IE下呢?我现在有个环境应该是必须IE才可以。有什么办法吗?因为我那个环境需要装个activeX插件,我想谷歌浏览器应该装不了吧。
请问楼主一般是拿什么改JS比较方便呢?有没一款软件可以禁止页面的某个JS文件或者修改调用之类的。
chrome然后F12,选中你要改的js修改好后ctrl+s保存就好了
涨姿势了 表示题目都看不懂
看不懂题目????我被吓到了。。
涨姿势了 表示题目都看不懂
涨姿势了 表示卡在这了
ghost那里 if(this.life>0){ 一击必杀。。
请问楼主一般是拿什么改JS比较方便呢? 有没一款软件可以禁止页面的某个JS文件或者修改调用之类的。
admin这弱口令也太弱了。不过下面的过程确实精彩。
你看清楚了吗?是admin的弱口令吗?就这一步才是最精彩的好不。
admin这弱口令也太弱了。不过下面的过程确实精彩。
有同感啊,不过这道题算是里面简单的了,很多坑,我当时也把life--改成life++过了的。
其实我觉得adnin admin这个真是太亮了。。。其他牛逼的绕过都被这个亮光掩盖下去了。。原来是admin啊。。搞得我那么兴奋。。
-。- 我也觉得,试了Alice Alice ,admin Alice,anonymous anonymous,然后 就是admin admin了
其实我觉得adnin admin这个真是太亮了。。。其他牛逼的绕过都被这个亮光掩盖下去了。。 原来是admin啊。。搞得我那么兴奋。。
感谢大神提供结题过程