【36D杯】ez_qrcode/42/爱拼才会赢——出题人视角

admin 2022年1月5日23:15:19评论62 views字数 2824阅读9分24秒阅读模式

>

This site is best viewed in a modern browser with JavaScript enabled.

### id="flarum-content">

【36D杯】ez_qrcode/42/爱拼才会赢——出题人视角

hdxw

ez_qrcode

说再多都不如自己做做,原题wp

https://yous.be/2014/12/07/seccon-ctf-2014-qr-easy-write-up/

这里只是改了二维码的内容,题目中给的“部分”二维码已经包含了所有数据,要做的就是“手动解码”。

听说BJD比赛还是那个比赛有类似的题,这我还真不知道,最早我是在xctf做题遇到的然后搜到了这个原题wp

42

没有任何难度简直就是送分题,附件压缩包尾部附加了图片

图片是“幻影坦克”,制作过程自行搜索。即在背景是白色和黑色时分别显示不同的图片,当然这难不倒善于图片隐写的各位大佬的。

图片背景是黑色时就能看到flag(黑色可以试试QQ中的转发)

再来说说压缩包,是“zip炸弹”,被做题的大佬发现了我很高兴,这个压缩包原本只有42kb,但完全解压后保证能撑爆你的磁盘(https://unforgettable.dk/

解压密码就是42(文件名、题目名),用7zip打开可以看到压缩包中内容(大小,crc什么的)都是相同的,所以拿出一个0.dll来就行(对解题没有关系)

无关扩展:压缩包还有一种特殊的是“包含自身”的压缩包,有兴趣的自己研究

爱拼才会赢

出题思路

2019年的各种大型比赛经常出现拼图题目,venom圣诞时还专门出了一道拼图题

这些题目都是flag在图片上,所以有的没必要完全拼上,但这不是理想的拼图,既然要拼就必必须须全拼上。

所以这里采用hash的方式验证是否全拼完。为了解题方便我手动写了一个简陋的拼图界面。

解题思路

总结一句就是动脑越多解题越省劲

23*13的拼图看着不多,才298块,拼起来确实有点多

题目所给链接是码云的gitpage,故意留了 http://ctfshow.gitee.io/subject_puzzle/README.md 可以通过这个了解拼图结果的验证逻辑

或者也可以通过 http://ctfshow.gitee.io/subject_puzzle/js/data_init.js ,这里是所有的逻辑代码,没有混淆(多善良的出题人)

从界面可以知道题图碎片是一个个单独的图片,还给了原图图片。

网页源码留了注释“其他高级功能等待大佬们的开发”

以上是所有可以得到的信息。

方法1、硬拼
就是拼,拼完就给flag

方法2、巧妙的拼
这就是网页里注释信息的意思。

静态网页的元素什么的都是可以动态操纵的,可以F12在console里执行代码改变网页的元素或事件,也就是改变拼图的功能代码,下面给几个例子

// 点击图片进行交换,开始拼图后再执行
let page_one = null;
let page_two = null;

function change_div(){
	var tmp_bg = page_one.css("background-image");
	page_one.css("background-image",page_two.css("background-image"));
	page_two.css("background-image",tmp_bg);
	check_now();
}

$(".hang div").click(function(){
	if(!page_one){
		page_one = $(this);
		$("h1").text("page_one");
	}else if(!page_two){
		page_two = $(this);
		$("h1").text("page_two");
		change_div();
		page_one = null;
		page_two = null;
	}
});
// 拼图导出字符串,可用于存档
var origin_str = '';
$(".hang div").each(function(i,e){
  var base = bg2base($(e).css("background-image"));
  if(base == 'empty'){ base = '';}
  origin_str += base;
});
console.log(origin_str);
// 字符串回显拼图,这里给出了拼成后的字符串,执行后即完成拼图
var origin_str = '5c2b316b52956639ece7fegac857dabcf8g0fff582b4b724d8cha4ag3341094d03760108290e04f1f38a70e1e25edcc50d96e6e53837g81a9f7ca1f77f835380614a435d7915403646ddf4ae5h1d026922458e994c0c1gehb875g2g926f997e41cfc1471c2ahc9fdd60f3234c08f8c922f3afaea72cbb23060g3fbf23cdh2ee0f6dgc613b0749d1h1e19db182cc1a89b8h5g6f472g2d4ef0d28g3b7b786g5554affgeg49b66a4b3gb99a7a77bhb3cc51874he9100bed94ac67dece86a0c4aabbfh7hg59e0a0h3hd45a4f123e642365a7cd11a97gbg2abd275f215025eeg67d9ca62881cgd9598990b19h8842bfef633fg11febc36c586h16b50gg784627e3556a3c7856dd5cae39g8d6edf173d1b068b44d3g420abd0a25ba59398d791cf2h734gba4868d10507e8adbe';
$(".hang div").each(function(i,e){
	if(i*2 < origin_str.length){
		$(e).css("background-image","url('./data/"+origin_str.substr(i*2,2)+".jpg')");
	}
});
check_now();

有了以上几个功能拼图时间至少可以减少一半,更多强大的功能自行开发

方法3、下载文件代码拼
既然给出了原图和拼图碎片,可以通过比较图片色值的方法“自动拼图”(原图可能需要稍作处理),然后串联文件名得到flag

这也是比较理想的解题方法,通过js了解验证逻辑和flag计算方法然后自行代码实现“拼图”

最后,虽然碎片图片文件名是有规律的,原本图片名是从小到大排序,但是为了防止根据文件名进行拼图,在使用碎片之前已经随机打散了一次,所以这条路是不通的。


hdxw

二维码解析高端武器:https://merricx.github.io/qrazybox/


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日23:15:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【36D杯】ez_qrcode/42/爱拼才会赢——出题人视角http://cn-sec.com/archives/720152.html

发表评论

匿名网友 填写信息