文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。

SSCTF网络安全比赛——HungryGame

时间:2016-02-29 / 分类:个人日志,学习园地 / 浏览:2827 / 0个评论 发表评论

第一关

这道题的题目是《饥饿游戏》,一进游戏果然是好莱坞大片的即视感:

可以看到场面非常宏伟壮观,而我们的英雄人物就是乔布斯

看一下游戏提示:

Connected
Login OK
Use [↑↓←→] ot move around, [space] is the function key.

也就是说:方向键可以移动英雄,空格键是用来触发功能的。

把英雄移动到门的旁边,按空格键可以过关。

第二关

地图里有两扇门:

关卡提示:

There is a locked door in front of you, but you don’t have the key.

走到左边的门旁边按空格键,看到提示:

Find key to open this door!

看来需要钥匙才能打开左边的门,但是地图里没看到有钥匙。

在网页源码里搜索关键字Find key,可以在game.js文件里发现以下代码:

function onnextdoor() {
    data = JSON.stringify([msg('next', {})]);
    ws.send(data);
}

function onfackdoor() {
    logtext('Find key to open this door!');
}

搜一下onfackdoor()函数,发现按空格就直接调用了,所以是找不到钥匙来开启的。
onnextdoor()函数的作用是向服务器发送数据进入下一关,所以在浏览器的控制台里执行onnextdoor()即可过关。

还有一种方法是修改英雄的坐标,这样英雄就可以穿墙了,然后走到右边的门按空格键。

第三关

地图里有两颗树:

游戏提示:

Hold [space] to cut the tree. When you get 9999 wood, a wooden pickaxe will be automatically generated.

在树的旁边按住空格键可以砍树,获得9999块木材会自动获取一根木制镐。

走到树边砍树:

Cutting Tree…
You get 3 woods,total 3
You get 5 woods,total 8
……

按住一秒会得到一个木材,手动砍树的话肯定是行不通的,看一下js文件,发现如下代码:

if (level == 2 && users[heroname].x < 800) {
    var tmp = Date.parse(new Date()) - woodstart
    if (tmp > 1000 && woodstart != -1) {
        woodstart = -1;
        data = JSON.stringify([msg('wood', {
            'time': tmp
        })]);
        ws.send(data);
    }
}

tmp变量是两次按键之间的毫秒数,所以可以轻易伪造砍了10000颗树,在浏览器控制台输入:

data = JSON.stringify([msg('wood', {
    'time': 10000000
})]);
ws.send(data);

执行后游戏提示:

You get 10000 woods,total 10008
Get the wooden pickaxe!!!

走到门边通往下一关。

第四关

地图里有两堆钻石:

游戏提示:

Mine by hitting [space], When you get 9999 diamonds,the diamond sword will be automatically generated.

猛击空格键,得到9999颗钻石会获得一把钻石剑。

在游戏源码里可以发现以下代码:

if (level == 3 && users[heroname].x < 800) {
    if (second != Date.parse(new Date()) && diamondpos) {
        if (diamondtimes > 0) {
            data = JSON.stringify([msg('diamond', {
                'count': diamondtimes
            })]);
            ws.send(data);
        }
        diamondtimes = 0;
        diamondpos = false;
        second = Date.parse(new Date());
    } else {
        diamondtimes += 1;
    }
}

按照第三关的方法在浏览器控制台执行:

data = JSON.stringify([msg('diamond', {
    'count': 10000
})]);
ws.send(data);

游戏提示:

Mining too fast, manager kicked you out.
Connection lost

挖掘太快,被服务器踢出去了。

应该是数量太多了,经过试验,每次挖掘的最大数量是50,所以用循环执行200次就行了:

for (var i = 0; i <= 200; i++) {
    data = JSON.stringify([msg('diamond', {
        'count': 50
    })]);
    ws.send(data);
}

执行结果:

Get 50 diamond,total 50
Get 50 diamond,total 100
Get 50 diamond,total 150
……
Get 50 diamond,total 9950
Get 50 diamond,total 10000
Get the diamond sword!!!

通过门可以通向下一关。

第五关

终于要打BOSS了:

游戏提示:

At last, the final level! Wave your diamond sword and beat the BOSS.
PS: Short-range weapons can only hurt other players(your hp +1) but cannot harm the BOSS.
PS: Cause 15 point damages to the BOSS to get the flag
PS: Or kill 5 players to get the flag

近距离攻击的武器只能攻击到别的玩家,打不到远处的BOSS。攻击到别的玩家时,别的玩家的hp会减1,自己的hp会加1。
有两种过关方法,一是让BOSS掉15滴血,二是杀死5个玩家。

BOSS是有瞬移技能的,满地图顺机传送,而且隔两三秒就攻击玩家一次:

Attacked by boss
Attacked by boss
Attacked by TFBoys
Attacked by boss

英雄不但会受到BOSS攻击,还会受到其它玩家的攻击,而英雄只有10滴血,往往坚持30多秒就挂了。

地图里有个神秘的箱子和一把远程攻击的弓箭,其实这些都是骗人的,捡物品的时候会调用以下代码:

function onselfkill(argument) {
    logtext("There's nothing here.Too yong too simple.( ‵▽′)ψ ");
}

看一下按功能键时的代码:

if (level == 4) {
    if (second != Date.parse(new Date())) {
        data = JSON.stringify([msg('attack', {
            'x': users[heroname].x,
            'y': users[heroname].y
        })]);
        ws.send(data);
        attacking = true;
        second = Date.parse(new Date());
    }
}

代码向服务器发送了一个攻击事件和英雄的当前坐标,服务器应该是判断这个坐标周围有没有攻击对象的。如果把这个坐标改成BOSS的坐标的话,那么就可以攻击到BOSS了。

查看js代码,发现有一个boss变量,所以可以在控制台执行以下代码:

function attact() {
    data = JSON.stringify([msg('attack', {
        'x': boss.x,
        'y': boss.y
    })]);
    ws.send(data);
}
setInterval('attact()', 1000);

执行后可以得到过关的key:

Attack:boss,total 1
Attack:boss,total 2
Attacked by boss
Attack:boss,total 3
Attack:boss,total 4
Attack:boss,total 5
Attacked by boss
Attack:boss,total 6
Attack:boss,total 7
Attacked by boss
Attack:boss,total 8
Attack:boss,total 9
Attack:boss,total 10
Attacked by boss
Attack:boss,total 11
Attack:boss,total 12
Attack:boss,total 13
Attacked by boss
Attack:boss,total 14
Attack:boss,total 15
SSCTF{2b3d41dd4b7911dc0fe683d1a0d977ef}

标签: ,
本文链接: SSCTF网络安全比赛——HungryGame
版权所有: 破博客, 转载请注明本文出处。

发表评论

*

* (显示gravatar头像)

Ctrl+Enter快捷回复

© 2019 破博客 all rights reserved.