记BCTF之旅—真假难辨


发布人:admin分类:网络安全浏览量:24发布时间:2017-12-12

我也来凑个热闹,解析一道BCTF——真假难辨。

首当其冲的便是一个偌大的you must login at host computer,看来得想办法绕过了。

抓包!上burp suite神器。

出题者故意很明显的给了我们一个“ip=。。。”,看来这里是突破口,恩。试试,果然127.0.0.1是正解。

有一个偌大的对话框,这里笔者卡了很久,还是不够敏锐啊,最后竟然是admin admin。

同时仍然不要忘了,抓包,改ip。注意!!

接下来,映入眼帘的还真如题目所说,是一个游戏,不过这是笔者玩过的最无节操的僵尸游戏了~僵尸这也太牛了,明显者不是给人玩的,是给僵尸玩的:)

出题者不给咱玩游戏,那就一竿子捅到底,直接上源码,源码搜了下“BCTF”,直接定位flag,然后顺藤摸瓜,理清脉络 ,flag也就自然算出来了嘛~

笔者这里去掉了大部分无关的代码,只留下了flag部分核心的代码。

var player = function(options) {
	this.moveSpeed = 5;
	this.life=5;
	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 createGhost=function(x,y){
	var newGhost=new ghost({width: 115, height: 136, x:x, y:y });
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostRunLeft",srcObj.ghostRunLeft,{width:1265,height:136,frameSize:[115,136],loop:true}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostRunRight",srcObj.ghostRunRight,{width:1265,height:136,frameSize:[115,136],loop:true}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostDieRight",srcObj.ghostDieRight,{width:4320,height:176,frameSize:[240,176],frameDuration:150}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostDieLeft",srcObj.ghostDieLeft,{width:1800,height:254,frameSize:[225,254],frameDuration:150}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostHurtLeft",srcObj.ghostHurtLeft,{width:816,height:157,frameSize:[204,157],frameDuration:150,onFinish:function(){this.relatedSprite.recover();}}));
	newGhost.addAnimation(new cnGame.SpriteSheet("ghostHurtRight",srcObj.ghostHurtRight,{width:816,height:157,frameSize:[204,157],frameDuration:150,onFinish:function(){this.relatedSprite.recover();}}));
	return newGhost;	
	}var authnum = function(key, num){
	var list = new Array('a', 'b', 'c', 'd', 'e', 'f', 'g');
	key = "BCTF{" + key + "|";
	for(var i = 0; i < num; i++)
	{
		key += list[i%7];
	}
	key = key + "}";
	return key}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);}var gameObj = {
	initialize:function(){
		this.key = ""
		this.deadghost = 0;


		var newGhost=createGhost(740,1064);
		this.key += newGhost.gh;
		this.key += "%"+this.player.pe;

	update:function(duration){
		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);
			}

大概说下脉络:

首先可以看到flag分了两部分,一部分是key,它是传进来的,另一部分是authnum这个函数算出来的。所以重点在key,

顺着函数的调用,我们会发现key有两次更新,第一次更新是在this.key += newGhost.gh;第二次是在this.key += "%"+this.player.pe。脉络理清了,剩下的就是算了。

BCTF{2097959%2400|abcdefgabc}

over~

大牛勿喷!

感谢BCTF团队提供的平台!


被黑站点统计 - 文章版权1、本主题所有言论和图片纯属会员个人意见,与本文章立场无关
2、本站所有主题由该文章作者发表,该文章作者与被黑站点统计享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和被黑站点统计的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、被黑站点统计管理员有权不事先通知发贴者而删除本文

免责声明

本站主要通过网络搜集国内被黑网站信息,统计分析数据,为部署安全型网络提供强有力的依据.本站所有工作人员均不参与黑站,挂马或赢利性行为,所有数据均为网民提供,提交者不一定是黑站人,所有提交采取不记名,先提交先审核的方式,如有任何疑问请及时与我们联系.

admin  的文章


微信公众号

微信公众号


Copyright © 2012-2022被黑网站统计系统All Rights Reserved
页面总访问量:21218769(PV) 页面执行时间:241.761(MS)
  • xml
  • 网站地图