OSINT-MASTER

给了图片,先看图片的 EXIF 信息,拍摄时间是 2024-8-18 14:30,照片中可以在机翼上看到一个标号 B-2419

直接在 flightaware 中搜索这个标号,应该是飞机的注册号

可以搜到这是一架东航的飞机

flightaware 搜索结果

在下面可以找到历史航班

历史航班

可以看到,在 2024 年 8 月 18 日这四架航班中,只有红框中这架符合 14:30 在飞行中,点进去看一下详细信息

找到航班号 MU5156

航班号

下面根据照片拍摄时间和航行轨迹来找照片拍摄时飞机经过的地级市,我这里使用航班管家,有了航班号直接搜

14:30 在 14:13 和 14:51 中间偏左的位置

航班轨迹

放大来看,此时飞机大致经过邹城市

邹城市

经过搜索,邹城市属于济宁市,济宁市是地级市

济宁市

所以答案是 flag{MU5156_济宁市}

BGM 坏了吗?

用 Audacity 打开音频很容易发现结尾处右声道有信息,而左声道是噪音

audacity 1

根据题目描述是拨号音,但是直接放解不出来,需要删掉噪音

选择 分离立体音到单声道 » 关闭左声道 » 导出

audacity 2
audacity 3
audacity 4

按键音(即DTMF)解密网站:DTMF Decoder

dtmf

包上 flag{} 即可

AmazingGame

安卓私有目录位于 /data/user/0/<包名> 下

安卓的 shared_prefs 一般用来存放软件配置数据

修改文件即可更改已通过的关卡数据

通过第一关后,关掉游戏(这点很重要)

ADB 链接手机执行

shell

adb shell
run-as com.pangbai.projectm
cd shared_prefs
cat net.osaris.turbofly.JumpyBall.xml

xml

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <boolean name="cockpitView" value="true" />
    <int name="unlockedsolotracks" value="2" />
    <int name="unlockedtracks" value="2" />
    <int name="best0m0" value="130" />
    <int name="unlockedships" value="1" />
    <int name="userid" value="9705893" />
</map>

软件有 23 个关卡,我们把关卡解锁数改为 23

正常来说应该用 adb push 来修改文件,这里我们为了方便直接把 2 替换成 23

shell

sed -i 's/2/23/g' net.osaris.turbofly.JumpyBall.xml

打开游戏发现关卡全部解锁,随便游玩 23 关,等游戏结束即可获得 flag

ez_jail

本题的原意是只考查 {} 在 C++ 里的(宏)替代运算符这个知识

只要关键词用得对,网上一搜就能搜到,但是被出题人执行坏了,测题时出现了一堆非预期。考虑了一下各个知识点的难度,感觉非预期的难度和预期解相差不大,就索性变成了一道半开放性的题目

我们观察代码的 check 函数

python

def cpp_code_checker(code):
    if "#include" in code:
        return False, "Code is not allowed to include libraries"
    if "#define" in code:
        return False, "Code is not allowed to use macros"
    if "{" in code or "}" in code:
        return (
            False,
            "Code is not allowed to use `{` or `}`,but it needs to be a single function",
        )
    if len(code) > 100:
        return False, "Code is too long"
    return True, "Code is valid"

这段代码看似过滤了 #include #define 等,但不知道同学们有没有意识到 # 后加空格就能绕过这里,也就是说可以通过宏定义来做到编译前预处理

所以 Payload 可以是这样(感谢 yuro 师傅提供解法)

cpp

# define user_code() write(STDOUT_FILENO, "Hello, World!", 13);

预期解是找到 C++ 的替代运算符的相关资料,然后使用 <% %> 替换{},Payload 如下

cpp

void user_code()<%write(1, "Hello, World!\n", 14);%>

除此之外,还可以使用指针,把 user_code() 变成一个空函数。输出的话可以通过定义一个全局变量接收输出函数的返回值来实现,其 payload 如下(感谢 c_lby 师傅提供解法)

cpp

int a=puts("Hello, World!");
int (*user_code)()=rand;

cpp

int x = (printf("Hello, World!\n"), 0);
using user_code = void(*)();

admin

By admin

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注