下一站上岸
某同学在考公的时候看到这样一道题,发现自己怎么也找不到图形的共同特征或规律,你能帮帮他吗?
首先,在题给图片文件的结尾可以发现一串 Base64 编码的字符串,将其解码后可以获得提示「摩斯密码」:
摩斯密码总共有三种状态:点 .
线 -
和空格(分隔字符)。分析题目图像,经常考公的同学应该不难看出,每个图形都可以视作两个基本图形组合在一起,题中出现图形的这两个基本图形之间交点数量有所不同:
而这两个基本图形的交点数量全图数下来总共只有三种情况:0、1、2。这三种情况分别对应摩斯密码的三种状态,于是可以将图形转换为摩斯密码,然后解码就得到了 Flag:
CCCC
1 | 1. Input your source code of main.c. Meanwhile you can only use legal characters. Then your code will write in /home/ctf/main.c |
显然这题不能用常规思路写代码了。参考 Hint 提供的资料 Main is usually a function. So then when is it not? 直接从汇编入手:
1 | int main() { |
直接 gcc -c main.c -o main.o
编译然后 objdump -d -s main.o
拿到字节码:
1 | 0: 55 push %rbp |
因为不允许有字母 h
,所以还是得把字节码转为 int
,不过数字这边又不允许有 5
和 9
,在看了眼没有字母 b
和 x
的情况下,最后我还是选择通过手改字节码凑八进制和十进制来解决。这部分纯属体力活,我凑了大概两小时:
1 | const char main[] = { |
最终 Payload 如下:
1 | const int main[] = {1223002440, 016740307, 2370306048, 10301, 032214244000, 060602417, 0, 0, 0, 0, 0, 0, 0, 0, 1768042240, 1633824622, 064163}; |
没有回显的问题就交给反弹 Shell 解决:
devil's word
leu lia leu ng leu cai leu jau leu e cai b cai jau sa leng cai ng ng f leu b leu e sa leng cai cai ng f cai cai sa sa leu e cai a leu bo leu f cai ng ng f leu sii leu jau sa sii leu c leu ng leu sa cai sii cai d
温州话怎么你了。
1 | with open("devil's word.txt", 'r') as f: |
你知道中国文化嘛 1.0
题给文本确实是 Base32 编码的,但是其中部分字符被替换了。被替换的字符不多,随便找个 [A-Z2-7]
的字符给它修一下,使得解码后的文本都是八卦符号,信息的缺失可以在后面修正。
找工具 lkjlsj/base8-bagua-py 解码八卦后发现是社会主义核心价值观,其中有些字符不太对劲,就是上一步随便修的字符导致了信息错误,给它修正后进行核心价值观解码,最后进行一个 Key=5 的栅栏密码解密就得到了 Flag。
Tupper
你知道什么是 Tupper's Self-Referential Formula 吗?
1 | import matplotlib.pyplot as plt |
real check in
签到题,Base32 解码就是了。
where is crazyman v1.0
一眼二次元圣地「秋叶原」。
where is crazyman v2.0
图片搜索即可:
where is crazyman v3.0
图中可以注意到的是「BOUDL Apart Hotel」以及「Starbucks」,并且题说酒店和咖啡馆很近。基于上一题的搜索结果,搜索「Boulevard World」附近的「BOUDL Apart Hotel」:
逐个筛查这些地点附近的「Starbucks」,几分钟内就可以找到熟悉的桌椅设计:
Flag 在 Google Map 该地点的评论中(Base64 编码过):
This article is authored by Luoingly and is licensed under CC BY-NC 4.0
Permalink: https://luoingly.top/post/beginctf-2024-misc-writeup/