CTFshow 原谅杯

原谅杯比赛预告:
CTFshow 原谅杯
平台:https://ctf.show
开始:2020/11/11 00:00
结束:2020/11/11 23:59
内容:本次采用闯关模式,必须按顺序解题,否则无法欣赏狗血的爱情故事。
规则:
1 比赛期间可以随意讨论,wp须在比赛结束后发布,wp统一发布地址:https://wp.ctf.show
2 公平竞技,独立比赛
3 服务器不要爆破,不要攻击服务器,不要扫描!!!
4 奖品:帽子一个(颜色随机)


原谅1

附件:yuanliang_1.zip

压缩包有 story.zip 和 原谅1.png,群里hint+拟音解密emoji,密码1317bi77p9u,

解压拿到 1.jpg 和 剧情1.txt,stegsolve查看1.jpg的rgb通道发现flag。

原谅2

附件:yuanliang_2.zip

压缩包有未加密的 hint.txt,火星文解密得到解压密钥,解压拿到flag.txt内容。

原谅3_来份色图

附件:yuanliang_3.zip

Hint1: 阿狸2020年11月11日10:49在群里说得对

Hint2: 第一步、色图一分为二(常见文件格式/头尾了解一下);第二步、rrggbbrrggbbrrggbb…;第三步、你的工具更新了吗

压缩包有未加密的setu.zip,解压得到setu.png,010editor分析存在双图,foremost分解得到两张png。

将setu.zip用zsteg进行LSB分析,发现隐藏的png图,提取出新png图1。

结合盲水印提示,将foremost分解出的两张png同样用zsteg进行LSB分析,分别提取出新png图2、图3。

用github上各种盲水印脚本,使用正确脚本尝试解图1、图2、图3,有一种情况能出flag图。

原谅4

列目录可以看到剧情文件

Hint1: 老前辈说过“最安全的系统就是什么都没有”,我把没用的命令都删了,看你还怎么执行

Hint2: 你知道系统环境变量里的PATH是干什么的吗?

GET方式传入参数xbx,发现只能用ls列目录,尝试用echo写入文件成功,写入phpinfo()

echo '<?php phpinfo();?>' > phpinfo.php

访问发现存在open_basedir限制,试过各种open_basedir绕过、disable_function写bypass读/flag均不成功。

提示环境变量,查看:echo $PATH,分别到各路径下查看,仅存ls/rm/sh三种命令(无法执行常用命令的原因)。

sh命令,且可写入文件,尝试往根目录写入shell脚本:

echo -e "%23!/bin/sh\nwhile read line\ndo\necho \$line\ndone < /flag" > ../../../read

成功写入,再执行/bin/sh ../../../read得flag。

赛后还学到其他各种骚姿势。

原谅5-6

未解。

原谅7_baby加密

encrypt.exe -e flag.txt

附件:encrypt.exe、encrypted_flag.txt

Hint1: maybe des?

IDA跟进main函数,发现24位字符串123456788765432112345678,再跟进加密函数sub_401E16

sub_401E16((__int64)&v13, (__int64)argv, v44, (__int64)File, (__int64)&v14, 1, v8, v9, v10, v11, 1);

发现传入的24为字符串分为三组分别通过函数sub_401B7A处理:

sub_401B7A((void *)a1, (const void *)a2, v16, v14, 1);
sub_401B7A((void *)a1, (const void *)a2, v16 + 8, v14, 0);
sub_401B7A((void *)a1, (const void *)a2, v16 + 16, v14, 1);

结合提示DES,可知为3DES加密(24位密钥,且第一步处理会将密钥分成三组密钥分别处理,第一组解密,第二组加密,第三组解密,对应sub_401E16最后一个参数值)。

在线解密工具解密密文即可得flag。