百度杯全国网络安全技术对抗赛(BCTF)——真假难辨


描述
        唯有游戏与美食不可辜负。米特尼克拿到Alice的资料之后接着在BAT内网游荡,他发现了一个被限制的游戏,只有管理员Alice自己才能玩,但区区一个管理员的限制怎么能挡住米特尼克爱游戏的心!http://218.2.197.238:8081/76446cb94ef19b1d49c3834a384938d1/web200/ 

解题思路

       提示是只能在本机玩,我第一时间想到是http数据头的某些信息修改,在尝试几个未果的前提下,用谷歌浏览器查看网页源码发现提交表单有一个隐藏属性的input
<input type="hidden" name="ip" value="220.202.153.57">
       因此猜测可能是通过这个客户端提交的IP地址来区分本地用户和远程用户。直接修改ip的value为“127.0.0.1”以后提交,进入一个需要Authentication的页面

       猜测几组数据发现不能通过认证,于是想到用脚本来暴力破解,用python写一个Authentication暴力的程序,最终得到暴力破解结果
       从运行结果可知用户名和密码都是admin,在网站上输入admin/admin之后,进入一个游戏页面,玩了几局发现根本就打不死怪物!

       查看源码发现这是一个js小游戏,没办法只有把网页源码全部扒下来,试着在本地运行。查看js源码寻找游戏运行的参数,游戏开始出代码为
cnGame.loader.start(gameObj, { srcArray: srcObj });
       猜测Flag会以弹出对话框的形式出现,搜索alert字符串发现游戏确实会弹出包含key的对话框。

       key的生成算法如下:

       分析key的生成算法太麻烦了,能不能换个思路,把老怪打死然后得到Flag呢?
于是寻找怪物的游戏参数,发现怪物的生命值为20,玩家的生命值只有5,怪不得一直打不死怪物呢!玩家的游戏参数定义代码如下:
var player = function(options) {
    this.init(options);
	this.moveSpeed = 5;
	this.isJump=false;
	this.shootDuration=600;
	this.hurtDuration=1000;
	this.life=5;
	this.lastShootTime=(new Date()).getTime();
	this.lastHurtTime=(new Date()).getTime();
	var authp = function(a, b) {
		var c = 0xfff;
		var d = 0xfff;
		var e = a - b;
		var f = a + b;
		var g = a * b;
		c = c * d;
		c += c * d;
		d = d * e + f * g;
		g = f | d;
		g = g ^ f;
		f = g * f;
		return f;
	}
	this.pe = authp(this.moveSpeed, this.life);
}
     怪物的初始化参数代码如下:
var ghost = function(options) {
    this.init(options);
	this.moveSpeed=20;
	this.life=20;
	var auth = function(a, b) {
		var d = a;
		var e = b;
		var a = 0xfff;
		var b = 0xff;
		var c = 1024;
		a = a << 2;
		a = a << 6;
		b = a + b;
		c = a + b + c + d + e;
		return c;
	}
	this.gh = auth(this.moveSpeed, this.life);
}
可以将怪物的生命值和移动速度减小      
this.moveSpeed=1;
this.life=5;
       增加玩家player的生命值和移动速度,保存修改后的游戏源码,再玩一局就可以把怪物打死了,在终点处会弹出一个对话框,Flag如下图所示。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值