>
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/
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论